web-dev-qa-db-fra.com

Comment passer un argument à un script PowerShell?

Il y a un script PowerShell nommé itunesForward.ps1 qui permet à iTunes de progresser rapidement de 30 secondes:

$iTunes = New-Object -ComObject iTunes.Application

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

Il est exécuté avec la commande Ligne de commande:

powershell.exe itunesForward.ps1

Est-il possible de passer un argument à partir de la ligne de commande et de le faire appliquer dans le script au lieu d'une valeur codée en dur de 30 secondes?

387
Boris Pavlović

Testé comme fonctionnant:

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
}

Appelez-le avec

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

Vous pouvez également utiliser la variable $args (comme les paramètres de position):

$step=$args[0]

$iTunes = New-Object -ComObject iTunes.Application

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

alors il peut être appelé comme:

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

laisser Powershell analyser et décider du type de données
Utilise en interne une 'variante' pour cette ...
et fait généralement du bon travail ...

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

ou si vous devez passer plusieurs paramètres

param( $x1, $x2 )
$iTunes = New-Object -ComObject iTunes.Application
if ( $iTunes.playerstate -eq 1 ) 
    { 
    $iTunes.PlayerPosition = $iTunes.PlayerPosition + $x1 
    $iTunes.<AnyProperty>  = $x2
    }
5
ZEE

Créez un script PowerShell avec le code suivant dans le fichier.

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

Cela crée un script avec un paramètre de chemin. Il listera tous les liens symboliques dans le chemin fourni ainsi que la cible spécifiée du lien symbolique.

2
JDennis

Vous pouvez également définir une variable directement dans la ligne de commande PowerShell, puis exécuter le script. La variable sera définie ici aussi. Cela m'a aidé dans un cas où je ne pouvais pas modifier un script signé.

Exemple:

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

avec iTunesForward.ps1 étant

$iTunes = New-Object -ComObject iTunes.Application

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