2013-01-18 13 views
68

पावरशेल में, आप अपना नाम (एक स्ट्रिंग) निर्दिष्ट करके ऑब्जेक्ट की संपत्ति मान कैसे प्राप्त करते हैं?PowerShell में संपत्ति के नाम से ऑब्जेक्ट की संपत्ति का मूल्य कैसे प्राप्त करें?

$obj = get-something 

# View the object's members: 
$obj | gm 

# I could retrieve a property by doing so: 
write-host $obj.SomeProp 

# But for many purposes, I would really want to: 
write-host $obj | Get-PropertyByName "SomeProp" 

वहाँ कुछ इसी तरह है "रातों-PropertyByName" करने के लिए PowerShell में: मैं निम्नलिखित की तरह कुछ करना चाहते हैं?

उत्तर

110

ज़रूर

write-host ($obj | Select -ExpandProperty "SomeProp") 

या उस बात के लिए:

$obj."SomeProp" 
+7

विस्तार याद रखें: 'यदि आप मूल्य चाहते हैं तो' select -expand "कुछप्रॉप" 'चुनें। 'कुछप्रॉप "का चयन करें" कुछप्रॉप "संपत्ति के साथ एक कस्टमोबजेक्ट देता है, और उसके बाद वह चरण 1 पर बहुत अधिक वापस आ गया है। –

+2

क्या' $ obj। 'का उपयोग करने का कोई तरीका है' 'लिखने-होस्ट' में कुछप्रॉप"? –

+0

@TheMuffinMan, हाँ, यह एक आम तौर पर लागू विशेषता है, जैसे लिखने-होस्ट $ obj। "$ Somepropertyname" –

24

@aquinas पर विस्तार करना:

Get-something | select -ExpandProperty PropertyName 

या

Get-something | select -expand PropertyName 

या

Get-something | select -exp PropertyName 

मैं उन लोगों के लिए इन सुझावों है कि बस में कुछ ऐसी जानकारी प्राप्त करने के लिए एक एकल लाइन आदेश की तलाश में हो सकता है बना दिया है और एक वास्तविक दुनिया उदाहरण शामिल करना चाहता था।

PowerShell के माध्यम से Office 365 के प्रबंधन में, यहाँ एक उदाहरण मैं उपयोगकर्ता/समूह है कि "BookInPolicy" सूची में जोड़ा गया था के सभी प्राप्त करने के लिए इस्तेमाल किया गया था:

Get-CalendarProcessing [email protected] | Select -expand BookInPolicy 

बस का उपयोग कर "BookInPolicy चुनें" था कई सदस्यों को काट रहा है, इसलिए इस जानकारी के लिए धन्यवाद!

2

इस प्रयास करें:

$obj = @{ 
    SomeProp = "Hello" 
} 

Write-Host "Property Value is $($obj."SomeProp")" 
+0

स्टैक ओवरव्लो में आपका स्वागत है, कृपया अपना प्रश्न संपादित करें और समझाएं * क्यों * उसे यह कोशिश करनी चाहिए और * क्यों * यह पहले से ही सुधारता है मौजूदा उत्तर –

8

आप Select-Object cmdlet का उपयोग और संपत्ति नाम (रों) है कि आप में रुचि रखते हैं को निर्दिष्ट नाम से एक संपत्ति प्राप्त कर सकते हैं ध्यान दें कि यह बस वापस नहीं करता है। उस संपत्ति के लिए कच्चे मूल्य; इसके बजाय आपको ऐसा कुछ मिलता है जो अभी भी किसी ऑब्जेक्ट की तरह व्यवहार करता है।

[PS]> $property.Name 
armsvc 

[PS]> $property -eq "armsvc" 
False 

[PS]> $property.Name -eq "armsvc" 
True 

[PS]> $property.Name.GetType().FullName 
System.String 

अन्य उत्तर के अनुसार:

[PS]> $property = (Get-Process)[0] | Select-Object -Property Name 

[PS]> $property 

Name 
---- 
armsvc 

[PS]> $property.GetType().FullName 
System.Management.Automation.PSCustomObject 

आदेश है कि संपत्ति के लिए मूल्य उपयोग करने के लिए, आप अभी भी पहचान करने के लिए जो संपत्ति आप के बाद कर रहे हैं, भले ही वहाँ केवल एक ही संपत्ति है की आवश्यकता होगी यहां, यदि आप किसी स्ट्रिंग के भीतर एक ही प्रॉपर्टी का उपयोग करना चाहते हैं, तो आपको स्ट्रिंग में डालने वाले चर के रूप में गतिशील रूप से अभिव्यक्ति घोषित करने के लिए अभिव्यक्ति का मूल्यांकन करना होगा (इसके चारों ओर ब्रैकेट रखें) और डॉलर के चिह्न ($) के साथ उपसर्ग करें:

[PS]> "The first process in the list is: $($property.Name)" 
The first process in the list is: armsvc 

काफी सही ढंग से, अन्य ने Select-Object cmdlet के लिए -ExpandProperty पैरामीटर की सिफारिश करके इस प्रश्न का उत्तर दिया है। यह निर्दिष्ट संपत्ति के मूल्य को वापस कर सिरदर्द को छोड़ देता है, लेकिन आप विभिन्न परिदृश्यों में विभिन्न दृष्टिकोणों का उपयोग करना चाहेंगे।

-ExpandProperty <String>

चयन करने के लिए एक संपत्ति निर्दिष्ट करता है, और पता चलता है कि एक प्रयास कि संपत्ति

https://technet.microsoft.com/en-us/library/hh849895.aspx

[PS]> (Get-Process)[0] | Select-Object -ExpandProperty Name 
armsvc 

विस्तार करने के लिए किया जाना चाहिए
0
$com1 = new-object PSobject               #Task1 
$com2 = new-object PSobject               #Task1 
$com3 = new-object PSobject               #Task1 



$com1 | add-member noteproperty -name user -value jindpal       #Task2 
$com1 | add-member noteproperty -name code -value IT01        #Task2 
$com1 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version}  #Task3 


$com2 | add-member noteproperty -name user -value singh        #Task2 
$com2 | add-member noteproperty -name code -value IT02        #Task2 
$com2 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version}  #Task3 


$com3 | add-member noteproperty -name user -value dhanoa        #Task2 
$com3 | add-member noteproperty -name code -value IT03        #Task2 
$com3 | add-member scriptmethod ver {[system.Environment]::oSVersion.Version}  #Task3 


$arr += $com1, $com2, $com3               #Task4 


write-host "windows version of computer1 is: "$com1.ver()       #Task3 
write-host "user name of computer1 is: "$com1.user         #Task6 
write-host "code of computer1 is: "$com1,code          #Task5 
write-host "windows version of computer2 is: "$com2.ver()       #Task3 
write-host "user name of computer2 is: "$com2.user         #Task6 
write-host "windows version of computer3 is: "$com3.ver()       #Task3 
write-host "user name of computer3 is: "$com1.user         #Task6 
write-host "code of computer3 is: "$com3,code          #Task5 

read-host 
+0

$ आगमन = @ ("जींद", 12, "सिंह") लिखने-मेजबान $ आगमन [1] -पढ़ने के लिए मेजबान $ आगमन + = "रजा" लिखने-मेजबान $ आगमन [3] -पढ़ने के लिए मेजबान लिखने-मेजबान $ आगमन [$ arr.length-1] -पढ़ने के लिए मेजबान $ आगमन = $ आगमन -ne $ आगमन [1] लिखने-मेजबान $ आगमन -पढ़ने के लिए मेजबान foreach ($ आगमन में $ i) {लिखने-होस्ट $ i} – dhanoa

संबंधित मुद्दे