Sql-Server-2012

對 SQL 代理作業中的 Powershell 錯誤進行故障排除

  • April 19, 2017

我有一個試圖添加到 sql 代理作業中的 powershell 腳本,但作業步驟失敗並出現以下錯誤

   A job step received an error at line 1 in a PowerShell script. The corresponding line is 'import-module SQLPS  -DisableNameChecking'. Correct the script and reschedule the job. The error information returned by PowerShell is: 'Could not load file or assembly 'file:///C:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules\SQLPS\Microsoft.SqlServer.Management.PSSnapins.dll' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.

我假設該錯誤是由模組路徑的差異引起的,因此我通過 $env:PSModulePath 顯式設置路徑以匹配程式碼執行良好的 powershell 會話的路徑。我對powershell很陌生,所以您可以提供的任何幫助將不勝感激

我現在只是在做一些測試,所以一切都在我的桌面上本地執行。我正在執行 SQL Server 2012。

當您使用“PowerShell”類型執行 SQL 代理作業步驟時,您實際上並沒有在(完整的)PowerShell 中執行。這種作業步驟類型實際上在sqlps.exe基於 PowerShell 1.0 和數量極其有限的 cmdlet 的 minishell 下執行。

實際上,PowerShell 作業步驟類型不是很有用。相反,我建議使用“作業系統/CMDExec”作業步驟,並PowerShell.exe從命令行呼叫。

使用 cmdexec 作業步驟類型,您的作業步驟將如下所示:

PowerShell.exe "D:\Scripts\MyScript.ps1" -NonInteractive

通過呼叫PowerShell.exe,您可以獲得完整/目前的 PowerShell shell(而不是迷你 shell),並且可以使用完整/目前的 SQL Server PowerShell 模組。如果您使用的是 SQL Server 2016+,這一點尤其重要,其中SQLSERVER模組已通過更長的 cmdlet 列表得到增強。

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