2012-05-25 12 views
6

क्या कुछ स्थितियों के आधार पर कुछ पैरामीटर अनिवार्य हैं (उदाहरण के लिए: यदि पैरामीटर में से कोई एक अनुपस्थित या गलत है) शक्तिशक्ति समारोह में?सशर्त पावरहेल पैरामीटर

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

मुझे आशा है कि मेरा प्रश्न स्पष्ट है।

उत्तर

9

जैसा कि ईसाई संकेत दिया गया है कि यह पैरामीटरसेट नाम के माध्यम से पूरा किया जा सकता है। इस उदाहरण पर एक नज़र डालें:

function Get-MySPWeb { 
    [CmdletBinding(DefaultParameterSetName="set1")] 
    param (
     [parameter(ParameterSetName="set1")] $RelativeUrl, 
     [parameter(ParameterSetName="set2")] $WebUrl, 
     [parameter(ParameterSetName="set2", Mandatory=$true)] $DisplayName 
    ) 
    Write-Host ("Parameter set in action: " + $PSCmdlet.ParameterSetName) 
    Write-Host ("RelativeUrl: " + $RelativeUrl) 
    Write-Host ("WebUrl: " + $WebUrl) 
    Write-Host ("DisplayName: " + $DisplayName) 

} 

आप -RelativeUrl Foo साथ इसे चलाने अगर यह "SET1" करने के लिए बाध्य होगा। यदि आप इस फ़ंक्शन को बिना पैरामीटर के कहते हैं तो यह "set1" से भी जुड़ जाएगा।

(नोट -जब कोई पैरामीटर में PowerShell v3 (Win8 उपभोक्ता पूर्वावलोकन के साथ) यह "SET1" करने के लिए बाध्य होगा, लेकिन यह जब तक आप परम ब्लॉक करने के लिए [CmdletBinding(DefaultParameterSetName="set1")] जोड़ने PowerShell v2 में बाध्यकारी त्रुटि होगा धन्यवाद प्रदान की जाती हैं। डिफ़ॉल्ट xarameterSetName टिप के लिए @ x0n!)

यदि आप दोनों सेटों से पैरामीटर मान के साथ इसे चलाने का प्रयास करते हैं तो आपको एक त्रुटि मिल जाएगी।

यदि आप इसे -WebUrl Bar के साथ चलाते हैं तो यह आपको DisplayName के पैरामीटर मान के लिए संकेत देगा क्योंकि यह एक अनिवार्य पैरामीटर है।

+0

यह बिल्कुल मुझे चाहिए! धन्यवाद! केवल एक चीज: जब मैं इसे बिना किसी पैराम के चलाता हूं, मुझे एक त्रुटि मिलती है (लेकिन मैं इसे इस तरह से चाहता था)। एक फॉलो-अप प्रश्न: पैरामीटर का उपयोग करते समय इसका उपयोग $ PSCmdlet.ParameterSetName चर के साथ स्विच का उपयोग करना है, है ना? – jumbo

+0

दाएं, '$ PSCmdlet.ParameterSetName' वहां है ताकि आप पैरामीटर बाध्यकारी प्रक्रिया द्वारा मूल्यांकन पैरामीटर सेट के आधार पर उचित कार्रवाई कर सकें। बीटीडब्लू यह दिलचस्प है कि आपको एक त्रुटि मिली, ऐसा लगता है कि यह पीएसवी 2 और पीएसवी 3 के बीच व्यवहार में एक अंतर है। –

+1

इसे v3 की तरह काम करने की चाल डिफ़ॉल्ट पैरामीटर सेट निर्देश का उपयोग करना है। मैंने इसे दिखाने के लिए अपना जवाब संपादित कर लिया है। – x0n

1

आपको Parameters Set naming का उपयोग करने की आवश्यकता है। आप विभिन्न पैरामीटर सेट नाम पर एक्सलूसिव पैरामीटर असाइन कर सकते हैं।

+0

क्या आप मुझे एक छोटा सा उदाहरण दे सकते हैं जो मैंने लिखा है? – jumbo

+0

यहां पढ़ें http://blogs.technet.com/b/heyscriptingguy/archive/2011/06/30/use-parameter-sets-to-simplify-powershell-commands.aspx मैं अब एक उदाहरण लिखने में व्यस्त हूं लेकिन लिंक वास्तव में एक अच्छा स्पष्टीकरण देते हैं। टिप्पणी में –

+1

कोड बुरा लग रहा है ... लेकिन: परम ( [पैरामीटर (ParameterSetName = 'rel', अनिवार्य = $ true)] [स्ट्रिंग] $ RelativeUrl, [पैरामीटर (ParameterSetName = 'वेब', अनिवार्य = $ सच)] [स्ट्रिंग] $ WebUrl, [पैरामीटर (पैरामीटरसेट नाम = 'वेब', अनिवार्य = $ सत्य)] [स्ट्रिंग] $ DisplayName ) अब आपको प्रत्येक परिदृश्य के लिए * सेट * पैरामीटर पैरामीटर करना होगा। पैरामीटर एकाधिक सेट या सभी सेट पर जा सकता है (यदि कोई पैरामीटरसेट नाम निर्दिष्ट नहीं है)। मदद के बारे में अधिक जानकारी_फंक्शन_एडवेंस्ड_Parameters – BartekB