2014-11-28 2 views
6

मैं निम्नलिखित है:गतिशील रूप PSCustomObject संपत्ति हो और महत्व देता

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

जो प्रिंट:

Age= 
First= 
Last= 
Middle= 

मैं प्रत्येक संपत्ति से मान प्राप्त करने की तरह है और यह के रूप में शामिल होता है मेरे नाम मूल्य जोड़े के लिए मूल्य ऐसा लगता है:

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

मैं एक स्ट्रिंग बनाने की कोशिश कर रहा हूं और समय से पहले संपत्ति के नामों को नहीं जानता हूं। मैं अपना नाम मूल्य जोड़ों को पूरा करने के लिए मूल्यों को कैसे खींचूं?

उत्तर

7

एक ही रास्ता मैं मिल सकता है (अभी तक) की तरह कुछ करने के लिए है:

$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 
} 

कुंजी -ExpandProperty

उपयोग कर रहा है किसी को भी इस पोस्ट करें करने का एक और अधिक संक्षिप्त तरीका है!

+2

थोड़ा सा सुधार मूल्य लुकअप: '$ prop.Name +" = "+ $ test। ($ prop.Name)' – scobi

+0

@ स्कॉबी आईरॉन कि मुझे इस 2 साल के पुराने थ्रेड की आवश्यकता है उसी दिन आपने इसे पोस्ट किया! आपका रास्ता बहुत संक्षिप्त है और सवाल का एक अच्छा जवाब है। मैं इसे एक जवाब में ले जाऊंगा! –

+0

ठीक है, यकीन है, क्यों नहीं :) – scobi

4

छोटे, अधिक poshy विकल्प:

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

सुनिश्चित नहीं हैं कि अगर यह वास्तव में बेहतर है, लेकिन यहाँ एक और संस्करण है:

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

यह 'ऑब्जेक्ट' विधियों को 'ToString()' और 'GetHashCode()' भी चुनता है, जो आप जो चाहते हैं वह नहीं हो सकता है। उदाहरण के लिए, यदि मैं 'कन्वर्टफ्रॉम-जेसन' के साथ बनाई गई किसी ऑब्जेक्ट की गुणों का आकलन कर रहा हूं, तो मैं * केवल * उन प्रश्नों को चाहता हूं जो मुझे 'गेट-सदस्य-टाइप नोटप्रॉपर्टी' से प्राप्त होते हैं। – Arnavion

0

मेरे संस्करण: करने के लिए

$memberNames=($test |Get-Member -Type NoteProperty).Name 
foreach ($mname in $memberNames) { 
    "{0}={1}" -f $mname,$Test."$mname" 
} 
संबंधित मुद्दे