如何让 SCCM 识别 Powershell 脚本完成的返回代码?

如何让 SCCM 识别 Powershell 脚本完成的返回代码?

我正在使用 SCCM 2012 应用程序部署来安装软件。由于 SCCM 不断因 exe 验证错误而失败,因此特定安装类型是脚本安装程序。该脚本是 powershell,即使由 SCCM 执行也能成功安装软件。

问题是 SCCM 只能看到脚本完成时返回的 0。我尝试过write-host、、和带有软重启代码的一行项目。SCCM 似乎都没有读取它们,因为应用程序执行日志捕获了 0 的返回值returnwrite-output

如何从 powershell 输出返回代码以便 SCCM 可以解释它们?

答案1

已知 powershell 退出代码存在一个问题(请参阅此答案的结尾),在将 powershell 安装脚本与 SCCM 结合使用时可能会出现此问题。为了解决这个问题,我采取了两项措施:

  1. 我总是让 SCCM 调用一个批处理文件,该文件通过显式调用来运行 powershell 脚本powershell.exe
  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 脚本时退出代码不可靠?

我们知道退出代码不可靠的原因如下:

相关内容