Cómo devolver varios elementos desde una función de PowerShell

  1. Usar Matrices para Devolver Varios Elementos de una Función de PowerShell
  2. Usar [PSCustomObject] para Devolver Varios Elementos de una Función de PowerShell
  3. Usar Tablas Hash para Devolver Varios Elementos de una Función de PowerShell
  4. Usar Objetos Personalizados para Devolver Varios Elementos de una Función de PowerShell
  5. Conclusión
Cómo devolver varios elementos desde una función de PowerShell

Cuando trabajas con funciones de PowerShell, a menudo surge la necesidad de devolver múltiples valores de manera eficiente. Un enfoque efectivo es utilizar matrices, [PSCustomObject], tablas hash u objetos personalizados para encapsular y presentar estos valores.

En este artículo, profundizaremos en cómo usar los métodos mencionados para devolver varios elementos de una función de PowerShell. Esbozaremos procedimientos paso a paso para cada método y proporcionaremos ejemplos de código para ilustrar su implementación y mostrar sus salidas.

Usar Matrices para Devolver Varios Elementos de una Función de PowerShell

Para devolver múltiples valores de una función de PowerShell utilizando una matriz, sigue estos pasos:

  • Declarar una Variable de Matriz: Comienza declarando una variable de matriz dentro de la función para almacenar los múltiples valores que deseas devolver.
  • Población de la Matriz: Poblamos la matriz con los valores deseados que queremos devolver. Puedes agregar elementos a la matriz utilizando indexación.
  • Devolver la Matriz: Devuelve la matriz poblada como la salida de la función.

Creemos una función simple de PowerShell que devuelva múltiples valores utilizando una matriz.

function Get-MultipleValues {
    $values = @()

    $values += "Value1"
    $values += "Value2"
    $values += "Value3"

    return $values
}

$resultArray = Get-MultipleValues

Write-Output "Values returned from the function:"
foreach ($value in $resultArray) {
    Write-Output $value
}

Salida:

Values returned from the function:
Value1
Value2
Value3

En este ejemplo, tenemos una función llamada Get-MultipleValues. Dentro de la función, declaramos una variable de matriz $values.

Luego, poblamos esta matriz con tres valores: "Value1", "Value2" y "Value3". Finalmente, devolvemos la matriz poblada como la salida de la función.

Al llamar a la función, almacenamos el resultado en una variable ($resultArray) y mostramos los valores dentro de la matriz utilizando un bucle.

Usar [PSCustomObject] para Devolver Varios Elementos de una Función de PowerShell

También puedes utilizar [PSCustomObject] para crear objetos personalizados en PowerShell. Permite definir propiedades y valores para un objeto, lo que lo convierte en una opción adecuada para devolver múltiples valores de una función.

Para crear un objeto personalizado usando [PSCustomObject], simplemente define las propiedades y sus correspondientes valores así:

$customObject = [PSCustomObject]@{
    Property1 = 'Value1'
    Property2 = 'Value2'
    ...
}

Para devolver múltiples valores utilizando [PSCustomObject] en una función de PowerShell, comienza definiendo la función de PowerShell y creando una instancia de [PSCustomObject]. Define las propiedades y valores que deseas devolver dentro del objeto personalizado.

function Get-MultipleValues {
    [CmdletBinding()]
    param (
        [string]$Value1,
        [int]$Value2,
        [string]$Value3
    )

    $resultObject = [PSCustomObject]@{
        Name    = $Value1
        Age     = $Value2
        Address = $Value3
    }

    return $resultObject
}

Ahora, puedes llamar a la función y recuperar el objeto personalizado que contiene múltiples valores.

$result = Get-MultipleValues -Value1 'Rohan' -Value2 21 -Value3 'UK'

Write-Output "Values returned from the function:"
foreach ($value in $result) {
    Write-Output $value
}

Salida:

Values returned from the function:
Name  Age Address
----  --- -------
Rohan  21 UK

Como podemos ver, el código de PowerShell anterior introduce una función llamada Get-MultipleValues. Esta función, etiquetada con [CmdletBinding()], indica su capacidad de utilizar parámetros comunes de cmdlet.

Dentro de la función, se definen tres parámetros: $Value1 (una cadena), $Value2 (un entero) y $Value3 (una cadena). La función construye un objeto personalizado llamado $resultObject utilizando estos parámetros, asignándolos a las propiedades Name, Age y Address dentro del objeto personalizado.

La declaración return $resultObject asegura que este objeto personalizado sea devuelto como la salida de la función Get-MultipleValues.

Después de eso, el script llama a la función Get-MultipleValues, especificando valores para cada parámetro: $Value1 se establece en 'Rohan', $Value2 se establece en 21 y $Value3 se establece en 'UK'. El objeto personalizado resultante, que incorpora los valores de los parámetros proporcionados, se almacena en la variable $result.

A continuación, el script utiliza Write-Output para presentar un mensaje en la consola e inicia un bucle, recorriendo las propiedades del objeto personalizado que se encuentra en $result. Para cada propiedad, el script muestra tanto el nombre de la propiedad como su valor respectivo en la consola.

Usar Tablas Hash para Devolver Varios Elementos de una Función de PowerShell

Una tabla hash en PowerShell es una colección desordenada de pares clave-valor. Cada clave debe ser única y el valor asociado puede ser de cualquier tipo de datos.

También se le llama diccionario o arreglo asociativo. Las tablas hash son particularmente útiles cuando necesitas almacenar y recuperar datos basados en claves específicas, proporcionando una manera estructurada de organizar la información.

Para devolver múltiples valores de una función de PowerShell utilizando tablas hash, sigue estos pasos:

  • Crear una Tabla Hash: Instancia una tabla hash dentro de la función para almacenar los pares clave-valor que representan los datos que deseas devolver.

    Puedes crear una tabla hash en PowerShell usando @{}. Las claves y los valores se colocan en los corchetes {}.

    La sintaxis para crear una tabla hash es la siguiente.

     <key> = <value>; [<key> = <value> ] ... }
    
  • Agregar Pares Clave-Valor: Agrega los pares clave-valor a la tabla hash, asociando cada valor con una clave única.
  • Devolver la Tabla Hash: Devuelve la tabla hash poblada como la salida de la función.

Veamos un ejemplo que utiliza la tabla hash para devolver múltiples valores de una función llamada user.

Código:

function user() {
    $hash = @{ Name = 'Rohan'; Age = 21; Address = 'UK' }
    return $hash
}

$a = user
Write-Host "$($a.Name) is $($a.Age) and lives in $($a.Address)."

Salida:

Rohan is 21 and lives in UK.

Como podemos ver, este código define una función llamada user() utilizando la palabra clave function. Dentro de esta función, se crea una tabla hash llamada $hash usando la sintaxis @{}, que contiene tres pares clave-valor: Name con el valor 'Rohan', Age con el valor 21, y Address con el valor 'UK'.

La declaración return $hash asegura que esta tabla hash sea la salida de la función user().

Posteriormente, el script llama a la función user() y asigna la tabla hash resultante a la variable $a. Esto significa que $a ahora contiene la tabla hash devuelta por la función user().

Finalmente, se utiliza el cmdlet Write-Host para mostrar un mensaje en la consola. El mensaje incorpora los valores de la tabla hash almacenada en $a, recuperados usando $($a.Name), $($a.Age), y $($a.Address) para acceder respectivamente a los valores de Name, Age y Address.

Ahora, creemos otra función de PowerShell que calcule la suma y el producto de dos números y devuelva los resultados utilizando una tabla hash.

function Calculate-SumAndProduct {
    param(
        [int]$num1,
        [int]$num2
    )

    $resultHashTable = @{
        Sum     = $num1 + $num2
        Product = $num1 * $num2
    }

    return $resultHashTable
}

$inputNum1 = 5
$inputNum2 = 7

$result = Calculate-SumAndProduct -num1 $inputNum1 -num2 $inputNum2

Write-Output "Sum: $($result['Sum'])"
Write-Output "Product: $($result['Product'])"

Salida:

Sum: 12
Product: 35

Este código comienza definiendo una función llamada Calculate-SumAndProduct, que acepta dos parámetros int, $num1 y $num2. Dentro de la función, se crea una tabla hash llamada $resultHashTable utilizando la sintaxis @{}.

Esta tabla hash contiene dos pares clave-valor: Sum con un valor igual a la suma de $num1 y $num2, y Product con un valor igual al producto de $num1 y $num2. La función luego devuelve esta tabla hash, convirtiéndola en la salida de la función Calculate-SumAndProduct.

Avanzando en el script, se definen dos números de entrada: $inputNum1 con un valor de 5 y $inputNum2 con un valor de 7. La función Calculate-SumAndProduct se llama con estos números de entrada y la tabla hash resultante se almacena en una variable llamada $result.

Finalmente, el script utiliza el cmdlet Write-Output para mostrar los valores de suma y producto accediendo a los valores correspondientes en la tabla hash almacenada en $result.

Usar Objetos Personalizados para Devolver Varios Elementos de una Función de PowerShell

Un objeto personalizado en PowerShell es una instancia de la clase System.Management.Automation.PSCustomObject. Permite definir propiedades y valores asociados con esas propiedades, imitando un objeto del mundo real.

Los objetos personalizados son flexibles y permiten la organización y recuperación de datos de manera estructurada.

Para devolver múltiples valores de una función de PowerShell utilizando objetos personalizados, sigue estos pasos:

  • Definir un Objeto Personalizado: Crea un objeto personalizado dentro de la función y define propiedades para los valores que deseas devolver.
  • Asignar Valores de Propiedad: Asigna los valores que deseas devolver a las propiedades del objeto personalizado.
  • Devolver el Objeto Personalizado: Devuelve el objeto personalizado poblado como la salida de la función.

Creemos una función de PowerShell que calcule la suma y el producto de dos números y devuelva los resultados utilizando un objeto personalizado.

function Calculate-SumAndProduct {
    param(
        [int]$num1,
        [int]$num2
    )

    $resultObject = New-Object PSObject
    $resultObject | Add-Member -MemberType NoteProperty -Name "Sum" -Value ($num1 + $num2)
    $resultObject | Add-Member -MemberType NoteProperty -Name "Product" -Value ($num1 * $num2)

    return $resultObject
}

$inputNum1 = 5
$inputNum2 = 7

$result = Calculate-SumAndProduct -num1 $inputNum1 -num2 $inputNum2

Write-Output "Sum: $($result.Sum)"
Write-Output "Product: $($result.Product)"

Salida:

Sum: 12
Product: 35

En este ejemplo, definimos una función llamada Calculate-SumAndProduct que toma dos números de entrada ($num1 y $num2). Dentro de la función, creamos un objeto personalizado llamado $resultObject y añadimos propiedades (Sum y Product) a él, asignando los respectivos valores calculados.

Al llamar a la función con los números de entrada (5 y 7), almacenamos el resultado en una variable ($result). Luego mostramos la suma y el producto accediendo a las propiedades del objeto personalizado de resultado.

Conclusión

Este artículo ha explorado varias técnicas para devolver múltiples valores de una función, incluyendo el uso de matrices, [PSCustomObject], tablas hash y objetos personalizados. Cada método ofrece sus ventajas y puede ser seleccionado según los requisitos específicos de tu script.

Las matrices proporcionan una forma sencilla de devolver múltiples valores, especialmente cuando los elementos de datos comparten un tipo o estructura similar. [PSCustomObject] te permite crear objetos personalizados con propiedades nombradas, ofreciendo un enfoque estructurado para devolver datos.

Las tablas hash sobresalen en escenarios donde la recuperación de datos se basa en claves específicas, proporcionando una solución organizada y eficiente. Los objetos personalizados, construidos usando la clase [System.Management.Automation.PSCustomObject], ofrecen flexibilidad e imitan objetos del mundo real.

¿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
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

Artículo relacionado - PowerShell Function