我正在使用 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}
或者一些类似的变化,以帮助触发一个,否则由执行过程触发。
如果所有其他方法都失败了,并且您需要捕获在运行时看不到输出的所有内容,请合并开始转录并在执行运行故障排除后检查其日志。