首页/系统/Windows 运维速查/错误处理偏好 $ErrorActionPreference
PowerShell 基础66 条

错误处理偏好 $ErrorActionPreference

全局或局部控制错误行为:默认 Continue 继续执行,脚本里常设 Stop 让错误立即中断,避免带病运行。

Windows 运维速查系统更新于 2026-10-13

变量是干什么的

$ErrorActionPreference 决定非终止错误的默认响应方式:默认 Continue 表示报错后继续执行,脚本会带病往下跑;设为 Stop 会把错误升级成可捕获的终止错误,配合 try/catch 才能真正兜住异常。单条命令可用 -ErrorAction 临时覆盖全局设置。

作用范围怎么扩散

偏好变量在被赋值时对当前作用域及其子作用域生效:脚本里设置只影响本次脚本执行,函数内部设置则覆盖该函数的调用链。想临时改变某段逻辑的行为又不想污染调用方,可用 try/finally 在结束时恢复原值,这是写可复用函数时的稳妥做法。

基本信息

适用平台PowerShell 2.0 及以后,7.x 起新增部分取值
语法$ErrorActionPreference = 'Stop';命令 -ErrorAction 逐条覆盖
取值Continue(默认)、Stop、SilentlyContinue、Inquire、Ignore
相关变量$Error 保存错误记录,$LASTEXITCODE 保存外部程序退出码

典型使用场景

  • 关键流程脚本开头设 Stop,任何一步失败立即停止,避免带病继续
  • 批量巡检用 SilentlyContinue 跳过不可达对象,保证整体跑完
  • 用 try/catch 包裹易失败步骤,捕获后写日志并决定是否重试
  • 临时降噪:单条命令加 -ErrorAction 覆盖,不改全局设置
  • 调试阶段设为 Inquire,在每个错误处人工确认

常用示例

常用示例
$ErrorActionPreference = 'Stop'                       # 全局升级为终止错误
try {
  Get-Item D:\nope -ErrorAction Stop                  # 也可逐条指定
} catch {
  Write-Warning "失败原因: $($_.Exception.Message)"   # 捕获后自行决定处置
}
Get-ChildItem D:\nope2 -ErrorAction Continue          # 单条命令降回继续执行

取值读法

取值行为适用场景
Continue显示错误后继续执行(默认)交互调试,让命令跑完
Stop抛出可捕获的终止错误关键流程脚本
SilentlyContinue不显示也不中断批量轮询时跳过不可达对象
Inquire出错时询问如何处理排查阶段逐条确认
Ignore完全忽略错误确知可忽略的探测类命令
Stop 的作用是把非终止错误变成可捕获的终止错误,这是 try/catch 能兜住一切的前提,两者需要配合使用。
Stop 只管 PowerShell 命令的错误机制,外部程序失败不会抛异常:robocopy、fc 这类命令必须另查 $LASTEXITCODE。

易错点

  • 默认 Continue 下脚本报错继续跑,漏检会让结果不完整却看不出异常
  • 只设 Stop 不写 try/catch,脚本直接中断且不留下可读的失败信息
  • 在交互会话里设置全局 Stop 会影响之后所有命令,排查时容易措手不及
  • 以为 Stop 能覆盖外部程序退出码,导致批处理与原生工具失败被漏掉

数据来源与参考

  • Microsoft Learn:about_Preference_Variables

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌