设置ErrorActionPreference为Stop后,Get-Volume未抛出异常的原因
PowerShell脚本未触发预期异常的原因分析
你的脚本中设置了$ErrorActionPreference = "Stop",但执行Get-Volume -FileSystemLabel "doesnotexist"时并未进入指定的catch块,反而输出红色错误信息,核心原因是你捕获的异常类型与实际抛出的不匹配。
具体细节:
- 当
Get-Volume找不到指定卷标时,实际抛出的异常类型是Microsoft.Management.Infrastructure.CimException - 你在
catch中指定的Microsoft.PowerShell.Cmdletization.Cim.CimJobException是异步CIM作业执行失败时才会触发的异常类型,而Get-Volume默认是同步执行,不会抛出该类型异常
验证与解决方法:
可以临时修改catch块不指定类型,打印实际异常的完整类型:
catch { Write-Host "实际异常类型: $($_.Exception.GetType().FullName)" }
确认类型后,将catch的目标类型修改为真实的异常类型即可,比如:
catch [Microsoft.Management.Infrastructure.CimException] { Write-Host "exception thrown" }
内容的提问来源于stack exchange,提问作者javanerd
相关产品推荐
相关产品推荐

