Шаг задания PowerShell для Server Agent. Разница между вызовом файла и вызовом команды

У меня есть простой код PowerShell для вставки значения в таблицу:

Invoke-SqlCmd -ServerInstance myserver -Query 'insert into Database.dbo.tbl values (1)'

и если я сохраню его в виде файла, я могу вызвать его на этапе задания CmdExec. Тем не менее, кто-нибудь может сказать мне, почему я не могу запустить команду, тем более что она состоит из одной строки:

powershell.exe -ExecutionPolicy Bypass -Command 'Invoke-Sqlcmd -ServerInstance myserver -Query ''insert into DBADatabase.dbo.tbl values (1)'''

Может кто-нибудь сказать мне, почему запуск в качестве команды не будет работать, но тот же код, что и файл, может работать. Любая помощь приветствуется.

Спасибо

2 ответа

Решение

Ваш powershell.exe ... команда выполняется снаружи PowerShell, возможно, через cmd.exe,

В таком случае, '...'-Закрытые строки не имеют синтаксической функции и передаются напрямую в PowerShell, что заставляет его интерпретировать их как включающий строковый литерал, который просто выводится как есть (другими словами: ваша команда печатается, а не выполняется).

Вместо этого вы должны использовать "..." заключить команду для передачи в PowerShell; внутри этой строки, вы можете использовать '...':

powershell.exe -ExecutionPolicy Bypass -Command "Invoke-Sqlcmd -ServerInstance myserver -Query 'insert into DBADatabase.dbo.tbl values (1)'"

Я создал тестовое задание на моем сервере с приведенным ниже кодом powershell, и он работает. Ниже изображения есть мои рабочие детали.

Мой тестовый код

Invoke-Sqlcmd -ServerInstance 'MYSERVER' -Query 'insert into DBA_TOOLS.dbo.tbl values (1)'

Ваш код - вам не хватает одинарных кавычек 'Myserver' вокруг сервера SQL.

Invoke-Sqlcmd -ServerInstance 'myserver' -Query ''insert into DBADatabase.dbo.tbl values (1)'

надеюсь, это поможет

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