Невозможно вставить переменные PowerShell из массива в вызов Invoke-Sqlcmd - PullRequest
0 голосов
/ 10 января 2019

У меня есть массив, который перебирает строку, присваивая значения элементам. Если я затем назначу эти элементы переменной и передам ее в invoke-sqlcmd, я получу ошибку. Тем не менее, если я присваиваю значение непосредственно переменной и передаю ее, она работает нормально:

Назначить значение массиву:

for ($i=0; $i -lt $somearray.length; $i++) {
    $somearray[$i] = $somearray[$i].Replace('$(query)', $query.text)
}

Позволяет сказать somearray [0] = "выбрать * из БД". Мы назначим переменную:

$query = somearray[0]

Теперь я передаю это моему Invoke-Sqlcmd:

Invoke-Sqlcmd -Query $query -Database "local" -ServerInstance "somedb" |
    Export-Csv ".\somefile.csv"

Это не удалось:

Invoke-Sqlcmd : Could not find stored procedure 'select * from ALERTS'.
At C:\Migration\ExportTool\ExportTool\Gavs.ps1:95 char:17
+ ...             Invoke-Sqlcmd -Query $query -Database $db -ServerInstance ...

Однако, если я сделаю это:

$query = "select * from DB"

Invoke-Sqlcmd -Query $query -Database "local" -ServerInstance "somedb" |
    Export-Csv ".\somefile.csv"

работает отлично.

1 Ответ

0 голосов
/ 11 января 2019

Итак, причина в том, что если вы сделаете это:

$query = somearray[0]

Когда вы просматриваете $ query в команде Invoke-sql, это выглядит так:

"select * from DB"

И когда вы сделаете это:

$query = "select * from DB"

Это выглядит так:

select * from DB

Таким образом, прямая ссылка на строку удаляет кавычки в команде Invoke-sqlcmd. Кажется очень странным.

Надеюсь, это поможет кому-то в будущем.

...