簡體   English   中英

Powershell SQL Server代理CmdExec作業步驟多行代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM