不一定。按 Microsoft PowerShell 7.5 的说明,$PSNativeCommandUseErrorActionPreference 默认为 False。仅把 $ErrorActionPreference 设为 Stop,并不会自动把所有外部原生命令的非零退出码变成抛错;只有在 $PSNativeCommandUseErrorActionPreference 为 True 时,原生命令的非零退出码才会按 $ErrorActionPreference 发出错误。并且非零退出码不必然代表失败,是否失败要看该外部工具自己的退出码规则,因此只设 Stop 不能代替对原生退出码的核对。

AI台式电脑工作台示意图
AI台式电脑维护示意图,非真实门店、技师或客户实拍。

适用:对广安区台式电脑的本题场景,适用于广安地区台式电脑上运行的 PowerShell 7.5,针对直接调用原生命令后根据退出码判断结果的场景,重点是 Windows 台式电脑本机会话中的标准行为。该结论不套用到 Windows PowerShell 5.1,也不套用到线程或进程外会话以及不同输入对象类型;这些场景需要另行核对版本、运行方式和输入对象。

观察:先核原执行记录中的PowerShell版本、两个偏好变量当时的值、实际原生命令及退出码。当前读取到的变量不能倒推此前执行时状态;缺少原日志就标为未确认。按该工具的官方退出码说明判断非零码含义,再看原脚本是在退出后何处读取$LASTEXITCODE,以及是否有其他原生命令覆盖它。不要修改偏好后重新运行客户业务命令来试错,也不能只因命令已经返回控制台就记为成功。

风险:风险在于把 Stop 误当成通用失败开关。在默认 False 下可能漏掉需要人工处理的非零退出码;在 True 下又可能把本来表示信息或部分成功的非零码当成硬失败,导致脚本提前终止或后续步骤未执行。对于 robocopy 这类工具,文档明确指出非零码可表示错误以外的信息,并给出在 scriptblock 内临时设 $PSNativeCommandUseErrorActionPreference=$false、再按 $LASTEXITCODE 判断的例子;这说明要结合工具规则,不能把所有非零码一概而论。

下一步:先确认实际环境是 PowerShell 7.5 还是 Windows PowerShell 5.1,记录变量当前值、ErrorActionPreference、调用方式以及是否跨线程或进程。准备可去敏的材料:命令名称和参数结构、退出码、$LASTEXITCODE 的取值、错误文本、脚本片段、工具自身对退出码的说明,隐去账号、路径中的个人信息和业务数据。若仍不确定某个非零码在广安这台台式电脑上应视为失败还是信息,可拨打 400-877-9605 作咨询;该号码只作咨询,实际范围和安排需确认。不要把未核对退出码的脚本直接用于生产。