Невозможно вставить переменные 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. Кажется очень странным.
Надеюсь, это поможет кому-то в будущем.