PowerShell函数默认异常类型判断失效及类型输出异常问题
PowerShell函数默认异常类型参数判断失效及类型显示问题解决
问题根源分析
-is运算符的误用-is的作用是判断对象实例是否属于某一指定类型,但$ExceptionType是[Type]类型的对象(实际运行时类型为System.RuntimeType),并非ItemNotFoundException的实例。因此无论$ExceptionType赋值为何种类型,$ExceptionType -is [System.Management.Automation.ItemNotFoundException]都会返回false。
而$PSItem.Exception -is $waitOnExceptionType能正常工作,是因为$PSItem.Exception是异常对象实例,此时-is用于判断实例是否匹配指定类型,属于该运算符的正确使用场景。类型显示错误的原因
改用-eq后默认值判断生效,但$ExceptionType.GetType().FullName获取的是Type对象自身的类型名称,而非参数所代表的异常类型名称。需要直接访问$ExceptionType本身(或其FullName属性)来获取目标类型的信息。
修正后的代码
function Test { param ( [Type]$ExceptionType = [System.Management.Automation.ItemNotFoundException] ) if ($ExceptionType -eq [System.Management.Automation.ItemNotFoundException]) { Write-Host "Yes" } else { # 直接输出$ExceptionType即可显示目标类型名称 Write-Host "No: $ExceptionType" # 若需要完整类型名,可使用:Write-Host "No: $($ExceptionType.FullName)" } }
验证结果
- 执行
Test时,输出Yes,符合预期。 - 执行
Test -ExceptionType ([System.Management.Automation.PSArgumentOutOfRangeException])时,输出No: System.Management.Automation.PSArgumentOutOfRangeException,正确显示指定的异常类型,后续依赖该类型的操作可正常执行。
内容的提问来源于stack exchange,提问作者Gordon
相关产品推荐
相关产品推荐

