Получение значения SQL из sqlcmd.exe удаленно
Я должен выполнить удаленно команду SQL на базе данных, потому что sqlcmd
не установлен.
$Configuration = Invoke-Command -ComputerName $dataserverName -Credential $cred -ScriptBlock {
sqlcmd.exe -S $using:dataserver -U $using:user -P $using:pass -d $using:database -q $using:SQLQuery
}
Поэтому, когда я выполняю свой запрос, я получил ответ в том же блоке, поэтому я не могу получить значение из каждого столбца следующим образом:
MinimumSize MaximumSize Delimiter IdFile -------------------- -------------------- --------- - --------------------- NULL NULL | 6 (Затронуто 1 рядов)
так что если я сделаю $Configuration[0]
, Я получил
$Configuration[0] = MinimumSize MaximumSize Delimiter IdFile
как линия, так что я ничего не могу сделать. Мой вопрос как получить например $Configuration.IdFile = 6
,
1 ответ
Я также был в системах, где Invoke-Sqlcmd не присутствовал, и установка программного обеспечения не была разрешена. SQLCMD.exe возвращает массив строк, представляющих каждую возвращаемую строку, а не объект, как Invoke-Sqlcmd, поэтому вы должны проанализировать $Configuration[2].
Но вот хитрость: измените оператор SQL, чтобы он возвращал XML вместо таблицы, и вы можете позволить Powershell выполнять анализ за вас. Вы не предоставили SQL, но это должно быть довольно легко адаптировать к вашим потребностям:
$SQL = @"
SET NOCOUNT ON
DECLARE @XML AS XML
SET @XML = (--change this SELECT statement to match yours, but keep the 'AS Row' table alias:
SELECT Name, recovery_model_desc
FROM master.sys.databases AS Row
FOR XML AUTO, ROOT('table') -- also keep this line
)
SELECT CAST (@XML AS nvarchar(max)) -- do this to prevent SQLCMD adding line breaks
"@
[string] $output = (SQLCMD -S 'YOUR_SQL_SERVER' -E -h-1 -y0 -Q $SQL)
([xml] $output).table.Row[0].Name #now you have an array of rows and can reference each field
([xml] $output).table.Row | Out-GridView #you can also put all the rows into a GridView!