Sql-Server
在 SQL Server 代理中執行 Powershell 腳本時出錯
我有一個通過 SQL Server 代理執行的 SQL 作業(運行 SQL Server 2012 Enterprise)。作業的最後一步是執行位於網路共享上的應用程序。不幸的是,我不知道應用程序所在文件夾的名稱(文件夾是版本號),所以我使用 PowerShell 來查找它:
set-location "\\server\companydocuments\MyApp\Application Files\" $name = Get-ChildItem | sort name -desc | select -f 1 | select name cd $name.name & ".\Application.exe"
如果我在 SQL Server 上打開一個 PowerShell 視窗,那麼它工作正常。當我在 SQL Server 代理中執行它時,我收到以下錯誤:
A job step received an error at line 1 in a PowerShell script. The corresponding line is 'set-location "\\server\companydocuments\MyApp\Application Files\'"
我認為這可能是權限問題,所以我嘗試在我的憑據下執行 SQL Server 代理(它是測試伺服器,而不是生產伺服器),但我仍然遇到同樣的錯誤。我也嘗試將網路驅動器映射到共享文件夾而不是 UNC 路徑,但同樣的錯誤。
誰能建議我如何連接到這個文件夾?
我相信您的問題將是
SQLPS
提供者。由於 SQL Server 代理中的 PowerShell 步驟會自動將您置於該提供程序的上下文中,因此在您的普通控制台中執行的某些命令將不會以相同的方式執行。在這裡完成了一篇文章Set-Location
。您基本上必須告訴SQLPS
您要使用的提供者。您的程式碼如下所示:
set-location -Path Microsoft.PowerShell.Core\FileSystem::"\\server\companydocuments\MyApp\Application Files\"
如果您願意,也可以將其餘部分包裝成兩行:
cd (Get-ChildItem | Sort-Object name -Descending | Select name -First 1).name & ".\Application.exe"