Retorno de la función de PowerShell – informaticamadridmayor

La mayoría de los principiantes de PowerShell creen que las funciones de PowerShell pueden devolver un valor solo a través del Regreso declaración. La declaración de retorno generalmente termina la función y devuelve el control al bloque de código de llamada. Pero en Windows PowerShell, esto no es del todo cierto …

En este artículo, veremos cómo devolver valores de funciones de PowerShell usando el Regreso mando.

El comando Devolver en PowerShell se usa si una función es para terminar la función y regresar al alcance de la persona que llama o devolver un valor de una función.

En los lenguajes de programación tradicionales, las funciones generalmente devuelven un valor único de un tipo particular, pero en Windows PowerShell, los resultados de la función se envían al flujo de salida.

Veamos la función más simple de PowerShell:

function TestReturn($param) {

$x = $param + 5

"text"

2*2

return $x

}

Si ejecuta esta función con un parámetro 5 (TestReturn (5)) en un lenguaje de programación clásico, dicha construcción debería devolver 10 (valor entero).

Sin embargo, en el caso de PowerShell, veremos el resultado:

text

4

10

Como puede ver, la función de PowerShell devolvió 3 valores como resultado. Es por eso que el comando Retorno en PowerShell no se comprende particularmente bien.

El Documento de referencia de Microsoft PowerShell dice que la palabra clave return sale del alcance actual, que puede ser una función, un script o un bloque de script.

En otras palabras, se utiliza para completar la ejecución de un código de función y transferir el control al bloque padre. Si agrega algún parámetro a la declaración de retorno, este valor se devolverá al bloque de código de llamada y el valor de retorno.

Nota. No es necesario especificar un Regreso comando en una función de PowerShell. El valor de cualquier variable u objeto que se muestre directamente en el cuerpo de la función estará disponible como salida de la función.

Puede asignar el valor de la función a una variable y verificar su tipo con los siguientes comandos:

$MyTestVar=TestReturn (5)

$MyTestVar.GetType().FullName

El tipo de retorno de la función es System.Object [], es decir, esto es una matriz. Si la salida de la función contiene objetos, las instancias del objeto devuelto también caerán en la colección (matriz dinámica).

Puede mostrar la longitud de la matriz y los valores que contiene:

$MyTestVar.length

$MyTestVar[0]

$MyTestVar[1]

$MyTestVar[2]

De forma predeterminada, las funciones de PowerShell funcionan de tal manera que, cuando se ejecutan, escriben todos los valores que se mostraron durante la operación de la función en la matriz $ Result. Esto no siempre es conveniente al escribir funciones de PowerShell.

Para no enviar valores adicionales al flujo de salida de la función, no use el eco (un alias para el Salida de escritura cmdlet) para escribir información de depuración en sus scripts de PowerShell. En su lugar, utilice los siguientes cmdlets: cmdlets Write-Host, Write-Verbose o Write-Debug. Estos cmdlets enviarán datos de función a la consola (en la pantalla) y no al flujo de salida de la función:

function TestReturn($param) {

$x = $param + 5

Write-Host "text"

Write-Host 2*2

return $x

}

$MyTestVar = TestReturn (5)

$MyTestVar

Como puede ver, la función devolvió solo el valor que esperábamos: 10.

valor de retorno de powershell de la función

También puede ocultar información adicional del flujo de salida utilizando el Regreso declaración (se parece a la Romper comando en bucles de PowerShell). Luego usa Return, que detiene la función y devuelve un valor.

function TestReturn($param) {

“This line is displayed”

return

“ This line is not displayed”

}

$MyTestVar = TestReturn (5)

$MyTestVar

valor de retorno de powershell

En este ejemplo, el regreso palabra clave termina la función actual (sale del ámbito actual). Esto significa que la línea 4 no se procesa y, por lo tanto, no se muestra.

Hay una peculiaridad más de usar la instrucción Return en funciones. En PowerShell, el alcance de las variables en una función es limitado. Todas las variables creadas dentro de la función permanecen en ella. Con Return, puede devolver los valores de variables fuera de la función:

function Get-LastLog ($param1) {

$newevents = Get-EventLog -LogName System -Newest $param1

return $newevents

}

$result = Get-DayLog -5

$result

Puede haber varios valores de retorno en la función.

function Get-FolderSize ($Path) {

$FullSizeMb="{0:N2} MB" -f ((gci –force $Path –Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Mb)

$FirstLevelSizeMb ="{0:N2} MB" -f ((gci –force $Path -ErrorAction SilentlyContinue| measure Length -s).sum / 1Mb)

return $FullSizeMb, $FirstLevelSizeMb

}

Get-FolderSize “C:PS”

cadena de retorno de la función powershell

El cmdlet Return se puede usar en declaraciones If-Else:

function Get-FolderSize {

$FullSizeMb="{0:N2} MB" -f ((gci –force $Path –Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Mb)

if $FullSizeMb -gt 1000) {

return "Large Folder" + $FullSizeMb}

else{

return "Small Folder" + $FullSizeMb}

}

Get-FolderSize “C:PS”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *