Sql-Server

CmdExec Powershell Job Step Escape 雙引號

  • September 11, 2018

我有一個 PowerShell 作業步驟我正在嘗試執行,但它因語法錯誤而失敗,我相信這是因為我試圖在我的程式碼中轉義雙引號。任何人都可以看看並幫助我正確設置轉義字元或調整我的程式碼。

powershell.exe "Compress-Archive -Path \\NAS\DB-backups\BackupFiles -DestinationPath `"\\NAS\DB-Backups\BackupFiles $(get-date -f yyyy-MM-dd).zip`" -CompressionLevel Optimal"

我也嘗試過使用 \ 作為轉義字元

powershell.exe "Compress-Archive -Path \\NAS\DB-backups\BackupFiles -DestinationPath \"\\NAS\DB-Backups\BackupFiles $(get-date -f yyyy-MM-dd).zip\" -CompressionLevel Optimal"

我嘗試在命令行中執行這個腳本(帶有 \ 轉義字元)並且執行良好。再次感謝任何幫助。

我相信您遇到的問題與此 Stack Exchange 文章SQL 代理 - PowerShell 步驟“語法錯誤”中提到的SQL Server 代理令牌有關

摘自那篇文章

這不是很直覺,我從來沒有找到任何具體的解釋

$$ e.g. no exact BOL or white paper was found $$. SQL 代理作業中的語法錯誤是基於使用者令牌的 T-SQL 語法錯誤。所以這基本上意味著 PowerShell 子表達式運算符被視為 SQL Server 代理的令牌。因此,在 PowerShell 中,此 $( ) 似乎被視為 SQL Server 代理的保留字元序列。

參考您的嘗試,

$(get-date -f yyyy-MM-dd).zip

注意 $( 您嘗試獲取 zip 文件的目前日期的位置。該語法是 Powershell 子表達式。這部分試圖被 SQL Server 代理解釋為令牌。

我的建議是先將子表達式分離到另一個 Powershell 變數 ($ZipDate) 中,然後使用它來完成 Powershell 命令。

試試這個:

powershell.exe "$ZipDate = (get-date -f yyyy-MM-dd); Compress-Archive -Path "C:\TestCompress" -DestinationPath "c:\TestCompressOut\$ZipDate.zip" -CompressionLevel Optimal"

引用自:https://dba.stackexchange.com/questions/217217