Valor devuelto en PowerShell

  1. Uso de la palabra clave return en PowerShell
  2. Valores devueltos en la canalización en PowerShell
  3. Definición de clases en PowerShell 5
Valor devuelto en PowerShell

En general, la palabra clave return sale de una función, script o bloque de script. Así, por ejemplo, podemos usarlo para dejar un alcance en un punto específico, devolver un valor o indicar que se ha llegado al final del alcance.

Sin embargo, en Windows PowerShell, usar la palabra clave return puede ser un poco confuso ya que su secuencia de comandos puede imprimir un resultado que quizás no esperaba.

Este artículo discutirá cómo funciona la palabra clave return y cómo usarla correctamente en Windows PowerShell.

Uso de la palabra clave return en PowerShell

El siguiente bloque de script es la forma básica de la sintaxis de la palabra clave return.

return <expression>

La palabra clave return puede aparecer sola, o un valor o expresión puede seguirla. La palabra clave return por sí sola devolverá la línea de comando a su punto de llamada anterior.

return
return $a
return (1 + $a)

El siguiente ejemplo utiliza la palabra clave return para salir de una función si se cumple una condición en un punto específico. En este ejemplo, los números impares no se multiplican porque la declaración de devolución va antes de que se pueda ejecutar esa declaración.

function MultiplyOnlyEven
{
    param($num)

    if ($num % 2) { return "$num is not even" }
    $num * 2
    return
}

1..10 | ForEach-Object {MultiplyOnlyEven -Num $_}

Producción :

1 is not even
4
3 is not even
8
5 is not even
12
7 is not even
16
9 is not even
20

Windows PowerShell tiene una semántica de retorno confusa cuando se ve desde una perspectiva de programación más nativa. Hay dos ideas principales que debemos tener en cuenta:

  1. Toda la salida se captura y se devuelve.
  2. La palabra clave return indica un punto de salida lógico.

Dicho esto, el siguiente par de bloques de script devolverán el valor de la variable $a.

Devuelve la palabra clave con una expresión:

$a = "Hello World"
return $a

Devuelve la palabra clave sin una expresión:

$a = "Hello World"
$a
return

La palabra clave return tampoco es necesaria en el segundo bloque de script, ya que llamar a la variable en la línea de comandos devolverá explícitamente dicha variable.

Valores devueltos en la canalización en PowerShell

Cuando devuelve un valor de su bloque de script o función, Windows PowerShell muestra automáticamente los miembros y los empuja uno a la vez a través de la canalización. La razón detrás de este caso de uso se debe al procesamiento de uno a la vez de Windows PowerShell.

La siguiente función demuestra que esta idea devolverá un array de números.

function Test-Return
{
    $array = 1,2,3
    return $array
}
Test-Return | Measure-Object | Select-Object Count

Producción :

Count
-----
    3

Cuando se utiliza el cmdlet Test-Return, la salida de la siguiente función se canaliza al cmdlet Measure-Object. El cmdlet contará la cantidad de objetos en la canalización y, cuando se ejecuta, el recuento devuelto es tres.

Para hacer que un bloque de script o una función devuelva solo un objeto a la canalización, use uno de los siguientes métodos:

Uso de la expresión de matriz unaria en PowerShell

El uso de una expresión unaria puede enviar su valor devuelto por la canalización como un solo objeto, como se demuestra en el siguiente ejemplo.

function Test-Return
{
    $array = 1,2,3
    return (,$array)
}
Test-Return | Measure-Object | Select-Object Count

Producción :

Count
-----
    1

Use Write-Output con el parámetro NoEnumerate en PowerShell

También podemos usar el cmdlet Write-Output con el parámetro -NoEnumerate. El siguiente ejemplo usa el cmdlet Measure-Object para contar los objetos enviados a la canalización desde la función de muestra por la palabra clave return.

Código de ejemplo:

function Test-Return
{
    $array = 1,2,3
    return Write-Output -NoEnumerate $array
}
Test-Return | Measure-Object | Select-Object Count

Producción :

Count
-----
    1

En la versión 5 de PowerShell se presenta otro método para obligar a la canalización a que devuelva solo un único objeto, que analizaremos en la siguiente sección del artículo.

Definición de clases en PowerShell 5

Con Windows PowerShell versión 5.0, ahora podemos crear y definir nuestras clases personalizadas. Cambie su función a una clase, y la palabra clave return solo devolverá el único objeto inmediatamente anterior.

Código de ejemplo:

class test_class {
    [int]return_what() {
        Write-Output "Hello, World!"
        return 1000
    }
}
$tc = New-Object -TypeName test_class
$tc.return_what()

Producción :

1000

Si la clase anterior es una función, devolverá todos los valores almacenados en la canalización.

Producción :

Hello World!
1000
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn