我正在使用 SCCM 1607(又名 SCCM 2016)中的任务序列安装一个相当复杂的软件。在任务序列中,我有一个 try/catch 块,因此如果 TS 失败,我可以将计算机恢复到工作状态。
像这样:
这里的问题是,当任务序列中出现实际故障时,错误处理例程会完成它的工作,并且任务序列会优雅地退出。我在序列中捕获自己的日志以反映错误,但就 SCCM 而言,安装是成功的。用户不会收到任何类型的通知,并且应用程序在软件中心中显示为已安装,即使它不是。我必须查看自己的日志才能获得任何类型的错误报告,SCCM 永远不会自行重试安装。
作为错误处理块的最后一步,如何强制任务序列失败?我希望用户看到错误并致电服务台。我还希望能够在 SCCM 控制台中看到故障,并且我希望 TS 自行重试(旧版本在使用中无法卸载并且我在测试中看到的几乎所有故障都是因为用户在 TS 有机会删除它之前登录并启动它)。
要导致任务序列失败,您可以使用“运行命令行”任务序列步骤来执行返回非零1退出代码的命令。例如:
(当然,您还必须确保未选中任务序列步骤的“出错时继续”复选框。)
事实上,
1
如果你想使用不同的退出代码来反映不同的失败原因,你可以用任何其他数字替换上面的代码。这将允许您确定哪些安装因特定原因而失败。综上所述,任务序列可能不是这个特定用例的最佳机制。考虑使用Powershell App Deployment Toolkit将此软件与应用程序(或包和程序)一起部署。它提供了许多有用的功能,包括关闭应用程序并防止用户在安装完成之前重新启动它们的能力。
1从技术上讲,退出代码必须是任务序列步骤的“选项”选项卡上“成功代码”字段中未列出的数字之一,默认情况下为
0
和3010
。