2011-03-28 9 views
5

मैं पावरहेल फ़ंक्शंस और इसके मान्य पैरामीटर का अध्ययन कर रहा हूं। हालांकि मैं समझ नहीं पा रहा हूं कि वे वास्तव में उपयोगी हैं या नहीं।सत्यापन पैरामीटर वास्तव में उपयोगी हैं?

मैं एक साधारण उदाहरण बना देता हूं।

function get-choice(
[parameter(Mandatory=$true)][String][ValidateSet('Y','N')]$choice 
) 
{return $choice} 

get-choice k 

इस समारोह मुझे इस त्रुटि देता है:

get-choice : Impossibile convalidare l'argomento sul parametro 'choice'. L'argomento "k" non appartiene al set "Y,N" specificato dall'attributo ValidateSet. Fornire un argomento inclu 
so nel set ed eseguire di nuovo il comando. 
In riga:6 car:11 
+ get-choice <<<< k 
    + CategoryInfo   : InvalidData: (:) [get-choice], ParameterBindingValidationException 
    + FullyQualifiedErrorId : ParameterArgumentValidationError,get-choice 

मैं मूल्यों का कोई मान्य समूह मैं उन्हें अपने कोड के भीतर जांच कर सकते हैं निर्दिष्ट नहीं करते हैं:

function get-choice2(
[parameter(Mandatory=$true)][String]$choice 
) { 
    if($choice -ne 'y' -and $choice -ne 'n') { 
     write-host "you must choose between yes and no" 
     return 
    } 
return $choice 
} 

get-choice2 k 

और मैं एक और दोस्ताना संदेश:

you must choose between yes and no 

सबसे पहले मैं जानना चाहता हूं कि वैधता का उपयोग कर त्रुटि संदेश को कस्टमाइज़ करना संभव है या नहीं। तब मुझे उम्मीद है कि कोई समझा सकता है कि मुझे पहले दृष्टिकोण को क्यों पसंद करना होगा। अग्रिम में धन्यवाद।

उत्तर

6

कुछ कारण जिनकी वजह मानक सत्यापन का उपयोग करें:

  • कथात्मक कोड; बहुत आसान तो if बयान
  • बहुत कम
  • कस्टम कोड कुछ कीड़े
  • PowerShell का Vx में बाद में हो सकता है कुछ कस्टम हो सकता है (केवल return बयान के साथ 1 लाइन की तुलना में कोड की 4 लाइनों) को पढ़ने के लिए सत्यापन संदेश (बस स्वप्न)
  • ...

चेक Better error messages for PowerShell ValidatePattern (?) - @jaykul द्वारा पोस्ट। आप देखेंगे कि आप त्रुटि संदेश को कैसे अनुकूलित कर सकते हैं। यह थोड़ा सा डेवलपर उन्मुख है, लेकिन इसे पढ़ने लायक है।

+0

मैं यह भी कहूंगा कि ValidateSet से त्रुटि संदेश किसी भी कस्टम से कहीं अधिक अनुकूल है जो आप कर सकते हैं। प्लस ValidateSet कुछ टैब विस्तार क्षमता को जोड़ देगा यदि आपके उपयोगकर्ता PowerTab का उपयोग करते हैं। – JasonMArcher

+0

आपको बहुत अधिक धन्यवाद। आपकी व्याख्या बहुत स्पष्ट हो गई है। मैंने लिंक पढ़ा लेकिन यह मेरे वर्तमान जानकारियों से बाहर है। एक बार फिर धन्यवाद :) –

2

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

आप इतना है कि उपयोगकर्ता के help get-choice2 टाइप कर सकते हैं, अपने कार्य के लिए कुछ मदद प्रलेखन लिख सकते हैं, और क्या उस पैरामीटर का मतलब के लिए एक स्पष्टीकरण देखें: अधिक जानकारी के लिए

function get-choice(
[parameter(Mandatory=$true)][String][ValidateSet('Y','N')]$choice 
) 
{ 
    <# 
    .SYNOPSIS 
    Gets the user's choice. 

    .PARAMETER choice 
    The choice. Must be Y or N. 
    #> 

    return $choice 
} 

भागो help about_comment_based_help, या MSDN documentation देखते हैं।

+0

+1 आपके लिए समर्पित समय के लिए भी धन्यवाद। –

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