Buscar..


Introducción

Se puede utilizar para salir del ámbito actual, que puede ser una función, un script o un bloque de script. En PowerShell, el resultado de cada declaración se devuelve como resultado, incluso sin una palabra clave de retorno explícita o para indicar que se ha llegado al final del alcance.

Observaciones

Puede leer más sobre la semántica de retorno en la página about_Return en TechNet, o invocando la get-help return desde un indicador de PowerShell.


Pregunta (s) de preguntas y respuestas notables con más ejemplos / explicación:


about_return en MSDN lo explica de manera sucinta:

La palabra clave Return sale de una función, script o bloque de script. Se puede usar para salir de un alcance en un punto específico, para devolver un valor o para indicar que se ha llegado al final del alcance.

Los usuarios que están familiarizados con lenguajes como C o C # pueden querer usar la palabra clave Return para hacer que la lógica de dejar un alcance explícito.

En Windows PowerShell, los resultados de cada declaración se devuelven como resultados, incluso sin una declaración que contenga la palabra clave Return. Los idiomas como C o C # devuelven solo el valor o los valores especificados por la palabra clave Return.

Salida temprana

function earlyexit {
    "Hello"
    return
    "World"
}

"Hola" se colocará en el canal de salida, "Mundo" no

Gotcha! Retorno en la tubería

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

Los cmdlets de ForEach-Object (por ejemplo, ForEach-Object , Where-Object , etc.) operan en los cierres. La devolución aquí solo se moverá al siguiente elemento en la canalización, no al proceso de salida. Puede usar break en lugar de return si desea salir del proceso.

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

Gotcha! Ignorar la salida no deseada

Inspirado por

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

Out-Null es necesario porque el método .NET ArrayList.Add devuelve el número de elementos en la colección después de agregarlos. Si se omite, la tubería habría contenido 1, 2, "a", "b"

Hay varias formas de omitir resultados no deseados:

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: para obtener más información sobre por qué preferir > $null , consulte [tema aún no creado].

Vuelve con un valor

(Parafraseado de about_return )

Los siguientes métodos tendrán los mismos valores en la tubería.

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

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

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

Cómo trabajar con funciones devoluciones.

Una función devuelve todo lo que no es capturado por otra cosa.
Si u utilizar la palabra clave de retorno, no se ejecutará cada declaración después de la línea de retorno!

Me gusta esto:

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

Función de prueba
Volverá

  • comienzo
  • La clave de registro recién creada (esto se debe a que hay algunas declaraciones que crean resultados que puede no estar esperando)
  • Sí, funcionó!

Test-Function -ExceptionalReturn devolverá:

  • comienzo
  • Maldita sea, no funcionó!

Si lo haces así:

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
}

Función de prueba
Volverá

  • Sí, funcionó!

Test-Function -ExceptionalReturn devolverá:

  • Maldita sea, no funcionó!

Con este truco, puede controlar el resultado devuelto incluso si no está seguro de lo que escupirá cada declaración.

Funciona así

.{<Statements>} | Out-Null

la . realiza el siguiente bloque de script incluido en el código
el {} marca el bloque de script
el | Out-Null canaliza cualquier salida inesperada a Out-Null (¡así que se ha ido!)
Debido a que el bloque de secuencias de comandos está incluido, obtiene el mismo ámbito que el resto de la función.
Así que puedes acceder a las variables que fueron creadas dentro del bloque de script.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow