Pasar parámetros a un script de PowerShell
Puede pasar parámetros a un script de PowerShell de dos formas diferentes. (Si no conoce PowerShell, consulte la sugerencia, «` enlace: / windows-Introduction_to_PowerShell [Introducción a PowerShell] `».) Los parámetros se pueden pasar por posición o por nombre. Ambos son igualmente válidos, así que veamos cómo se hace cada uno.
Tengo un script de PowerShell llamado LookForFiles.ps1. Busca archivos en un directorio determinado y muestra los archivos que tienen un tamaño superior a 20K. En este momento, mi secuencia de comandos se ve así:
$files = Get-ChildItem C:\Temp foreach ($file in $files) { if ($file.length -gt 20000) { Write-Output $file } }
Como puede ver, el nombre de mi directorio (C: \ Temp) y el tamaño para verificar (20000) están codificados. En cambio, quiero pasar el nombre y el tamaño del directorio para que mi script sea más flexible.
Primero, cambiaré las cosas para pasar estos parámetros por posición, es decir, el primer parámetro será el directorio y el segundo parámetro será el tamaño. Mi nuevo guión se ve así:
$files = Get-ChildItem args[0] foreach ($file in $files) { if ($file.length -gt args[1]) { Write-Output $file } }
Ahora invoco mi script y observo el resultado: (Ver Figura 1.)
Figura 1. Pasando parámetros posicionales.
Observe que cuando invoco el script paso dos parámetros, a saber, «C: \ Temp» y «20000». Estos se completan en «$ args [0]» y «$ args [1]»
respectivamente para que el script se ejecute exactamente como antes. Ahora modifiquemos el script para que espere parámetros con nombre:
param([string] $dir = "C:\Temp", [int32] $size = 20000) $files = Get-ChildItem $dir foreach ($file in $files) { if ($file.length -gt $size) { Write-Output $file } }
Observe que eliminé las referencias a las variables «$ args». Tenga en cuenta también que la primera línea (extendida a la segunda línea) es un «param»
declaración. Esto le dice a PowerShell que espere parámetros con nombre. Esta declaración «param» debe ser la primera línea de su script. Define dos variables y las inicializa a valores predeterminados. Define la variable de cadena $ dir y la predetermina a «C: \ Temp» y define la variable int32 (numérica) $ size y la predetermina a 20000. Estos valores se inicializan con valores predeterminados de modo que si no se pasan parámetros cuando el se invoca el script, aún se ejecutará y utilizará esos valores.
En lugar de donde solía tener $ args [0] ahora tengo la variable $ dir y en lugar de donde solía tener $ args [1] ahora tengo la variable $ size. Invoquemos el script, especificando estos parámetros con nombre:
(Ver figura 2)
Figura 2. Pasando parámetros con nombre.
Ahora, cuando se invoca el script, especifico «-dir» seguido del directorio que me interesa, y especifico «-size» para indicar el tamaño que me interesa. Dado que estos son parámetros con nombre, puedo invertir su orden que «-size» se especifica primero y «-dir» se especifica en segundo lugar.
O puedo omitirlos por completo y se usarán los valores dentro del script.
Este consejo (2902) se aplica a Windows 7, 8 y 10.