Невозможно вставить переменные PowerShell из массива в вызов Invoke-Sqlcmd

У меня есть массив, который проходит через строку, присваивая значения элементам. Если я затем назначу эти элементы переменной и передам ее в 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: не удалось найти хранимую процедуру 'select * from ALERTS'.
В 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 ответ

Таким образом, причина, как представляется, если вы делаете это:

$query = somearray[0]

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

"select * from DB"

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

$query = "select * from DB"

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

select * from DB

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

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

Другие вопросы по тегам