Cómo devolver un valor en PowerShell

  1. Uso de la palabra clave return en PowerShell
  2. Valores de retorno en la canalización en PowerShell
  3. Definiendo clases en PowerShell 5
Cómo devolver un valor en PowerShell

En general, la palabra clave return sale de una función, script o bloque de script. Así, por ejemplo, podemos usarla para salir de un ámbito en un punto específico, devolver un valor o indicar que se ha alcanzado el final del ámbito.

Sin embargo, en Windows PowerShell, el uso de la palabra clave return puede ser un poco confuso, ya que su script puede imprimir una salida que quizás no esperaba.

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

Uso de la palabra clave return en PowerShell

El bloque de script a continuación es la forma básica de la sintaxis de la palabra clave return.

return <expression>

La palabra clave return puede aparecer sola, o le puede seguir un valor o expresión. La palabra clave return sola regresará la línea de comando a su previa punto de llamada.

return
return $a
return (1 + $a)

El ejemplo a continuación 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 son multiplicados porque la declaración de retorno se encuentra antes de que esa declaración pueda ejecutarse.

function MultiplyOnlyEven {
    param($num)

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

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

Salida:

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 considerar:

  1. Toda salida es capturada y devuelta.
  2. La palabra clave return indica un punto de salida lógico.

Dicho esto, los siguientes dos bloques de script devolverán el valor de la variable $a.

Palabra clave return con una expresión:

$a = "Hello World"
return $a

Palabra clave return sin una expresión:

$a = "Hello World"
$a
return

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

Valores de retorno en la canalización en PowerShell

Cuando devuelves un valor de tu bloque de script o función, Windows PowerShell automáticamente retira 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 uno a la vez de Windows PowerShell.

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

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

Salida:

Count
-----
    3

Al usar el cmdlet Test-Return, la salida de la función a continuación se canaliza al cmdlet Measure-Object. El cmdlet contará el número de objetos en la canalización y, al ejecutarse, el conteo devuelto es tres.

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

Utilizando expresión de arreglo unaria en PowerShell

Utilizar una expresión unaria puede enviar tu valor de retorno a través de 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

Salida:

Count
-----
    1

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

También podemos usar el cmdlet Write-Output con el parámetro -NoEnumerate. El ejemplo a continuación utiliza el cmdlet Measure-Object para contar los objetos enviados a la canalización desde la función de ejemplo mediante 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

Salida:

Count
-----
    1

Otro método para forzar a la canalización a devolver solo un único objeto se introdujo en PowerShell versión 5, que discutiremos en la siguiente sección del artículo.

Definiendo clases en PowerShell 5

Con la versión 5.0 de Windows PowerShell, ahora podemos crear y definir nuestras clases personalizadas. Cambia tu función en una clase y la palabra clave return solo devolverá el único objeto que la precede inmediatamente.

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()

Salida:

1000

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

Salida:

Hello World!
1000
¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
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