2012-02-07 10 views
13

असाइन नहीं किया गया है, मैं यह देखने के लिए परीक्षण करना चाहता हूं कि एक चर को एक चर निर्दिष्ट किया गया है और यदि कार्रवाई नहीं की जाती है। यह कैसे प्राप्त किया जा सकता है?पावरहेल एक वैरिएबल का परीक्षण कर रहा है जिसे अभी तक

मैंने इसे निम्नलिखित कोड के साथ प्रयास किया है लेकिन त्रुटि प्राप्त करें: '-is' का दायां ऑपरेंड एक प्रकार होना चाहिए।

$ प्रोग्राम नाम इस बिंदु पर असाइन नहीं किया गया है।

If ($ProgramName -isnot $null) { 
    $ProgramName = $ProgramName + ', ' + $cncPrograms 
} 
Else { 
    If ($cncPrograms -isnot $null) { 
    $ProgramName = $cncPrograms 
    } 
} 

उत्तर

31

किसी भी असाइन किए गए चर के पास नल का मूल्य होगा, न कि डेटा प्रकार का शून्य। तो, सिर्फ इस कार्य करें:

If ($ProgramName -ne $null) 

... कि TRUE वापस आ जाएगी, तो यह एक गैर शून्य मान करने के लिए आवंटित किया गया है।

:

एक और भी आसान बनाने के लिए चेक

IF($ProgramName) 

ताकि आप इस्तेमाल कर सकते हैं

IF(!$ProgramName) 

संपादित हालांकि तर्क उलट है कौन सा है कि अगर $null है या नहीं की जाँच करेगा, यह है,

रफिन टिप्पणियों में सख्त मोड के बारे में एक अच्छा बिंदु उठाता है। यह विधि भी काम करेगी:

Test-Path variable:ProgramName या Test-Path variable:global:ProgramName उदाहरण के लिए, यह स्पष्ट रूप से वैश्विक स्कॉप्ड है। परिवर्तनीय मौजूद होने पर यह $true या $false वापस आ जाएगा।

+0

धन्यवाद। एंडी अरिस्मिन्दी ने लेख के माध्यम से पढ़ने के बाद मुझे आपकी व्याख्या अधिक उपयोगी पाया। यह अब पूरी समझ में आता है! पोस्ट करने का शुक्रिया। – resolver101

+2

मुझे लगता है * लगता है कि 'सेट-स्ट्रिक्टोड-संस्करण नवीनतम' के साथ काम करता है, सही? सख्त मोड चालू होने पर आप इसकी जांच कैसे कर सकते हैं? ** संपादित करें ** स्पष्ट रूप से ['टेस्ट-पथ चर: वैश्विक: foo '] (http://stackoverflow.com/a/3163008/1028230) – ruffin

+3

@ruffin 'टेस्ट-पथ चर: ProgramName'' true 'या' $ झूठा '। सख्तोड पर अच्छा पकड़ो। मैंने जवाब में कहा। – JNK

7

Test-Path variable:\var आपको जो चाहिए वह करना चाहिए, मुझे लगता है।

+0

हाँ। भी काम करता है जांच करने के लिए कई तरीके हैं। क्या यह एक अच्छी विधि नहीं है? सिर्फ पूछना क्योंकि आपने "मुझे लगता है" के साथ अपनी सजा समाप्त कर दी है। – resolver101

+2

यह वास्तव में सही उत्तर है। ऐसा करने का दूसरा तरीका तकनीकी रूप से हैक है। यह करने का इरादा प्रोग्रामेटिक तरीका है। – ZaxLofful

2

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

http://blogs.msdn.com/b/powershell/archive/2006/12/24/boolean-values-and-operators.aspx

+0

धन्यवाद मैं पढ़ने के बाद और उदाहरण पढ़ने के बाद और अधिक समझ में आता है। – resolver101