2016-03-22 27 views
-1

Ich habe ein Objekt als Teil eines Kundenimports erstellt. Jetzt hat jedes Kundenobjekt eine dynamische Menge von Eigenschaften, die alle das Präfix "Cust." . Ich muss nur diese Eigenschaften durchlaufen und zuerst den Namen der Eigenschaft und zweitens den Wert erhalten.Überprüfen Sie die Werte eines dynamischen Objekts Eigenschaften

$customerOptions = $Customer | Select-Object -property "Cust.*" 
+0

Was macht der von Ihnen eingegebene Code? Produziert es die richtigen Eigenschaften und Werte? –

+0

Sie müssen zeigen, wie die Objekte in '$ Customer' erstellt werden und wie Sie die Ausgabe verwenden. Die Proben müssen einfach und reproduzierbar sein und das gewünschte Ergebnis sollte klar sein. –

+0

@MikeShepard $ Kunde zeigt korrekt Cust.Option1 = "Ja", Cust.Option2 = "Nein" usw. Ich weiß nur nicht, wie viele Optionen es gibt oder ihre Werte bis zur Laufzeit. – westerdaled

Antwort

0

Sie können die Eigenschaftsnamen jedes individuelle Objekt durch die versteckte psobject Eigenschaft inspizieren:

$Customer[0].psobject.Properties |Where-Object {$_.Name -like 'Cust.*'} |Select Name,Value 

Sie auch diese Technik verwenden, können alle möglichen Eigenschaftsnamen aufzuzählen und diejenigen zu Select-Object

füttern
+0

Danke, ich werde versuchen, dies – westerdaled

0

Da gibt es nicht viele Informationen darüber, was $Customer ist und was Sie verwenden möchten, werde ich raten, dass $Customer ist ein einzelnes Objekt und kein Array. Um die Eigenschaften zu durchlaufen, die mit Cust. beginnen und gleichzeitig sowohl auf den Eigenschaftsnamen als auch auf den Eigenschaftswert zugreifen können, würde ich dies verwenden. Passen Sie es an Ihre Bedürfnisse:

$Customer = [pscustomobject]@{ Name = "Object1"; "Cust.ID" = 1; "Cust.Car" = "Mercedes"} 

$Customer.psobject.Properties | Where-Object { $_.Name -like 'Cust.*' } | ForEach-Object { 
    #Foreach property with a Cust. prefix 
    $PropertyName = $_.Name 
    $PropertyValue = $_.Value 

    Write-Host "$PropertyName = '$PropertyValue'" 
} 

Ausgang:

Cust.ID = '1' 
Cust.Car = 'Mercedes' 

Wenn Sie ein Array ausgeben und Sie bekommen nur ein paar Eigenschaften (die in dem ersten Objekt) wie:

$Customer = @() 
$Customer += [pscustomobject]@{ Name = "Object1"; "Cust.ID" = 1; "Cust.Car" = "Mercedes"} 
$Customer += [pscustomobject]@{ Name = "Object2"; "Cust.ID" = 2; "Cust.Moped" = "Vespa"} 

$Customer | Select-Object -Property "Cust.*" 

Cust.ID Cust.Car 
------- -------- 
     1 Mercedes 
     2   

Dann möchten Sie eine vollständige Liste der cust.* -Eigenschaften erstellen und diese in Ihrer Select-Object -Anweisung verwenden:

$AllCustProperties = $Customer | ForEach-Object { $_.psobject.Properties } | Where-Object { $_.Name -like 'Cust.*' } | Select-Object -ExpandProperty Name -Unique 

$Customer | Select-Object -Property $AllCustProperties 

Cust.ID Cust.Car Cust.Moped 
------- -------- ---------- 
     1 Mercedes   
     2   Vespa  
+0

Wird versuchen dies auch - ich bin froh, dass ich fragte, wie ich eine Weile gebraucht hätte, um dies herauszufinden ;-( – westerdaled

+0

F $ allCustProperties = $ Benutzer | ForEach-Objekt {$ _. PsObject.Properties } | Where-Object {$ _. Name - wie 'CUST. *'}. Wirkt wie ein Charm. Danach untersuche ich jeden $ custProperty.Value und $ custProperty.Name in meiner foreach-Schleife. Ich erkannte, dass ein paar Bugs hatten vor den vorgeschlagenen Codezeilen zu reparieren ;-( – westerdaled

+0

Ich bin nicht sicher, was hier passiert ist. Gab es irgendwo eine Frage in dem Kommentar? Hat die Antwort dein Problem gelöst? :-) –

Verwandte Themen