संपत्ति के नाम से किसी वस्तु की संपत्ति का मूल्य कैसे प्राप्त करें?


132

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"

क्या PowerShell में "Get-PropertyByName" के समान कुछ है?

जवाबों:


198

ज़रूर

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

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

$obj."SomeProp"

12
विस्तार याद रखें: select -expand "SomeProp"यदि आप मूल्य चाहते हैं। select "SomeProp"एक प्रॉपर्टी "SomeProp" के साथ एक कस्टमोबोजेक्ट लौटाता है, और फिर वह चरण 1 पर बहुत पीछे है।
फ्रोडे एफ।

2
वहाँ का उपयोग करने का कोई तरीका है $obj."SomeProp"में write-host?
मफिन मैन

@ द मफिनमैन, हां, यह आम तौर पर लागू फीचर है, जैसे राइट-होस्ट $ obj। "$ somepropertyname"
एलरॉय फ्लिन

4
जब आपकी स्ट्रिंग एक चर में होती है, तो $obj.($propName)भी काम करती है। (कोष्ठकों की आवश्यकता नहीं है, लेकिन यह मेरे बिना उनके लिए वास्तव में अजीब लगता है।)
jpmc26

3
यदि आपके पास $propNameउदाहरण के लिए एक ऑब्जेक्ट में संग्रहीत है, $Headers.PropertyNameतो कोष्ठक की आवश्यकता होती है $obj.($Headers.PropertyName)
जोनास लोमहोल्ड

41

@Aquinas पर विस्तार:

Get-something | select -ExpandProperty PropertyName

या

Get-something | select -expand PropertyName

या

Get-something | select -exp PropertyName

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

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

Get-CalendarProcessing conferenceroom@domain.com | Select -expand BookInPolicy

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


27

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

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

[PS]> $property

Name
----
armsvc

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

उस संपत्ति के मूल्य का उपयोग करने के लिए , आपको अभी भी यह पहचानने की आवश्यकता होगी कि आपके पास कौन सी संपत्ति है, भले ही केवल एक ही संपत्ति हो:

[PS]> $property.Name
armsvc

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

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

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

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

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

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

-ExpandProperty <String>

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

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

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


8

इसे इस्तेमाल करे :

$obj = @{
    SomeProp = "Hello"
}

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

StackOverflow में आपका स्वागत है, कृपया अपने प्रश्न को संपादित करें और बताएं कि उसे यह क्यों करना चाहिए और यह पहले से मौजूद उत्तरों को क्यों सुधारता है।
T3 H40

मैं upvote बनाम डाउनवोट पर विवादित हूं क्योंकि यह उत्तर IMO है जो किसी ऑब्जेक्ट से संपत्ति का स्ट्रिंग नाम रखने के आधार पर सुरक्षित रूप से संपत्ति प्राप्त करने का सबसे सरल तरीका है, लेकिन कोई स्पष्टीकरण भी नहीं देता है।
ट्रॉय पलासिनो

`` `$ obj = @ {Prop =" मान "; }; $ प्रोपनाम = "प्रोप"; राइट-होस्ट "$ प्रोपनाम का मूल्य $ ($ obj।" $ प्रोपनाम ")" $ प्रोपनाम = "नोन्क्सटेन्स्टप्रोप" "है; राइट-होस्ट "$ प्रोपनाम का मूल्य $ ($ obj।" $ प्रोपनाम ")" `` प्रिंट होगा The value of Prop is Value और फिरThe value of NonexistentProp is
ट्रॉय पलासिनो

वाह! मार्कडाउन प्रलेखन टिप्पणियों के लिए मदद में जुड़ा हुआ है, लेकिन उन पर लागू नहीं होता है। वास्तव में बहुत अच्छा
देवों

3

यहां किसी वस्तु के संपत्ति मूल्य को प्राप्त करने का एक वैकल्पिक तरीका है:

write-host $(get-something).SomeProp

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

$ गिरफ्तारी = @ ("जींद", 12, "सिंह") लेखन-मेजबान $ गिरफ्तारी [1] पढ़ने-मेजबान $ गिरफ्तारी = = "रेजा" लेखन-मेजबान $ गिरफ्तारी [3] पठन-मेजबान लेखन-मेजबान $ गिरफ्तार $ arr.length -1] read-host $ arrest = $ arr -ne $ arrest [1] राइट-होस्ट $ arrest रीड-होस्ट फ़ॉरच्यू ($ i in $
arrest
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.