Valor devuelto en PowerShell
-
Uso de la palabra clave
return
en PowerShell - Valores devueltos en la canalización en PowerShell
- Definición de clases en PowerShell 5
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:
- Toda la salida se captura y se devuelve.
- 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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn