Шаг задания 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)'
надеюсь, это поможет