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

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


Source : Stack Overflow [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)