PSCustomObject
是否知道其属性的添加顺序?
# Order of properties
$o21 = New-Object PSCustomObject |
Add-Member NoteProperty a2 2 -passThru |
Add-Member NoteProperty a1 1 -passThru
$o21 | fl
a2 : 2
a1 : 1
$o12 = New-Object PSCustomObject |
Add-Member NoteProperty a1 1 -passThru |
Add-Member NoteProperty a2 2 -passThru
$o12 | fl
a1 : 1
a2 : 2
我想读这个订单。怎么样?
答案 0 :(得分:5)
要在PowerShell中获取对象属性的有序列表,您可以通过隐藏的Properties
memberset属性访问psobject
个集合:
PS C:\> $o12.psobject.Properties
MemberType : NoteProperty
IsSettable : True
IsGettable : True
Value : 1
TypeNameOfValue : System.Int32
Name : a1
IsInstance : True
MemberType : NoteProperty
IsSettable : True
IsGettable : True
Value : 2
TypeNameOfValue : System.Int32
Name : a2
IsInstance : True
如果您只想使用Name
的有序属性名列表,请展开Select-Object
属性:
$PropertyNames = $o12.psobject.Properties |Select-Object -ExpandProperty Name
或使用属性枚举(PowerShell 3.0 +):
$PropertyNames = $o12.psobject.Properties.Name
答案 1 :(得分:0)
扩展Mathias的答案;如果您想获取对象数组的属性列表,则需要根据数组中对象的不同程度执行以下操作之一:
数组中的所有对象共享相同的属性: 此示例仅拉取数组的第一个对象并获取其属性名称
$PropertyNames = $o12[0].PSObject.Properties | Select-Object -ExpandProperty Name
数组中的对象不共享属性:
$PropertyNames = $o12 | ForEach-Object { $_.PSObject.Properties | Select-Object -ExpandProperty Name}
在这两个例子中,重点是属性枚举将发生在顶层。如果您的顶级是一个对象数组而不是PSCustomObject
/ PSObject
,那么您将返回数组属性而不是数组中对象/对象的属性:
PS> $obj.PSObject.Properties.Name
Count
Length
LongLength
Rank
SyncRoot
IsReadOnly
IsFixedSize
IsSynchronized
PS> $obj[0].PSObject.Properties.Name
Name
SamAccountName