SCCMにPowershellスクリプトの完了からの戻りコードを認識させる方法は?


9

SCCM 2012アプリケーション展開を使用してソフトウェアをインストールしています。SCCMがexe検証エラーで失敗し続けるため、特定のインストールタイプはスクリプトインストーラーです。スクリプトはpowershellであり、SCCMによって実行された場合でもソフトウェアを正常にインストールします。

問題は、SCCMがスクリプトからの完了から0の戻りしか認識しないことです。私が試したwrite-hostreturnwrite-outputソフトリブートのためのコードと、ちょうどラインアイテム。アプリの実行ログが0の戻りをキャプチャするため、SCCMによって読み取られるようには見えません。

SCCMがそれらを解釈できるように、Powershellから戻りコードをどのように出力しますか?


exit 1PowerShellスクリプトの最後で何かを試しましたか?
jscott

この場合exitcmd組み込みです。他の展開システムでは、.ps1ファイルがstartまたはで実行されるのを見ましたcmd /c powershell.exe somefile.ps1。SCCMテストにアクセスせずに吐き出してすみません。
jscott

回答:


9

SCCMでpowershellインストールスクリプトを使用するときに明らかになる可能性があるpowershell終了コード(この回答の最後を参照)には既知の問題があります。この問題を回避するには、次の2つの方法をとります。

  1. 私は常にSCCMに、powershell.exe明示的に呼び出すことでPowerShellスクリプトを実行するバッチファイルを呼び出させます。
  2. インストールスクリプトのすべてのコードパスがへの明示的な呼び出しで終了することを確認します[System.Environment]::Exit()

これらの2つの対策により、終了コードに関連する問題は発生していません。インストールスクリプトの終了コードのトラブルシューティングは遅いプロセスなので、トラブルシューティングの反復ごとに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スクリプトを直接呼び出すと、終了コードが信頼できないのはなぜですか?

以下は、終了コードが信頼できないことを知る方法です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.