Sql-Server

在 SQL Server 代理中執行 Powershell 腳本時出錯

  • April 21, 2016

我有一個通過 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"

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