Sql-Server
CmdExec Powershell Job Step Escape 雙引號
我有一個 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"