Wie wird ein Argument an ein PowerShell-Skript übergeben?

Es gibt ein PowerShell-Skript namens itunesForward.ps1, das iTunes 30 Sekunden vorspulen lässt:

$iTunes = New-Object -ComObject iTunes.Application

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

Es wird mit einem Promptline-Befehl ausgeführt:

powershell.exe itunesForward.ps1

Ist es möglich, ein Argument aus der Befehlszeile zu übergeben, das im Skript anstelle des hartkodierten 30-Sekunden-Wertes angewendet wird?

Lösung

Als funktionierend getestet:

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
}

Aufruf mit

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

Sie können auch $args-Variable verwenden (das ist wie Positionsparameter):

$step=$args[0]

$iTunes = New-Object -ComObject iTunes.Application

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

dann kann es so aufgerufen werden:

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

Powershell den Datentyp analysieren und entscheiden lassen
Verwendet intern eine 'Variante' für dies...
und leistet im Allgemeinen gute Arbeit...

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

oder wenn Sie mehrere Parameter übergeben müssen

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