¿Cómo pasar un argumento a un script de PowerShell?

Hay un script de PowerShell llamado itunesForward.ps1 que hace que iTunes avance rápidamente 30 segundos:

$iTunes = New-Object -ComObject iTunes.Application

if ($iTunes.playerstate -eq 1)
{
  $iTunes.PlayerPosition = $iTunes.PlayerPosition + 30
}

Se ejecuta con el comando prompt line:

powershell.exe itunesForward.ps1

¿Es posible pasar un argumento desde la línea de comandos y que se aplique en el script en lugar del valor de 30 segundos codificado?

Solución

Comprobado que funciona:

param([Int32]$step=30) #Must be the first statement in your script

$iTunes = New-Object -ComObject iTunes.Application

if ($iTunes.playerstate -eq 1)
{
  $iTunes.PlayerPosition = $iTunes.PlayerPosition + $step
}

Llámalo con

powershell.exe -file itunesForward.ps1 -step 15
Comentarios (13)

También puede utilizar la variable $args (que's como los parámetros de posición):

$step=$args[0]

$iTunes = New-Object -ComObject iTunes.Application

if ($iTunes.playerstate -eq 1)
{
  $iTunes.PlayerPosition = $iTunes.PlayerPosition + $step
}

entonces se puede llamar como:

powershell.exe -file itunersforward.ps1 15
Comentarios (4)

deja que Powershell analice y decida el tipo de datos
Internamente utiliza un 'Variant' para esto...
y generalmente hace un buen trabajo

param( $x )
$iTunes = New-Object -ComObject iTunes.Application
if ( $iTunes.playerstate -eq 1 ) 
    { $iTunes.PlayerPosition = $iTunes.PlayerPosition + $x }

o si necesita pasar varios parámetros

param( $x1, $x2 )
$iTunes = New-Object -ComObject iTunes.Application
if ( $iTunes.playerstate -eq 1 ) 
    { 
    $iTunes.PlayerPosition = $iTunes.PlayerPosition + $x1 
    $iTunes.  = $x2
    }
Comentarios (0)