Zoeken…


Invoering

Het kan worden gebruikt om het huidige bereik te verlaten, wat een functie, script of scriptblok kan zijn. In PowerShell wordt het resultaat van elke instructie geretourneerd als uitvoer, zelfs zonder een expliciet Return-trefwoord of om aan te geven dat het einde van het bereik is bereikt.

Opmerkingen

U kunt meer lezen over de terugkeer-semantiek op de about_Return- pagina op TechNet, of door gebruik te get-help return van een get-help return van een PowerShell-prompt.


Opmerkelijke vragen en antwoorden met meer voorbeelden / uitleg:


about_return op MSDN legt het bondig uit:

Het Return-trefwoord verlaat een functie, script of scriptblok. Het kan worden gebruikt om een bereik op een specifiek punt af te sluiten, een waarde te retourneren of om aan te geven dat het einde van het bereik is bereikt.

Gebruikers die bekend zijn met talen zoals C of C #, kunnen het trefwoord Return gebruiken om de logica van het expliciet laten van een scope te maken.

In Windows PowerShell worden de resultaten van elke instructie als uitvoer geretourneerd, zelfs zonder een instructie die het trefwoord Return bevat. Talen zoals C of C # retourneren alleen de waarde of waarden die zijn opgegeven met het trefwoord Return.

Vroege exit

function earlyexit {
    "Hello"
    return
    "World"
}

"Hallo" wordt in de uitvoerpijplijn geplaatst, "Wereld" niet

Gotcha! Keer terug in de pijplijn

get-childitem | foreach-object { if ($_.IsReadOnly) { return } } 

Pijplijn-cmdlets (bijvoorbeeld: ForEach-Object , Where-Object , enz.) Werken op sluitingen. De retour hier wordt alleen verplaatst naar het volgende item op de pijplijn, niet bij het verlaten van de verwerking. U kunt break gebruiken in plaats van return als u de verwerking wilt afsluiten.

get-childitem | foreach-object { if ($_.IsReadOnly) { break } } 

Gotcha! Negeren van ongewenste uitvoer

Geïnspireerd door

function bar {
 [System.Collections.ArrayList]$MyVariable = @()
 $MyVariable.Add("a") | Out-Null
 $MyVariable.Add("b") | Out-Null
 $MyVariable
}

De Out-Null is noodzakelijk omdat de .NET ArrayList.Add methode het aantal items in de verzameling retourneert na toevoeging. Indien weggelaten, zou de pijplijn 1, 2, "a", "b"

Er zijn meerdere manieren om ongewenste uitvoer weg te laten:

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"
}

Opmerking: zie [onderwerp nog niet gemaakt] voor meer informatie over waarom > $null voorkeur > $null .

Retourneer met een waarde

(geparafraseerd van about_return )

De volgende methoden hebben dezelfde waarden op de pijplijn

function foo {
    $a = "Hello"
    return $a
}

function bar {
    $a = "Hello"
    $a
    return
} 

function quux {
    $a = "Hello"
    $a
} 

Hoe te werken met functies keert terug

Een functie retourneert alles dat niet door iets anders wordt vastgelegd.
Als u gebruik maken van de return sleutelwoord, zal elke verklaring na de retourleiding niet worden uitgevoerd!

Soortgelijk:

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!"
}

Test-functie
Zal terugkomen:

  • Begin
  • De nieuw gemaakte registersleutel (dit komt omdat er enkele verklaringen zijn die uitvoer genereren die u misschien niet verwacht)
  • Ja, het werkte!

Testfunctie -Exceptionele terugkeer Keert terug:

  • Begin
  • Verdorie, het werkte niet!

Als je het zo doet:

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
}

Test-functie
Zal terugkomen:

  • Ja, het is gelukt!

Testfunctie -Exceptionele terugkeer Keert terug:

  • Verdorie, het werkte niet!

Met deze truc kun je de geretourneerde uitvoer beheren, zelfs als je niet zeker weet wat elke instructie zal uitspugen.

Het werkt zo

.{<Statements>} | Out-Null

de . maakt het volgende scriptblok opgenomen in de code
de {} markeert het scriptblok
de | Out-Null leidt elke onverwachte output naar Out-Null (dus het is weg!)
Omdat het scriptblok is opgenomen, krijgt het hetzelfde bereik als de rest van de functie.
Je hebt dus toegang tot variabelen die in het scriptblok zijn gemaakt.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow