Получение значения SQL из sqlcmd.exe удаленно - PullRequest
0 голосов
/ 08 февраля 2019

Я должен выполнить удаленную команду 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 rows affected)

, поэтому, если я сделаю $Configuration[0], я получу

$Configuration[0] = MinimumSize          MaximumSize          Delimiter             IdFile

как строку, поэтому я ничего не могу сделать.У меня вопрос как получить например $Configuration.IdFile = 6.

1 Ответ

0 голосов
/ 08 февраля 2019

Я также был в системах, где 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! 
...