Powershell

如何讓 SCCM 辨識來自 Powershell 腳本完成的返回碼?

  • April 1, 2016

我正在使用 SCCM 2012 應用程序部署來安裝軟體。特定的安裝類型是腳本安裝程序,因為 SCCM 一直因 exe 驗證錯誤而失敗。該腳本是 powershell,即使由 SCCM 執行,也能成功安裝軟體。

問題是 SCCM 僅從腳本的完成中看到返回 0。我試過write-host, return, write-output, 和只是一個帶有軟重啟程式碼的行項目。SCCM 似乎沒有讀取它們,因為應用程序執行日誌擷取返回 0。

如何從 powershell 輸出返回碼以便 SCCM 可以解釋它們?

將 powershell 安裝腳本與 SCCM 一起使用時,powershell 退出程式碼存在一個已知問題(請參閱此答案的末尾)。為了解決這個問題,我採取了兩種措施:

  1. 我總是讓 SCCM 呼叫一個批處理文件,該批處理文件通過powershell.exe顯式呼叫來執行 powershell 腳本。
  2. 我確保安裝腳本中的每個程式碼路徑都以顯式呼叫[System.Environment]::Exit().

通過這兩個措施,我沒有遇到與退出程式碼相關的問題。這是一個巨大的勝利,因為對安裝腳本的退出程式碼進行故障排除是一個緩慢的過程,因為您必須等待 SCCM 客戶端為每次故障排除迭代呼叫您的腳本。

批處理文件和 powershell 腳本如下所示:

Install-Application.bat

powershell.exe .\Install-Application.ps1
exit /b %errorlevel%

Install-Application.ps1

try 
{
   # do a bunch of installation stuff
   if ( $rebootNeeded )
   {
       [System.Environment]::Exit(3010)
   }

   [System.Environment]::Exit(0)
}
catch
{
   [System.Environment]::Exit(1)
}

為什麼 SCCM 直接呼叫 powershell 腳本時退出程式碼不可靠?

以下是我們如何知道退出程式碼不可靠的方法:

引用自:https://serverfault.com/questions/716760