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

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:
- Toda salida es capturada y devuelta.
- 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
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn