PowerShell
PowerShell में व्यवहार वापस करें
खोज…
परिचय
इसका उपयोग वर्तमान क्षेत्र से बाहर निकलने के लिए किया जा सकता है, जो एक फ़ंक्शन, स्क्रिप्ट या स्क्रिप्ट ब्लॉक हो सकता है। PowerShell में, प्रत्येक कथन के परिणाम को आउटपुट के रूप में लौटाया जाता है, यहां तक कि एक स्पष्ट रिटर्न कीवर्ड के बिना या यह इंगित करने के लिए कि गुंजाइश का अंत तक पहुंच गया है।
टिप्पणियों
आप TechNet पर about_Return पेज पर वापसी शब्दार्थ के बारे में या पॉवरशेल प्रॉम्प्ट से गेट get-help return
करके पढ़ सकते हैं।
अधिक उदाहरण / स्पष्टीकरण के साथ उल्लेखनीय प्रश्नोत्तर प्रश्न
MSDN पर about_return इसे पूरी तरह से समझाता है:
रिटर्न कीवर्ड एक फ़ंक्शन, स्क्रिप्ट या स्क्रिप्ट ब्लॉक से बाहर निकलता है। इसका उपयोग किसी विशिष्ट बिंदु पर एक स्कोप से बाहर निकलने के लिए, किसी मान को वापस करने के लिए, या यह इंगित करने के लिए किया जा सकता है कि स्कोप के अंत तक पहुँच गया है।
वे उपयोगकर्ता जो C या C # जैसी भाषाओं से परिचित हैं, वे गुंजाइश छोड़ने के तर्क को स्पष्ट करने के लिए रिटर्न कीवर्ड का उपयोग कर सकते हैं।
Windows PowerShell में, प्रत्येक कथन के परिणामों को आउटपुट के रूप में लौटाया जाता है, यहां तक कि एक बयान के बिना जिसमें रिटर्न कीवर्ड होता है। C या C # जैसी भाषाएं केवल वही मान या मान लौटाती हैं जो रिटर्न कीवर्ड द्वारा निर्दिष्ट होते हैं।
जल्दी निकल जाना
function earlyexit {
"Hello"
return
"World"
}
"हैलो" को आउटपुट पाइपलाइन में रखा जाएगा, "वर्ल्ड" नहीं होगा
पकड़ लिया! पाइपलाइन में लौटें
get-childitem | foreach-object { if ($_.IsReadOnly) { return } }
पाइपलाइन cmdlets (उदा: ForEach-Object
, Where-Object
, आदि) क्लोजर पर काम करते हैं। यहां वापसी केवल पाइप लाइन पर अगले आइटम पर जाएगी, प्रसंस्करण से बाहर नहीं। यदि आप प्रसंस्करण से बाहर निकलना चाहते हैं तो आप रिटर्न के बजाय ब्रेक का उपयोग कर सकते हैं।
get-childitem | foreach-object { if ($_.IsReadOnly) { break } }
पकड़ लिया! अवांछित उत्पादन की अनदेखी
से प्रेरित
function bar {
[System.Collections.ArrayList]$MyVariable = @()
$MyVariable.Add("a") | Out-Null
$MyVariable.Add("b") | Out-Null
$MyVariable
}
Out-Null
आवश्यक है क्योंकि .NET ArrayList.Add
विधि संग्रह के बाद आइटम की संख्या लौटाती है। यदि छोड़ा गया है, तो पाइपलाइन में 1, 2, "a", "b"
अवांछित उत्पादन को रोकने के कई तरीके हैं:
function bar
{
# New-Item cmdlet returns information about newly created file/folder
New-Item "test1.txt" | out-null
New-Item "test2.txt" > $null
[void](New-Item "test3.txt")
$tmp = New-Item "test4.txt"
}
नोट: > $null
पसंद करने के बारे में अधिक जानने के लिए, [अभी तक बनाया गया विषय नहीं] देखें।
मान के साथ लौटें
( लगभग_ब्रह्म से पारंगत )
निम्नलिखित विधियों में पाइपलाइन पर समान मान होंगे
function foo {
$a = "Hello"
return $a
}
function bar {
$a = "Hello"
$a
return
}
function quux {
$a = "Hello"
$a
}
फ़ंक्शंस रिटर्न के साथ कैसे काम करें
एक फंक्शन सब कुछ लौटाता है जो कुछ और द्वारा कब्जा नहीं किया जाता है।
यदि आप वापसी कीवर्ड का उपयोग करते हैं , तो रिटर्न लाइन के बाद हर स्टेटमेंट निष्पादित नहीं किया जाएगा!
ऐशे ही:
Function Test-Function
{
Param
(
[switch]$ExceptionalReturn
)
"Start"
if($ExceptionalReturn){Return "Damn, it didn't work!"}
New-ItemProperty -Path "HKCU:\" -Name "test" -Value "TestValue" -Type "String"
Return "Yes, it worked!"
}
टेस्ट समारोह
वापस होगा:
- शुरू
- नई बनाई गई रजिस्ट्री कुंजी (इसका कारण यह है कि कुछ स्टेटमेंट हैं जो आउटपुट बनाते हैं जो आप उम्मीद नहीं कर सकते हैं)
- हाँ, यह काम किया!
टेस्ट-फंक्शन-एक्सेप्टेंशनल रीटर्न लौटेगा:
- शुरू
- अरे, यह काम नहीं किया!
यदि आप इसे इस तरह करते हैं:
Function Test-Function
{
Param
(
[switch]$ExceptionalReturn
)
. {
"Start"
if($ExceptionalReturn)
{
$Return = "Damn, it didn't work!"
Return
}
New-ItemProperty -Path "HKCU:\" -Name "test" -Value "TestValue" -Type "String"
$Return = "Yes, it worked!"
Return
} | Out-Null
Return $Return
}
टेस्ट समारोह
वापस होगा:
- हाँ, यह काम किया!
टेस्ट-फंक्शन-एक्सेप्टेंशनल रीटर्न लौटेगा:
- अरे, यह काम नहीं किया!
इस ट्रिक से आप लौटे आउटपुट को नियंत्रित कर सकते हैं, भले ही आपको यकीन न हो कि प्रत्येक स्टेटमेंट क्या होगा।
यह इस तरह काम करता है
.{<Statements>} | Out-Null
। निम्नलिखित स्क्रिप्टब्लॉक को कोड में शामिल करता है
{} स्क्रिप्ट ब्लॉक को चिह्नित करता है
| आउट-नल किसी भी अप्रत्याशित आउटपुट को आउट-नल को पाइप करता है (इसलिए यह चला गया है!)
क्योंकि स्क्रिप्टब्लॉक को शामिल किया गया है क्योंकि यह बाकी फ़ंक्शन के समान ही है।
इसलिए आप उन चरों को एक्सेस कर सकते हैं जो स्क्रिप्टब्लॉक के अंदर बने थे।