1

我有一些简单的 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)'''

谁能告诉我为什么作为命令运行不起作用,但与文件相同的代码可以工作。任何帮助表示赞赏。

谢谢

4

2 回答 2

0

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

在这种情况下,'...'-enclosed 字符串没有语法功能并直接传递给 PowerShell,导致它将它们解释为包含字符串文字,它只是按原样输出(换句话说:您的命令被打印而不是执行) .

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

powershell.exe -ExecutionPolicy Bypass -Command "Invoke-Sqlcmd -ServerInstance myserver -Query 'insert into DBADatabase.dbo.tbl values (1)'"
于 2018-03-16T03:15:20.720 回答
0

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

我的测试代码

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

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

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

在此处输入图像描述

希望这有帮助

于 2018-03-15T18:49:21.947 回答