2011-09-30 10 views
6

क्योंPowerShell के "मापन-ऑब्जेक्ट" cmdlet के लिए "-प्रोपर्टी" पैरामीटर का उपयोग कैसे करें?

$a = GPS AcroRd32 | Measure 
$a.Count 

कार्य, जिसमें

GPS AcroRd32 | Measure -Property Count 

नहीं करता है?

पहला उदाहरण 2 का मान देता है, जो मैं चाहता हूं, एक पूर्णांक।

दूसरे उदाहरण इस देता है:

Measure-Object : Property "Count" cannot be found in any object(s) input. 
At line:1 char:23 
+ GPS AcroRd32 | Measure <<<< -Property Count 
    + CategoryInfo   : InvalidArgument: (:) [Measure-Object], PSArgumentException 
    + FullyQualifiedErrorId : GenericMeasurePropertyNotFound,Microsoft.PowerShell.Commands.MeasureObjectCommand 



This Scripting Guy entry वह जगह है जहाँ मैं कैसे पहले कोड नमूने में "गणना" संपत्ति का उपयोग करने के लिए सीखा है।

दूसरा कोड नमूना वास्तव में भ्रमित है। this Script Center reference, निम्नलिखित बयान काम करता है:

Import-Csv c:\scripts\test.txt | Measure-Object score -ave -max -min 

यह अभी भी भी काम करता है, यदि वह ऐसा तरह फिर से लिखा है:

Import-Csv c:\scripts\test.txt | Measure-Object -ave -max -min -property score 

मैं इस को स्वीकार करने के साथ भी कई समस्या नहीं है जब तक मैं Measure-Object help page पर विचार । -Property <string[]> के लिए पैरामीटर परिभाषा बताती है:

डिफ़ॉल्ट वस्तु की गणना (लंबाई) संपत्ति है।

तो Count डिफ़ॉल्ट, तो Count काम का एक स्पष्ट पास करना चाहिए नहीं है?

GPS AcroRd32 | Measure -Property Count # Fails 

निम्नलिखित मुझे जानकारी नहीं जो मैं की जरूरत है प्रदान करता है सिवाय इसके कि इसे एक पूर्णांक पर कार्रवाई करने के साथ मुझे प्रदान नहीं करता है के रूप में आप देखेंगे:

PS C:\Users\Me> $a = GPS AcroRd32 | Measure 
PS C:\Users\Me> $a 

Count : 2 
Average : 
Sum  : 
Maximum : 
Minimum : 
Property : 

PS C:\Users\Me> $a -is [int] 
False 



तो, डॉट नोटेशन ($a.count) क्यों काम करता है, लेकिन स्पष्ट रूप से लिखित बयान (GPS | Measure -Property Count) क्यों नहीं?

मैं, डॉट संकेतन का उपयोग करने वाला हूँ तो मैं लूंगा, लेकिन मैं जानने के लिए इस अवसर पर करना चाहते हैं तो अधिक के बारे में कैसे और * क्यों PowerShell सिर्फ एक असावधान निर्माण की तुलना में इस तरह से काम करता है, बल्कि पावरशेल के वाक्यविन्यास की समझ। इसे एक और तरीका रखने के लिए, मैं Cargo Cult Programmer/Code Monkey में बदलने से बचना चाहता हूं।

उत्तर

5

एक बात आप जानना चाहते हैं कि PowerShell में आम तौर पर, और cmdlets में खासकर आप वस्तुओं या वस्तुओं के संग्रह में हेरफेर है।

उदाहरण: यदि केवल एक ही 'AcroRd32' Get-Process चलने के दौरान किसी [System.Diagnostics.Process] वापस आ जाएगी, यदि एक से अधिक चल रहे हैं यह [System.Diagnostics.Process] का संग्रह वापस आ जाएगी।

दूसरे मामले में आप लिख सकते हैं:

(GPS AcroRd32).count 

क्योंकि एक संग्रह गिनती संपत्ति है। द्वंद्व वस्तु संग्रह भी cmdlets पैरामीटर समय के सबसे अधिक वस्तुओं या वस्तुओं की सूची (संग्रह ऑपरेटर , के साथ बनाया) का समर्थन करता है में मान्य है।

PS C:\> (gps AcroRd32) -is [object[]] 
True 

बस Get-Member cmdlet का उपयोग:

PS C:\> (gps AcroRd32) | Get-Member 

    TypeName: System.Diagnostics.Process 

Name      MemberType  Definition 
----      ----------  ---------- 
Handles     AliasProperty Handles = Handlecount 
...      ... 

और

PS C:\> Get-Member -InputObject (gps AcroRd32) 

    TypeName: System.Object[] 

Name   MemberType Definition 
----   ---------- ---------- 
Count   AliasProperty Count = Length 
...   ... 
+0

'Get-सदस्य -InputObject (जीपीएस AcroRd32)' - यह मुझे समझने की जहां 'Count' संपत्ति में मदद की से आया। अब मैं क्यों मेरे "पूरा बयान" काम नहीं करता है देख सकते हैं, क्योंकि यह गलत वाक्य रचना थी। मुझे दिखाने के लिए धन्यवाद कि '(जीपीएस एक्रोआरडी 32) का उपयोग कैसे करें। गणना करें! – Stisfa

6

क्योंकि COUNT संपत्ति आउटपुट वस्तु की एक संपत्ति (Measure-Object अर्थात् परिणाम), नहीं इनपुट वस्तु है।

-property पैरामीटर निर्दिष्ट करता है जो संपत्ति इनपुट वस्तुओं की (एँ) का मूल्यांकन किया जाना है। इनमें से कोई नहीं COUNT जब तक आप किसी सरणी या सरणी या कुछ और पार जाते हैं।

4

मुझे लगता है कि क्या आप चाहते हैं कुछ इस तरह है: तुम सिर्फ गिनती आप निम्न कर सकते लिए देख रहे हैं

gps AcroRd32 | measure-object | select -expand Count 
2

:

$a = GPS AcroRd32 
$a.Count = 2 

$a = GPS AcroRd32 सेट एक सरणी के लिए एक $ प्रक्रिया वस्तुओं की। सरणी में एक सदस्य कॉल है, गणना, जो आपको पहले से मौजूद तत्वों की संख्या निर्धारित करने की अनुमति देगी।

Measure-Object कमांडलेट (उपनाम measure के साथ) का उपयोग संपत्ति के औसत, अधिकतम, न्यूनतम और समेकित मूल्यों को मापने के लिए किया जाता है। तो तुम $a | measure -property Handles -sum की तरह कुछ करते हैं और खुले हैंडल की कुल संख्या की गिनती मिल सकता है।

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