HOWTO · PowerShell

Múltiples valores en un parámetro en PowerShell

Este artículo discutirá la función de parámetro, diferentes tipos de variables que podemos definir en un parámetro, cómo manejar múltiples valores en un solo parámetro y sus usos de muestra.

Manejamos argumentos utilizando la función de parámetro de PowerShell param. Es un componente fundamental de cualquier script, permitiendo a los desarrolladores proporcionar entradas en tiempo de ejecución.

Además, si el comportamiento de un script necesita cambiar, un parámetro puede ofrecer una oportunidad para hacerlo sin cambiar el código subyacente.

Este artículo discutirá la función parameter, diferentes variables que podemos definir, manejar múltiples valores en un solo parámetro y usos de muestra.

Comprendiendo la función Parameter en PowerShell

Los administradores pueden crear parámetros para scripts utilizando la función de parámetro param().

Dentro de ella, la función de parámetro contiene uno o más parámetros definidos por variables.

param ($myVariable)

Sin embargo, para asegurarse de que el parámetro acepte solo el tipo de entrada que necesita, es mejor asignar un tipo de dato al parámetro encerrando el tipo de dato entre corchetes [] antes de la variable.

param ([String]$myVariable)

–>

Vale la pena mencionar que también puede usar otros tipos de datos como enteros, float y DateTime. También podemos asignarlo con un tipo de dato Boolean que discutiremos más adelante.

Usar los parámetros Nombrados en PowerShell

Usar una función de parámetro en un script es a través de parámetros nombrados.

Al pasar valores a un script o función a través de parámetros nombrados, podemos usar el nombre de la variable como el nombre completo del parámetro.

sample.ps1:

param ([String]$name)
Write-Output $name

Luego podemos usar los parámetros nombrados al ejecutar un archivo .ps1.

powershell.exe .\sample.ps1 -name "John"

Usar valores predeterminados en un parámetro en PowerShell

Podemos pre-asignar un valor predeterminado a un parámetro dándole al parámetro un valor dentro del script.

Además, ejecutar el script sin pasar valores desde la línea de comandos tomará la variable predeterminada definida dentro del script.

param ([String]$name = "John")

Usar parámetros Switch en PowerShell

Podemos usar otro tipo de parámetro para nuestros scripts: el parámetro switch definido por el tipo de dato [switch].

Este parámetro se utiliza principalmente para valores binarios o booleanos que hemos discutido antes, indicando el valor de true o false.

param ([switch]$isEnabled)

–>

Usar los parámetros Obligatorios en PowerShell

Es común en algunos de nuestros casos de uso tener uno o más parámetros que deben ser utilizados cuando se ejecuta un script.

Podemos definir un parámetro obligatorio añadiendo un atributo Mandatory dentro del bloque de parámetros [Parameter()].

param (
    [Parameter(Mandatory)]
    [String] $servername
)

El entorno de scripting no permitirá que el script se ejecute a menos que se haya proporcionado un valor en la línea de comandos.

Usar un número desconocido de argumentos en PowerShell

Generalmente, encuentro que usar parámetros nombrados es muy superior a simplemente leer los argumentos desde la línea de comandos. Leer los argumentos es más fácil cuando se necesita manejar un número desconocido de argumentos.

Tomemos las letras de las unidades como un ejemplo. Quizás necesitamos un script para verificar una o más unidades en la máquina.

Entonces, podemos usar un parámetro nombrado y declararlo como un tipo de dato String.

checkdrives.ps1:

param([String]$myDrive)

foreach ($drive in $myDrive) {
    Write-Output "Processing drive $drive"
}

Sin embargo, al pasar múltiples letras de unidades en el argumento, PowerShell lo tratará como un solo objeto.

powershell .\checkdrives.ps1 -myDrive C, D, E

Salida:

Processing drive C D E

PowerShell reemplazará las comas con espacios y las tratará como una sola variable. Desafortunadamente, esto no funcionaría ya que necesitamos procesar las unidades de forma individual en nuestro caso de uso.

Para que nuestro intérprete capture múltiples parámetros bajo un solo argumento, necesitamos cambiar el tipo de dato a un arreglo con corchetes []. Luego, cuando se ejecute, PowerShell procesará los argumentos listados de manera individual.

checkdrives.ps1:

param([String[]]$myDrive)

foreach ($drive in $myDrive) {
    Write-Output "Processing drive $drive"
}

Código de ejemplo:

powershell .\checkdrives.ps1 -myDrive C, D, E

Recuerde separar los argumentos con una coma.

Salida:

Processing drive C
Processing drive D
Processing drive E

Usar los parámetros de la tubería en PowerShell

La mayoría de los cmdlets de PowerShell le permiten usar el símbolo de tubería | para pasar datos. Podemos aprovechar esto cuando se trata de parámetros.

Por ejemplo, podemos obtener el último valor almacenado en la tubería y pasarlo a otro archivo de PowerShell utilizando el atributo ValueFromPipeline del bloque de parámetros.

pipeline.ps1:

param([parameter(ValueFromPipeline)]$pipedVar)

Write-Output $pipedVar

Código de ejemplo:

"This string is from the pipeline." | .\pipeline.ps1

Salida:

This string is from the pipeline.

Hacer esta técnica abre muchas oportunidades para ejecutar archivos de PowerShell encadenados.