如何使SCCM识别Powershell脚本完成中的返回码?


9

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

问题在于SCCM仅从脚本的完成中看到0的返回。我已经尝试了write-host,,returnwrite-output,其中只有一个包含用于软重启的代码的订单项。由于应用执行日志捕获了0的返回值,因此SCCM似乎都不读取它们。

您如何从Powershell输出返回码,以便SCCM可以解释它们?


您是否尝试过exit 1在PowerShell脚本末尾进行类似的操作?
jscott 2015年

在这种情况下exitcmd内置的。在其他部署系统中,我看到.ps1文件使用start或运行cmd /c powershell.exe somefile.ps1。很抱歉,您无法获得SCCM测试。
jscott 2015年

Answers:


9

将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脚本时,为什么退出代码不可靠?

这是我们知道退出代码不可靠的方式:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.