Comment gérer les arguments en ligne de commande dans PowerShell

Comment gérer les arguments en ligne de commande dans PowerShell

Vous réinventez la roue. Les scripts PowerShell normaux ont des paramètres commençant par -, comme script.ps1 -server http://devserver

Ensuite, vous les gérez dans une section param (notez que cela doit commencer à la première ligne non commentée de votre script).

Vous pouvez également assigner des valeurs par défaut à vos paramètres, les lire depuis la console s’ils ne sont pas disponibles, ou arrêter l’exécution du script :

 param (
    [string]$server = "http://defaultserver",
    [Parameter(Mandatory=$true)][string]$username,
    [string]$password = $( Read-Host "Input password, please" )
 )

À l’intérieur du script, vous pouvez simplement écrire

write-output $server

puisque tous les paramètres deviennent des variables disponibles dans la portée du script.

Dans cet exemple, $server reçoit une valeur par défaut si le script est appelé sans ce paramètre, le script s’arrête si vous omettez le paramètre -username et demande une saisie au terminal si -password est omis.

Mise à jour :
Vous voudrez peut-être aussi passer un “drapeau” (un paramètre booléen vrai/faux) à un script PowerShell. Par exemple, votre script peut accepter un paramètre “force” où le script s’exécute dans un mode plus prudent lorsque force n’est pas utilisé.

Le mot-clé pour cela est le type de paramètre [switch] :

 param (
    [string]$server = "http://defaultserver",
    [string]$password = $( Read-Host "Input password, please" ),
    [switch]$force = $false
 )

À l’intérieur du script, vous travailleriez avec comme ceci :

if ($force) {
  //deletes a file or does something "bad"
}

Maintenant, lors de l’appel du script, vous définissez le paramètre switch/drapeau comme ceci :

.\yourscript.ps1 -server "http://otherserver" -force

Si vous voulez explicitement indiquer que le drapeau n’est pas activé, il existe une syntaxe spéciale pour cela

.\yourscript.ps1 -server "http://otherserver" -force:$false

Liens vers la documentation Microsoft pertinente (pour PowerShell 5.0 ; les versions 3.0 et 4.0 sont également disponibles aux liens) :

(Réponse tronquée)