2011-12-15 14 views
9

पावरहेल कमांडलेट स्विच पैरामीटर के साथ क्या सौदा है जिसके लिए कोलन की आवश्यकता होती है?पावरहेल: कमांडलेट पैरामीटर में कॉलन

पर विचार करें Exchange 2010 प्रबंधन शैल cmdlet Move-ActiveMailboxDatabase। पुष्टि स्विच एक System.Management.Automation.SwitchParameter है और इसलिए की तरह इस्तेमाल किया जाना चाहिए,

Move-ActiveMailboxDatabase -Confirm:$false 

पेट के बिना आदेश पहचान करने के लिए तो जैसे स्विच पुष्टि नहीं करते विफल रहता है,

Move-ActiveMailboxDatabase -Confirm $false 

कि क्यों है? कोलन वहां क्या अंतर है? क्यों Exchange2010 एकमात्र चीज के बारे में प्रतीत होता है जिसे मैंने इस व्यवहार को देखा है?

मैं एक्शन और PowerShell 2.0 में Powershell के माध्यम से ब्राउज़ कर चुके हैं, लेकिन इस वाक्य रचना के बारे में कुछ भी नहीं मिला। स्कोप रिज़ॉल्यूशन और .Net ऑब्जेक्ट एक्सेस उपयोग उन पुस्तकों पर दस्तावेज किए गए हैं।

मेरा गूगल फू एक article जो दावा है कि यह स्पष्ट रूप से आगे पैरामीटर मान स्विच, लेकिन क्या है कि के बारे में है समझाने के लिए विफल रहता है पाया।

उत्तर

19

जब आप ऐसा करेंगे:

Move-ActiveMailboxDatabase -Confirm $false 

आप नहीं कह रहे हैं Confirm पैरामीटर $false स्वीकार करता है। आप -Confirm कह रहे हैं और cmdlet को $false के साथ एक (अलग) तर्क भी गुजर रहा है।

चूंकि Confirm एक स्विच है, केवल -Confirm की उपस्थिति का अर्थ यह सच है। -Confirm की अनुपस्थिति का अर्थ है कि यह झूठा है।

मुझे आप एक स्क्रिप्ट उदाहरण देता हूँ:

param([switch]$test) 

write-host Test is $test 

आप बस किसी भी तर्क के बिना स्क्रिप्ट चलाते हैं/पैरामीटर यानी .\script.ps1 आपको मिल उत्पादन:

Test is False 

आप .\script.ps1 -test के रूप में चलाते हैं, आउटपुट

Test is True 

यदि आप इसेके रूप में चलाते हैं, उत्पादन

Test is True 

है आप .\script.ps1 -test:$false के रूप में चलाते उत्पादन

Test is False 

यह परिदृश्यों जहां एक स्विच चर खुद के लिए मूल्य एक और चर से निर्धारित किया जाना है में है अगर वह : प्रयोग किया जाता है।

उदाहरण के लिए, स्क्रिप्ट पर विचार करें: यदि आप .\script.ps1 -in $false के रूप में चलाते

param ([boolean]$in) 

function func([switch] $test){ 
write-host Test is $test 
} 

func -test:$in 

यहाँ, आप

Test is false 

मिलता है आप : उपयोग करने में सक्षम नहीं थे, तो आप पड़ता था इसे लिखने के लिए:

if($in){ func -test} 
else { func } 
+0

पूरा उत्तर नहीं - मुझे मेलबॉक्स उदाहरण के बारे में पता नहीं है, लेकिन कई अन्य मामलों में (उदा। 'सेट-एसएमबी सर्वर कॉन्फ़िगरेशन'),' कॉन्फर्म: $ false' का प्रभाव इसकी अनुपस्थिति से अलग है। मैं '-कॉन्फर्म: $ false' या '-फोर्स' का उपयोग कर सकता हूं, अन्यथा मुझे पुष्टि करने की आवश्यकता है। – Lamarth

4

कोलन हर उपनाम के साथ उपयोग किया जा सकता है टेर वैल्यू लेकिन स्विच पैरामीटर के मामले में अधिक विशेष है। स्विच पैरामीटर मान नहीं लेते हैं, वे या तो मौजूद हैं ($ true) या अनुपस्थित ($ false)।

कल्पना कीजिए कि आप इस तरह एक समारोह है:

function test-switch ([string]$name,[switch]$force) { ... } 

और आप इसे इतना पसंद किया फोन:

test-switch -force $false 

के बाद से स्विच मानकों या तो वर्तमान या नहीं कर रहे हैं, झूठी $ वास्तव में नाम करने के लिए बाध्य होगा पैरामीटर। तो, आप एक स्विच पैरामीटर के लिए मूल्य कैसे बांधते हैं? कोलन के साथ:

test-switch -force:$false 

अब पैरामीटर बाइंडर जानता है कि मूल्य किस पैरामीटर पर जाता है।