You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按原始顺序获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:53:12