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.)

image

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)

image

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.