[英]SQL Server Agent Job fails to run CmdExec step under proxy account
[英]Powershell SQL Server Agent CmdExec job step multiple line code
為什么這樣的代碼在PowerShell ISE中執行:
$var = 'dog';Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ('$($var)')"
但不是在SQL Server代理中作為CmdExec作業步驟嗎? 盡管照常將其封閉。 我相信這是多個查詢,因為單個查詢有效
powershell.exe -ExecutionPolicy Bypass -Command {$var = 'dog';Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ('$($var)')"}
TL; DR;
我有一個帶有CmdExec步驟的SQL Server代理作業。 我希望分配一個變量,然后在插入語句中使用它。
到目前為止,以下插入將起作用:
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 Agent CmdExec作業步驟
powershell.exe -ExecutionPolicy Bypass -Command {$var = '''dog'''; Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ($($var))"}
注意,我必須對變量進行3次轉義,該變量以'dog'形式插入表中,並帶有引號。 我從插入語句中刪除了單引號,但是無法將其作為CmdExec步驟在服務器代理中運行
-Command
接受ScriptBlock,因此請稍作調整:
powershell.exe -ExecutionPolicy Bypass -Command {
Invoke-SqlCmd -ServerInstance "servername" -Query "insert into DB.dbo.tbl values ('cat')"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.