मैं PowerShell में किसी फ़ंक्शन में एकाधिक पैरामीटर कैसे पास करूं?



Answers

सही उत्तर पहले से ही प्रदान किया जा चुका है लेकिन यह समस्या subtleties को समझने के इच्छुक लोगों के लिए कुछ अतिरिक्त विवरण वारंट करने के लिए पर्याप्त प्रचलित लगता है। मैंने इसे एक टिप्पणी के रूप में जोड़ा होगा लेकिन मैं एक उदाहरण शामिल करना चाहता था - मैंने PowerShell फ़ंक्शंस पर अपने त्वरित संदर्भ चार्ट को बंद कर दिया। यह मानता है कि फंक्शन एफ का हस्ताक्षर f($a, $b, $c) :

इस प्रकार, कोई स्पेस से अलग स्थितित्मक पैरामीटर या ऑर्डर-स्वतंत्र नामित पैरामीटर के साथ फ़ंक्शन को कॉल कर सकता है। अन्य नुकसान बताते हैं कि आपको अल्पविराम, कोष्ठक और सफेद स्थान के बारे में जानने की आवश्यकता है।

आगे पढ़ने के लिए मेरे लेख डाउन द खरगोश होल देखें: पावरशेल पाइपलाइन, फंक्शंस और पैरामीटर में एक अध्ययन सरल-Talk.com पर प्रकाशित हुआ। लेख में त्वरित संदर्भ / दीवार चार्ट के साथ एक लिंक भी शामिल है।

Question

यदि मेरे पास एक ऐसा फ़ंक्शन है जो एक से अधिक स्ट्रिंग पैरामीटर स्वीकार करता है, तो पहला पैरामीटर इसे आवंटित सभी डेटा प्राप्त करता है, और शेष पैरामीटर खाली के रूप में पास किए जाते हैं।

एक त्वरित परीक्षण स्क्रिप्ट:

Function Test([string]$arg1, [string]$arg2)
{
    Write-Host "`$arg1 value: $arg1"
    Write-Host "`$arg2 value: $arg2"
}

Test("ABC", "DEF")

उत्पन्न उत्पादन है

$arg1 value: ABC DEF
$arg2 value: 

सही आउटपुट होना चाहिए:

$arg1 value: ABC
$arg2 value: DEF

यह कई मशीनों पर v1 और v2 के बीच संगत लगता है, इसलिए जाहिर है, मैं कुछ गलत कर रहा हूं। क्या कोई वास्तव में क्या बता सकता है?




यदि आपको पता नहीं है (या परवाह है) आप समारोह में कितने तर्क पारित करेंगे, तो आप एक बहुत ही सरल दृष्टिकोण का उपयोग भी कर सकते हैं;

संहिता :

function FunctionName()
{
    Write-Host $args
}

वह सभी तर्कों को मुद्रित करेगा। उदाहरण के लिए:

FunctionName a b c 1 2 3

उत्पादन

a b c 1 2 3

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

यहां एक और असली दुनिया का उदाहरण है (ट्रैक्रर्ट कमांड में एक फ़ंक्शन बनाना, जिसे मैं संक्षिप्त नाम याद रखने से नफरत करता हूं);

संहिता :

Function traceroute
{
    Start-Process -FilePath "$env:systemroot\system32\tracert.exe" -ArgumentList $args -NoNewWindow
}






यदि आप सी # / जावा / सी ++ / रूबी / पायथन / पिक-ए-लैंग्वेज-से-सेंचुरी डेवलपर हैं और आप अपने काम को अल्पविराम से कॉल करना चाहते हैं, क्योंकि यही वह है जो आपने हमेशा किया है, तो आपको कुछ चाहिए इस तरह:

$myModule = new-module -ascustomobject { 
    function test($arg1, $arg2) { 
        echo "arg1 = $arg1, and arg2 = $arg2"
    }
}

अब कॉल करें:

$myModule.test("ABC", "DEF")

और आप देखेंगे

arg1 = ABC, and arg2 = DEF



मुझे नहीं पता कि आप फ़ंक्शन के साथ क्या कर रहे हैं, लेकिन 'param' कीवर्ड का उपयोग करने पर एक नज़र डालें। यह फ़ंक्शन में पैरामीटर पास करने के लिए काफी अधिक शक्तिशाली है, और इसे अधिक उपयोगकर्ता के अनुकूल बनाता है। इसके बारे में माइक्रोसॉफ्ट से इसके बारे में एक जटिल जटिल लेख का लिंक है। यह उतना जटिल नहीं है जितना लेख इसे ध्वनि बनाता है। परम उपयोग

इसके अलावा, यहां इस साइट पर thread से एक उदाहरण दिया गया है:

इसकी जांच - पड़ताल करें।




Function Test([string]$arg1, [string]$arg2)
{
    Write-Host "`$arg1 value: $arg1"
    Write-Host "`$arg2 value: $arg2"
}

Test "ABC" "DEF"



आप इस तरह के फ़ंक्शन में पैरामीटर पास कर सकते हैं।

function FunctionName()
{
    Param ([string]$ParamName);
    #Operations
}



Related



Tags

powershell