PowerShell特定条件下调用GetType()方法未向终端返回输出问题
原因说明
这是PowerShell默认的输出格式化机制导致的:
当脚本连续输出多个不同类型的对象时,PowerShell会优先匹配第一个输出对象的类型对应的格式化规则,来处理后续所有输出内容。如果后续输出的对象类型和首个对象的类型不兼容,格式化器就会跳过渲染这部分内容,不会在终端展示。
你提供的脚本里,第一个输出的$ArrayList展开后所有元素都是[PSCustomObject]类型,PowerShell为这类对象匹配了表格输出格式,表格的列定义完全基于[PSCustomObject]的Username、Path、Type三个属性。后续$Transformed.getType()返回的是[System.RuntimeType]类型的对象,没有匹配上述表格的属性,所以被格式化器过滤,没有输出到终端。
当你注释掉$ArrayList行后,脚本首个输出的对象就是[System.RuntimeType]类型,PowerShell会匹配该类型对应的格式化规则,所以可以正常输出类型信息。
解决方法
可以通过以下任意一种方式强制显示$Transformed.getType()的结果:
- 追加
Out-Host直接将内容输出到终端,不受全局格式化规则影响:
$Transformed.getType() | Out-Host
- 显式指定输出格式:
# 强制按表格输出 $Transformed.getType() | Format-Table # 或者按列表输出 $Transformed.getType() | Format-List
内容的提问来源于stack exchange,提问作者fmotion1
相关产品推荐
相关产品推荐

