如何按原始顺序获取PowerShell PSCustomObject的属性
按原始顺序获取PSCustomObject的属性
这个问题在PowerShell里确实挺常见的——Get-Member默认会对成员名称按ASCII顺序排序,所以会打乱你创建PSCustomObject时定义的属性顺序。不过我们有几个简单的办法可以拿到原始顺序的属性:
方法1:直接访问PSObject.Properties
每个PowerShell对象都有一个隐藏的PSObject属性,它里面的Properties集合会严格保留对象创建时的属性顺序。你可以直接遍历这个集合,或者过滤出NoteProperty类型的成员:
# 获取所有NoteProperty的名称,按原始顺序 $c.PSObject.Properties | Where-Object MemberType -eq NoteProperty | Select-Object -ExpandProperty Name # 或者直接输出属性集合的完整信息,包含名称、值等 $c.PSObject.Properties | Where-Object MemberType -eq NoteProperty
针对你的示例对象$c,运行上面的命令会返回:
name
age
dbo
完全和你定义时的顺序一致。
方法2:用Format-List直接查看顺序
如果你只是想快速确认属性的原始顺序,不需要编程获取,直接用Format-List命令就能展示原始顺序的属性:
$c | Format-List *
输出会是:
name : jeff
age : 40
dbo : 19780101
为什么Get-Member会打乱顺序?
这是Get-Member的默认设计——它会自动对所有成员按名称排序后返回,方便统一查看,但也导致了和对象原始属性顺序不一致的问题。所以要获取原始顺序,就得绕开这个排序逻辑,直接访问对象内部的属性集合。
内容的提问来源于stack exchange,提问作者jyao
相关产品推荐
相关产品推荐

