Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Powershell SQL Server代理CmdExec作业步骤多行代码_Sql Server_Powershell_Sql Server Agent - Fatal编程技术网

Sql server Powershell SQL Server代理CmdExec作业步骤多行代码

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

为什么这样的代码会在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)')"}
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个引号也适用于我!你救了我一天!