正确的 RunSynchronousCommand 退出代码会导致自动无人值守安装失败吗?

正确的 RunSynchronousCommand 退出代码会导致自动无人值守安装失败吗?

我正在使用 autounattend.xml 文件执行 Windows Server 2022 的无人值守安装。

在此specialize阶段,我有几个想要运行的 Powershell 脚本(在RunSynchronousCommand元素中定义)。

我需要确保如果其中一个脚本发生故障,整个安装过程会立即中断。我原本以为未捕获的异常会造成这种情况,但令我惊讶的是,事实并非如此。它只是执行下一步。

如何确保我的自定义脚本失败时 Windows 安装中断?我是否应该使用某种特殊代码退出?

答案1

重启如果你使用OnRequest并且返回代码不是0-2命令失败。必须返回错误并终止安装。“。

显然,这适用于“ specialize”和“ auditUser”。如果定义和配置正确,这将终止安装,正如它所说的此选项所做的那样。

WillReboot如果的值为OnRequest,则同步命令必须返回下列代码之一。

  • 返回代码: 0
  • 描述:命令成功。无需重新启动。

  • 返回代码: 1
  • 描述:命令成功。需要立即重新启动。然后才能启动下一个命令。

  • 返回代码: 2
  • 描述:该命令仍在执行中。需要立即重新启动。然后必须重新启动同一命令。此代码可以多次返回。

  • 返回代码: <anything else>
  • 描述:命令失败。必须返回错误并终止安装。

来源

其他有用的细节

我还要补充一点,Path元素中调用 的命令powershell.exe scriptfile.ps1最终可能会从脚本文件中抽象出退出代码。 在我的例子中,即使脚本以 Exit 结尾10,结束%errorlevel%值仍然是1,如“Powershell 没有以0”退出。 为了解决这个问题,我将命令修改为 'powershell -command "& ./scriptfile.ps1;exit $LASTEXITCODE;"'。 – Crono

例外

此外,对于未处理的异常捕获(或触发异常),我发现试着抓{}大多数时候都很有用。例如,$e=try{<logic>}Catch{$False}; If(!$e){$FreakOut=$True}或者一些类似的变化,以帮助触发一个,否则由执行过程触发。

如果所有其他方法都失败了,并且您需要捕获在运行时看不到输出的所有内容,请合并开始转录并在执行运行故障排除后检查其日志。

支持资源

相关内容