2016-06-07 62 views
6

我有这个PSObject(从XML):PowerShell的 - 遍历PSObject性能

bool : {IsActive, ShowOnB2C, ShowOnB2B, IsWebNews} 
str : {id, ProductId, GroupName, Unit...} 
int : {ProductIdNumeric, Prices_SalesOne, Prices_Treater, Prices_B2C...} 
arr : {EnvironmentBrands, Catalogs, NavisionLevels} 
long : long 

我想遍历属性,而无需使用属性的名称,例如bool

我曾尝试索引到这样的对象:

$document[0] 

但是,这并没有给我什么,但它也不会导致任何错误。

Select-Object种类的作品,但后来我必须使用属性名称,我不希望这样。

$documents | Select-Object bool,str 

ForEach不重复的属性

$documents | ForEach { 
    $_.name 
} 

回报文档,这就是标签(XML)持有的bool,整数和字符串名称。

+0

您可能会看看'Get-Member' cmdlet。 – stej

+0

谢谢你对你的问题有一个好的标题。 –

回答

9

这是可能的使用隐藏属性PSObject

$documents.PSObject.Properties | ForEach-Object { 
    $_.Name 
    $_.Value 
} 
+0

$ documents.PSObject.Properties | ForEach对象迭代原始对象,但$ documents是原始XML对象'$ documents = $ responseContent.ChildNodes.result.doc'的子集 – user1359448

2

stej mentioned,有一个Get-Member cmdlet和一个-MemberType参数,你可以使用:

$documents | Get-Member -MemberType Property | ForEach-Object { 
    $_.Name 
} 
0

我喜欢这种方法

foreach($property in $obj.PsObject.Properties) 
{ 
     Write-Host "Name=$($property.Name)" 
     Write-Host "Val=$($property.Value)" 
} 
0

get-member也可能需要noteproperty。

$documents | Get-Member -MemberType Property,NoteProperty | ForEach-Object { 
    $_.Name 
}