Sql server Powershell SQL Server代理CmdExec作业步骤多行代码
为什么这样的代码会在PowerShell ISE中执行:Sql server Powershell SQL Server代理CmdExec作业步骤多行代码,sql-server,powershell,sql-server-agent,Sql Server,Powershell,Sql Server Agent,为什么这样的代码会在PowerShell ISE中执行: $var = 'dog';Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ('$($var)')" 但不是作为CmdExec作业步骤在SQL Server代理中?尽管像往常一样把它包起来了。我相信这是多个查询,因为单个查询是有效的 powershell.exe -ExecutionPolicy Bypass -Command
$var = 'dog';Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ('$($var)')"
但不是作为CmdExec作业步骤在SQL Server代理中?尽管像往常一样把它包起来了。我相信这是多个查询,因为单个查询是有效的
powershell.exe -ExecutionPolicy Bypass -Command {$var = 'dog';Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ('$($var)')"}
TL;博士
我有一个带有CmdExec步骤的SQL Server代理作业。我希望分配一个变量,然后在insert语句中使用它
到目前为止,以下插入将起作用:
powershell.exe -ExecutionPolicy Bypass -Command "Invoke-SqlCmd -ServerInstance 'servername' -Query 'insert into DB.dbo.tbl values (''cat'')'"
这是一只猫。现在我需要一只狗,大致如下:
powershell.exe -ExecutionPolicy Bypass -Command "$var = 'dog'; Invoke-SqlCmd -ServerInstance 'servername' -Query ""insert into DB.dbo.tbl values (''$($var)'')"""
这里有两个问题,逗号终止符,我在其他作业中成功地使用了它来分隔命令。第二个问题是转义双引号。我知道他们需要将变量处理成字符串
我尝试过用双引号以及其中一个“转义”。我还尝试将变量声明分离到一个服务器代理作业步骤中,并在另一个步骤中使用该变量
根据下面的@gvee答案,我将代码放在一个脚本块中,该脚本块在PowerShell中完美执行,但不是作为SQL代理CmdExec作业步骤
powershell.exe -ExecutionPolicy Bypass -Command {$var = '''dog'''; Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ($($var))"}
注意,我必须对变量进行三次转义,该变量作为“dog”插入表中,并包含引号。我从insert语句中删除了单引号,但是我无法在服务器代理中运行此命令,因为CmdExec步骤
-命令
接受脚本块,因此请尝试一下:
powershell.exe -ExecutionPolicy Bypass -Command {
Invoke-SqlCmd -ServerInstance "servername" -Query "insert into DB.dbo.tbl values ('cat')"
}
请不要用答案更新您的问题。将它们作为答案发布。谢谢,谢谢!3个引号也适用于我!你救了我一天!