服务器代理PowerShell作业步骤 - 调用文件和调用命令之间的区别

时间:2018-03-15 18:25:07

标签: sql-server powershell sql-server-agent dbatools

我有一些简单的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 个答案:

答案 0 :(得分:0)

我已经在我的服务器上使用以下PowerShell代码创建了测试作业,并且它可以工作。下面的图片有我的工作细节。

我的测试代码

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

您的代码 - 您缺少单引号' myserver'围绕sql server。

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

enter image description here

希望这个帮助

答案 1 :(得分:0)

您的powershell.exe ...命令是从外部 PowerShell执行的,可能是cmd.exe

在这种情况下, '...' - 附带的字符串没有语法功能并直接传递给PowerShell,导致 it 将它们解释为包含< em> string literal ,它只是输出as-is (换句话说:你的命令是打印而不是执行

相反,您必须使用"..."将命令括起来传递给PowerShell;在该字符串中,您可以自由使用'...'

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