2016-06-07 13 views
6

Ho questo PSObject (da XML):PowerShell - iterare su proprietà 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 

vorrei un'iterazione sulle proprietà senza utilizzare i nomi di proprietà, per esempio bool

ho cercato di indice nell'oggetto in questo modo:

$document[0] 

Ma questo non mi dà nulla, ma non causa neanche errori.

Select-Object tipo di opere, ma poi devo usare i nomi delle proprietà, e non lo voglio.

$documents | Select-Object bool,str 

ForEach non iterare le proprietà

$documents | ForEach { 
    $_.name 
} 

rendimenti doc e che è il nome del tag (XML) tenendo le Caccio, interi e stringhe.

+0

Si potrebbe dare un'occhiata al cmdlet 'Get-Member'. – stej

+0

Grazie per avere un buon titolo per la tua domanda. –

risposta

9

Ciò è possibile utilizzando la proprietà nascosto PSObject:

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

$ documents.PSObject.Properties | ForEach-Object itera l'oggetto originale anche se $ documents è un sottoinsieme dell'oggetto XML originale '$ documents = $ responseContent.ChildNodes.result.doc' – user1359448

2

Come stej mentioned, c'è un cmdlet Get-Member con un parametro -MemberType è possibile utilizzare:

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

Io preferisco questo metodo

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

Potrebbe anche aver bisogno di una buona collaborazione con il membro di raccolta.

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