变量是干什么的
$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。