首页/系统/Windows 运维速查/$Error 与异常细节排查
PowerShell 基础66 条

$Error 与异常细节排查

错误排查三件套:$Error[0]、$Error[0].Exception、-ErrorVariable,用于还原命令失败的真正原因。

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

$Error 与异常排查是什么

PowerShell 把每次错误封成一条 ErrorRecord,滚动保存在自动变量 $Error 里,最新一条是 $Error[0]。它比屏幕上闪过的红字信息量大得多:除了消息文本,还带 CategoryInfo、TargetObject、InvocationInfo 与底层 Exception,能回答“哪个命令、对哪个对象、因为什么出错”。命令加 -ErrorVariable 还能把错误沉淀到自定义变量,再配合 -ErrorAction SilentlyContinue 实现“静默执行、事后检查”。

基本信息

适用平台PowerShell 5.1 / 7.x 通用
常用入口$Error[0]、$Error[0].Exception.Message、$Error[0].CategoryInfo
容量默认保留最近 256 条,可用 $MaximumErrorCount 调整
清空方式$Error.Clear()
命令级参数-ErrorVariable ev 把错误存到变量;-ErrorAction 控制是否中断
配套参数$ErrorActionPreference 影响整个会话的默认行为

典型使用场景

  • 交互式排查:命令报错后逐层展开 ErrorRecord 找真正原因
  • 写脚本时把错误收集到变量,最后统一汇总上报
  • 区分“命令失败”与“命令无输出”这两种看起来一样的情况
  • 定位批量操作中具体哪一条执行失败
  • 捕获 InvocationInfo 还原出错时的完整命令与位置

常用示例

常用示例
Get-ChildItem D:\nope                                   # 故意制造一个错误
$Error[0].CategoryInfo                                  # 看错误分类与目标对象
$Error[0].Exception.Message                             # 看底层异常消息
$Error[0].InvocationInfo.PositionMessage                # 看出错时的命令上下文
$Error.Count                                            # 当前累积了多少条错误
Get-Service nosuchsvc -ErrorVariable ev -ErrorAction SilentlyContinue; $ev | Select-Object -First 1   # 静默执行后检查
$Error.Clear()                                          # 复查前先清空,避免误读旧记录

ErrorRecord 关键字段

字段含义排查价值
Exception.Message底层异常消息常常比界面提示更具体
CategoryInfo错误类别与目标对象区分权限、参数、对象不存在
TargetObject出错时操作的输入对象批量场景定位到具体条目
InvocationInfo出错命令与源位置还原脚本哪一行触发
FullyQualifiedErrorId错误标识串搜索官方文档与社区最有效
$Error 是滚动列表,越早查看越准确:继续执行几条命令之后,$Error[0] 就已经不是你要找的那条了,排查前先清空或直接看 Count 变化。
错误被 try/catch 捕获后同样会进 $Error 列表,所以不能用“$Error 里有记录”来判断脚本是否失败;自动化判断要以退出码与 try/catch 的控制流为准。

易错点

  • 隔了很多条命令才回头查 $Error[0],看到的已不是当初那条错误
  • 把 $Error 非空当作脚本失败判据,忽略了被正常捕获处理的错误也留在列表里
  • 只看界面上的红字提示就下结论,没有展开 Exception.Message 与 CategoryInfo,方向容易跑偏
  • 调试时忘记 -ErrorAction SilentlyContinue 与 -ErrorVariable 的组合,脚本被非终止错误的信息淹没

数据来源与参考

  • Microsoft Learn:about_Automatic_Variables
  • Microsoft Learn:about_Error_Records

相关工具

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