![如何故意导致 SCCM 任务序列失败?](https://linux22.com/image/699308/%E5%A6%82%E4%BD%95%E6%95%85%E6%84%8F%E5%AF%BC%E8%87%B4%20SCCM%20%E4%BB%BB%E5%8A%A1%E5%BA%8F%E5%88%97%E5%A4%B1%E8%B4%A5%EF%BC%9F.png)
我正在使用 SCCM 1607(又名 SCCM 2016)中的任务序列安装一个相当复杂的软件。在任务序列中,我有一个 try/catch 块,这样如果 TS 失败,我可以将计算机恢复到工作状态。
就像这样:
这里的问题是,当任务序列中出现实际故障时,错误处理例程会执行其工作,任务序列会正常退出。我正在捕获序列中的自己的日志以反映错误,但就 SCCM 而言,安装成功。用户没有收到任何类型的通知,并且应用程序在软件中心中显示为已安装,即使它没有安装。我必须查看自己的日志才能获得有关错误的任何类型的报告,并且 SCCM 永远不会自行重试安装。
我如何才能强制任务序列失败作为错误处理块的最后一步?我希望用户看到错误并致电帮助台。我还希望能够在 SCCM 控制台中看到失败,并且我希望 TS 自行重试(如果正在使用旧版本,则无法卸载,而且我在测试中看到的几乎所有失败都是因为用户在 TS 有机会删除它之前登录并启动了它)。
答案1
要使任务序列失败,您可以使用“运行命令行”任务序列步骤来执行返回非零1退出代码的命令。例如:
cmd /c exit 1
(当然,您还必须确保任务序列步骤的“出现错误时继续”复选框未被选中。)
事实上,1
如果您想使用不同的退出代码来反映不同的失败原因,您可以将上面的数字替换为任何其他数字。这将允许您识别哪些安装因特定原因而失败。
尽管如此,任务序列可能不是此特定用例的最佳机制。考虑使用以下方式将此软件与应用程序(或包和程序)一起部署Powershell 应用程序部署工具包。它提供了许多有用的功能,包括关闭应用程序并阻止用户在安装完成之前重新启动它们的能力。
1从技术上讲,退出代码必须是任务序列步骤的“选项”选项卡上的“成功代码”字段中未列出的数字之一,默认情况下为0
和3010
。