पॉवरशेल में इस्तेमाल किया जाने वाला गेट टाइप, वैरिएबल के बीच का अंतर


93

चर $aऔर के बीच अंतर क्या है $b?

$a = (Get-Date).DayOfWeek
$b = Get-Date | Select-Object DayOfWeek

मैंने जांचने की कोशिश की

$a.GetType
$b.GetType

MemberType          : Method
OverloadDefinitions : {type GetType()}
TypeNameOfValue     : System.Management.Automation.PSMethod
Value               : type GetType()
Name                : GetType
IsInstance          : True

MemberType          : Method
OverloadDefinitions : {type GetType()}
TypeNameOfValue     : System.Management.Automation.PSMethod
Value               : type GetType()
Name                : GetType
IsInstance          : True

लेकिन कोई फर्क नहीं पड़ता है, हालांकि इन चरों का आउटपुट अलग-अलग दिखता है।

जवाबों:


164

सबसे पहले, आपके पास GetType को कॉल करने के लिए कोष्ठकों की कमी है। आप जो देख रहे हैं, वह [DayOfWeek] पर GetType विधि का वर्णन करने वाला MethodInfo है। GetType को वास्तव में कॉल करने के लिए, आपको यह करना चाहिए:

$a.GetType();
$b.GetType();

आपको देखना चाहिए कि $aयह एक [DayOfWeek] है, और डेटा ऑब्जेक्ट के DayOfWeek संपत्ति पर कब्जा करने के $bलिए Select-Object cmdlet द्वारा निर्मित एक कस्टम ऑब्जेक्ट है। इसलिए, यह एक DayOfWeek संपत्ति के साथ एक वस्तु है:

C:\> $b.DayOfWeek -eq $a
True

20

Select-Object एक नया psobject बनाता है और आपके द्वारा अनुरोधित गुणों को कॉपी करता है। आप इसे GetType () के साथ सत्यापित कर सकते हैं:

PS > $a.GetType().fullname
System.DayOfWeek

PS > $b.GetType().fullname
System.Management.Automation.PSCustomObject

10

चयन-वस्तु केवल निर्दिष्ट गुणों के साथ एक कस्टम PSObject देता है । एक संपत्ति के साथ भी, आपको ACTUAL चर नहीं मिलता है; यह PSObject के अंदर लपेटा गया है।

इसके बजाय, करें:

Get-Date | Select-Object -ExpandProperty DayOfWeek

कि आप के रूप में एक ही परिणाम मिल जाएगा:

(Get-Date).DayOfWeek

अंतर यह है कि यदि Get-Date कई ऑब्जेक्ट्स को लौटाता है, तो पाइपलाइन तरीका पेरेंटल तरीके से बेहतर काम करता है (Get-ChildItem), उदाहरण के लिए, आइटम की एक सरणी है। यह PowerShell v3 में बदल गया (Get-ChildItem).FullPathहै और उम्मीद के मुताबिक काम करता है और सिर्फ पूरे रास्तों की एक सरणी देता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.