2011-08-29 11 views
7

में एक स्विच पैरामीटर को अनिवार्य रूप से चिह्नित करने के लिए कैसे करें मुझे यकीन है कि मेरे पास जो कुछ भी खुला है, उसके अलावा मेरे पास कोई अन्य विकल्प नहीं है, लेकिन मैं सामूहिक इंटरनेट मस्तिष्क चुनना चाहता था।पावरहेल

मैं कस्टम कार्यों में बूलियन मानों को पार करते समय [स्विच] पैरामीटर का उपयोग करना पसंद करता हूं। हालांकि, मेरे पास कुछ ऐसे मामले हैं जिनमें मैं स्विच पैरामीटर को अनिवार्य रूप से चिह्नित करना चाहता था। यह वैकल्पिक रूप से पैरामीटर पर [पैरामीटर (अनिवार्य = $ सत्य)] के माध्यम से पूरा किया जा सकता है। हालांकि, मैं वास्तव में यूआई प्रॉम्प्ट को नापसंद करता हूं जो दिखाता है। मैं एक अपवाद फेंकना पसंद करते हैं।

लेकिन, एक स्विच या तो सत्य या गलत हो सकता है, और "IsPresent" संपत्ति कोई भेद नहीं करती है। यदि मैं -example: $ false के रूप में स्विच पैरामीटर पास करता हूं, तो स्विच रिपोर्ट $ उदाहरण है। यह प्रतिनिधित्व गलत है!

मैंने एक [बूल] का उपयोग करने का प्रयास किया है। उदाहरण के लिए:

param 
(
    [bool]$theValue = $(throw('You didn't specify the value!')) 
); 

क्या कोई अन्य चाल है जिसे मैं खींच सकता हूं?

+0

क्यों दो स्विच नहीं? 'उदाहरण' और' exampleOff'। फिर, जब न तो 'IsPresent' एक त्रुटि फेंक देते हैं। – jpaugh

उत्तर

17

एक तरह से switch पैरामीटर हमेशा अनिवार्य है। यदि आप इसे निर्दिष्ट नहीं करते हैं, तो यह गलत का मूल्य प्राप्त करता है। यदि आप इसे निर्दिष्ट करते हैं (-var) यह एक मान सही हो जाता है और यदि आप मान भी निर्दिष्ट करते हैं (-var:$false) यह मान निर्दिष्ट करता है।

मैं वास्तव में ऐसी स्थिति के बारे में सोच नहीं सकता जहां स्विच स्विच करना अनिवार्य है। यदि आप निर्दिष्ट नहीं करते हैं, तो यह गलत है। इतना ही आसान।

मुझे लगता है कि आप क्या चाहते हैं विशेष रूप से परम के मूल्य को सही या गलत होने का उल्लेख करना है? अगर ऐसा है, bool संस्करण है कि आप का उल्लेख है कि मैं क्या, के लिए जाना होगा, हालांकि यह भी switch साथ उसी तरह काम करता है:

param([switch]$a = $(throw "You didn't specify the value")) 

और यह भी $example.IsPresent के बारे में - मुझे पता है यह सहज ज्ञान युक्त/टूटा नहीं है, लेकिन यह स्विच वैरिएबल के मूल्य के समान ही है। यही कारण है कि कैसे Switch Paramater के लिए निर्माता परिभाषित किया गया है और केवल संपत्ति यह है कि IsPresent है:

एक नया SwitchParameter उद्देश्य यह है कि एक बूलियन मान की पहचान है कि क्या स्विच मौजूद है भी शामिल है बनाता है।

http://msdn.microsoft.com/en-us/library/system.management.automation.switchparameter.ctor%28v=vs.85%29.aspx

+0

यदि अपवाद संदेश आपको परेशान कर रहा है, तो यह सबसे अच्छा है जिसे आप प्राप्त करने जा रहे हैं। –

+1

ओह! मैंने गलत तरीके से निष्कर्ष निकाला था कि पैरामीटर सूची में "स्विच" का उपयोग करते समय त्रुटि फेंकना काम नहीं करेगा। मैंने फिर से कोशिश की है, और यह जाने के लिए अच्छा लगता है। Manojlds का जवाब सटीक और बहुत अच्छी तरह से विस्तृत दोनों है। –

+0

-var: $ false मैं जो खोज रहा था वह था। धन्यवाद! –