PowerShell中-ErrorAction SilentlyContinue无法填充ErrorVariable问题咨询
问题1:实现SilentlyContinue下不显示错误同时填充ErrorVariable
-ErrorAction SilentlyContinue的原生设计就满足「不向控制台输出错误、同时将错误记录写入指定ErrorVariable」的需求。你测试时出现的变量为空问题,是两个原因叠加导致:
- 多轮循环未清空上一轮的错误变量,导致结果互相干扰
- 未启用追加模式时,后执行的命令会覆盖ErrorVariable的原有值
正确的单条命令写法如下:
# 执行后控制台无错误输出,$ErrorMessage会保存对应的错误记录 Get-Item -Path "C:\tmp\error1" -ErrorAction SilentlyContinue -ErrorVariable ErrorMessage
问题2:向ErrorVariable追加多条错误记录
PowerShell的-ErrorVariable参数原生支持追加模式,只需要在指定变量名时,在名称前添加+前缀,就可以将当前命令的错误追加到已有变量中,而不是覆盖原有内容。
修正后的可运行测试脚本
$ErrorActions = @("Continue", "SilentlyContinue", "Stop") foreach ($ErrorAction in $ErrorActions) { Write-Host -Object $ErrorAction -ForegroundColor "Green" # 每次循环先清空错误变量,避免上一轮结果干扰 $ErrorMessage = $null # 变量名前加+ 启用追加模式 Get-Item -Path "C:\tmp\error1" -ErrorAction $ErrorAction -ErrorVariable +ErrorMessage Get-Item -Path "C:\tmp\error2" -ErrorAction $ErrorAction -ErrorVariable +ErrorMessage Write-Host -Object "ErrorVariable 总记录数:$($ErrorMessage.Count)" -ForegroundColor "Yellow" $ErrorMessage }
运行效果说明
Continue模式:控制台会输出两条错误,$ErrorMessage同时保存两条错误记录SilentlyContinue模式:控制台无任何错误输出,$ErrorMessage仍然会保存两条完整的错误记录Stop模式:第一条命令触发终止性错误后会直接中断执行,第二条命令不会运行,$ErrorMessage只会保存第一条错误记录,如需捕获Stop模式下的所有错误,需要为每条命令单独添加try/catch块处理
内容的提问来源于stack exchange,提问作者Akaizoku
相关产品推荐
相关产品推荐

