it-swarm.com.de

Wie übergebe ich ein Argument an ein PowerShell-Skript?

Es gibt ein PowerShell Skript mit dem Namen itunesForward.ps1, mit dem iTunes 30 Sekunden vorspulen kann:

$iTunes = New-Object -ComObject iTunes.Application

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

Es wird mit dem Prompt-Befehl ausgeführt:

powershell.exe itunesForward.ps1

Ist es möglich, ein Argument über die Befehlszeile zu übergeben und es im Skript anstelle des fest codierten 30-Sekunden-Werts anzuwenden?

387
Boris Pavlović

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
}

Nennen Sie es mit

powershell.exe -file itunesForward.ps1 -step 15
543
Ocaso Protal

Sie können auch die Variable $args verwenden (das entspricht den Positionsparametern):

$step=$args[0]

$iTunes = New-Object -ComObject iTunes.Application

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

dann kann es heißen:

powershell.exe -file itunersforward.ps1 15
329
Emiliano Poggi

lassen Sie Powershell den Datentyp analysieren und entscheiden
Verwendet intern eine 'Variante' für diese ...
und macht im Allgemeinen einen guten Job ...

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.<AnyProperty>  = $x2
    }
5
ZEE

Erstellen Sie ein Powershell-Skript mit dem folgenden Code in der Datei.

param([string]$path)
Get-ChildItem $path | Where-Object {$_.LinkType -eq 'SymbolicLink'} | select name, target

Dadurch wird ein Skript mit einem Pfadparameter erstellt. Es werden alle symbolischen Links innerhalb des angegebenen Pfads sowie das angegebene Ziel des symbolischen Links aufgelistet.

2
JDennis

Sie können eine Variable auch direkt in der PowerShell-Befehlszeile definieren und dann das Skript ausführen. Dort wird auch die Variable definiert. Dies hat mir in einem Fall geholfen, in dem ich ein signiertes Skript nicht ändern konnte.

Beispiel:

 PS C:\temp> $stepsize = 30
 PS C:\temp> .\itunesForward.ps1

mit iTunesForward.ps1 zu sein

$iTunes = New-Object -ComObject iTunes.Application

if ($iTunes.playerstate -eq 1)
{
  $iTunes.PlayerPosition = $iTunes.PlayerPosition + $stepsize
}
2
Froggy