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) :
-
[about_Functions](https://technet.microsoft.com/
(Réponse tronquée)