Hvordan sende et argument til et PowerShell-skript?

Det er et PowerShell-skript som heter itunesForward.ps1 som får iTunes til å spole 30 sekunder fremover:

$iTunes = New-Object -ComObject iTunes.Application

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

Det kjøres med ledetekstkommando:

powershell.exe itunesForward.ps1

Er det mulig å sende et argument fra kommandolinjen og få det brukt i skriptet i stedet for den hardkodede verdien på 30 sekunder?

Løsning

Testet som fungerende:

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
}

Ring det med

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

Du kan også bruke $args variabel (det er som posisjonsparametere):

$step=$args[0]

$iTunes = New-Object -ComObject iTunes.Application

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

så kan den kalles som:

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

la Powershell analysere og bestemme datatypen
Internt bruker en 'Variant' for dette...
og gjør generelt en god jobb...

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

eller hvis du trenger å sende flere parametere

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