如何让PowerShell的Get-Member正确识别数组对象类型?
问题分析与解决
为什么$array|Get-Member显示System.String
PowerShell的管道会自动枚举集合/数组,把数组里的每个元素依次传递给后续命令。Get-Member收到每个字符串元素后,会输出它们的类型信息,最终你看到的是合并后的System.String类型(重复类型只会显示一次),而非原数组对象的类型。
为什么get-member $array报错
Get-Member的位置参数需要的是单个输入对象,但直接传数组时,PowerShell同样会枚举数组,把多个字符串元素传给命令,而Get-Member无法处理多个位置参数,因此报错。
正确获取数组对象类型的方法
方法1:使用
-InputObject参数
直接指定输入对象为整个数组,避免枚举:Get-Member -InputObject $array执行后会显示数组对应的类型,比如字符串数组会输出
TypeName: System.String[]。方法2:用逗号包裹数组,阻止枚举
把原数组包装成一个单元素数组,管道传递时只会枚举外层数组的唯一元素(即原数组):,$array | Get-Member方法3:直接调用
GetType()方法
这是最直接获取对象类型的方式,无需借助Get-Member:$array.GetType()输出会直接显示数组的完整类型信息,类似:
IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True String[] System.Array
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

