2014-11-28 8 views
6

Mam następujący:Dynamicznie uzyskać własność PSCustomObject i wartości

$test = [pscustomobject]@{ 
    First="Donald"; 
    Middle="Fauntleroy"; 
    Last="Duck"; 
    Age=80 
} 
$test | Get-Member -MemberType NoteProperty | % {"$($_.Name)="} 

która drukuje:

Age= 
First= 
Last= 
Middle= 

chciałbym wyodrębnić wartość od każdej nieruchomości i mieć to włączone jako wartość dla moich par wartości nazw, aby wyglądała następująco:

Age=80 
First=Donald 
Last=Duck 
Middle=Fauntleroy 

Próbuję zbudować ciąg znaków i nie wiem nazwy właściwości z wyprzedzeniem. Jak mogę pobrać wartości, aby uzupełnić pary wartości nazw?

Odpowiedz

7

Jedynym sposobem udało mi się znaleźć (jak dotąd) jest zrobić coś takiego:

$test = [pscustomobject]@{ 
    First="Donald"; 
    Middle="Fauntleroy"; 
    Last="Duck"; 
    Age=80 
} 

$props=Get-Member -InputObject $test -MemberType NoteProperty 

foreach($prop in $props) { 
    $propValue=$test | Select-Object -ExpandProperty $prop.Name 
    $prop.Name + "=" + $propValue 
} 

Kluczem korzysta -ExpandProperty

Jeśli ktoś ma bardziej zwięzły sposób robi to proszę pisać!

+2

Lekka poprawa na wyszukiwanie wartości: '$ prop.Name +" = "+ $ test. ($ prop.Name)' – scobi

+0

@scobi Ironiczne, że potrzebowałem tego 2-letniego wątku t tego samego dnia opublikowałeś to! Twoja droga jest bardzo zwięzła i jest dobrą odpowiedzią na to pytanie. Chciałbym przenieść to do odpowiedzi! –

+0

ok, na pewno, dlaczego nie :) – scobi

4

Krótsze, bardziej Poshy opcja:

$test | Get-Member -MemberType NoteProperty | % Name | %{ 
    $_ + '=' + $test.$_ 
} 
1

Nie jestem pewien, czy to jest rzeczywiście lepsze, ale tutaj jest jeszcze jeden wariant:

$test.psobject.Members | ? {$_.Membertype -eq "noteproperty"} | 
    %{ $_.Name + '='+ $_.Value } 
+0

To również odbiera metody 'Object' takie jak' ToString() 'i' GetHashCode() ', które mogą nie być tym, czego potrzebujesz. Na przykład, jeśli wyliczam właściwości obiektu utworzonego za pomocą 'ConvertFrom-Json', I * do * chcę tylko właściwości, które otrzymuję z' Get-Member -Type NoteProperty' – Arnavion

0

Mój wariant:

$memberNames=($test |Get-Member -Type NoteProperty).Name 
foreach ($mname in $memberNames) { 
    "{0}={1}" -f $mname,$Test."$mname" 
} 
Powiązane problemy