Sök…


Introduktion

Det kan användas för att lämna det aktuella omfånget, som kan vara en funktion, skript eller skriptblock. I PowerShell returneras resultatet av varje uttalande som utgång, även utan ett uttryckligt Return-nyckelord eller för att indikera att slutet på räckvidden har uppnåtts.

Anmärkningar

Du kan läsa mer om retursemantikenAbout_Return- sidan på TechNet eller genom att åberopa get-help return från en PowerShell-prompt.


Noterbara frågor och frågor med fler exempel / förklaring:


about_return på MSDN förklarar det kortfattat:

Return-nyckelordet lämnar en funktion, skript eller skriptblock. Det kan användas för att lämna ett omfång på en specifik punkt, för att returnera ett värde eller för att indikera att slutet på omfånget har uppnåtts.

Användare som känner till språk som C eller C # kanske vill använda sökordet Return för att göra logiken för att lämna en räckvidd uttrycklig.

I Windows PowerShell returneras resultaten för varje uttalande som output, även utan ett uttalande som innehåller sökordet Return. Språk som C eller C # returnerar bara värdet eller värdena som anges av Return-nyckelordet.

Tidig utgång

function earlyexit {
    "Hello"
    return
    "World"
}

"Hej" kommer att placeras i utgångsrörledningen, "Värld" kommer inte

Fick dig! Återgå i rörledningen

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

Rörlednings-cmdlets (ex: ForEach-Object , Where-Object , etc) fungerar på stängningar. Returen här flyttas bara till nästa objekt på pipeline, inte avslutande bearbetning. Du kan använda paus istället för att returnera om du vill avsluta behandlingen.

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

Fick dig! Ignorerar oönskad utgång

Inspirerad av

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

Out-Null är nödvändigt eftersom metoden .NET ArrayList.Add returnerar antalet objekt i samlingen efter att ha lagt till. Om utelämnad skulle rörledningen innehålla 1, 2, "a", "b"

Det finns flera sätt att utelämna oönskad produktion:

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

Obs! För att lära dig mer om varför du föredrar > $null , se [ämnet ännu inte skapat].

Återvänd med ett värde

(omskriven från om_return )

Följande metoder har samma värden på pipeline

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

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

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

Hur man arbetar med funktioner returnerar

En funktion returnerar allt som inte fångas av något annat.
Om u använder retur nyckelordet kommer varje uttalande efter returledningen inte utföras!

Så här:

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

Testet-Funktion
Kommer att återvända:

  • Start
  • Den nyligen skapade registernyckeln (det beror på att det finns några uttalanden som skapar output som du kanske inte förväntar dig)
  • Ja, det fungerade!

Test-funktion-ExceptionalReturn kommer tillbaka:

  • Start
  • Fan, det fungerade inte!

Om du gör det så här:

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
}

Testet-Funktion
Kommer att återvända:

  • Ja, det fungerade!

Test-funktion-ExceptionalReturn kommer tillbaka:

  • Fan, det fungerade inte!

Med detta trick kan du styra den returnerade utskriften även om du inte är säker på vad som varje uttalande kommer att spottas ut.

Det fungerar så här

.{<Statements>} | Out-Null

den. gör följande skriptblock ingår i koden
{} markerar skriptblocket
den | Out-Null rör alla oväntade utmatningar till Out-Null (så det är borta!)
Eftersom skriptblocket ingår får det samma räckvidd som resten av funktionen.
Så du kan komma åt variabler som gjordes i skriptblocket.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow