Ricerca…


introduzione

Può essere utilizzato per uscire dall'ambito corrente, che può essere una funzione, uno script o un blocco di script. In PowerShell, il risultato di ogni istruzione viene restituito come output, anche senza una parola chiave Return esplicita o per indicare che è stata raggiunta la fine dell'ambito.

Osservazioni

È possibile leggere ulteriori informazioni sulla semantica di ritorno nella pagina about_Return su TechNet o richiamando il get-help return da un prompt di PowerShell.


Domande & risposte notevoli con più esempi / spiegazioni:


about_return su MSDN lo spiega in modo succinto:

La parola chiave Return restituisce una funzione, uno script o un blocco di script. Può essere utilizzato per uscire da un ambito in un punto specifico, per restituire un valore o per indicare che è stata raggiunta la fine dell'ambito.

Gli utenti che hanno familiarità con linguaggi come C o C # potrebbero voler utilizzare la parola chiave Return per rendere esplicita la logica di lasciare uno scope.

In Windows PowerShell, i risultati di ogni istruzione vengono restituiti come output, anche senza un'istruzione che contiene la parola chiave Return. Lingue come C o C # restituiscono solo il valore o i valori specificati dalla parola chiave Return.

uscita anticipata

function earlyexit {
    "Hello"
    return
    "World"
}

"Ciao" sarà posto in cantiere in uscita, "Mondo" non lo farà

Gotcha! Rientro in pipeline

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

I cmdlet della pipeline (ad es .: ForEach-Object , Where-Object , ecc.) Operano sulle chiusure. Il ritorno qui passerà all'elemento successivo sulla pipeline, non all'elaborazione dell'uscita. È possibile utilizzare l' interruzione anziché il ritorno se si desidera uscire dall'elaborazione.

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

Gotcha! Ignorando l'uscita indesiderata

Ispirato da

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

L' Out-Null è necessario perché il metodo .NET ArrayList.Add restituisce il numero di elementi nella raccolta dopo l'aggiunta. Se omesso, la pipeline avrebbe contenuto 1, 2, "a", "b"

Esistono diversi modi per omettere l'output indesiderato:

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

Nota: per saperne di più sul perché preferire > $null , vedere [argomento non ancora creato].

Ritorna con un valore

(parafrasato da about_return )

I seguenti metodi avranno gli stessi valori sulla pipeline

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

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

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

Come lavorare con i ritorni delle funzioni

Una funzione restituisce tutto ciò che non è catturato da qualcos'altro.
Se usi la parola chiave return , ogni istruzione dopo la riga di ritorno non verrà eseguita!

Come questo:

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-Function
Tornerà:

  • Inizio
  • La chiave di registro appena creata (questo perché ci sono alcune istruzioni che creano un output che potresti non aspettarti)
  • Sì, ha funzionato!

Test-Function -ExceptionalReturn Restituirà:

  • Inizio
  • Dannazione, non ha funzionato!

Se lo fai in questo modo:

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-Function
Tornerà:

  • Sì, ha funzionato!

Test-Function -ExceptionalReturn Restituirà:

  • Dannazione, non ha funzionato!

Con questo trucco puoi controllare l'output restituito anche se non sei sicuro di cosa sputerà ogni dichiarazione.

Funziona così

.{<Statements>} | Out-Null

il . rende il seguente scriptblock incluso nel codice
il {} contrassegna il blocco di script
il | Out-Null pipe qualsiasi output inaspettato a Out-Null (quindi è andato!)
Poiché lo scriptblock è incluso, ottiene lo stesso scope del resto della funzione.
In questo modo è possibile accedere alle variabili create all'interno dello scriptblock.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow