Comment gérer les arguments de ligne de commande en PowerShell
Quel est le "meilleur" moyen de gérer les arguments de ligne de commande?
Il semble comme il y a plusieurs réponses sur ce qu'est la "meilleure" façon est et en conséquence, je suis coincé sur la façon de gérer quelque chose d'aussi simple que:
script.ps1 /n name /d domain
ET
script.ps1 /d domain /n name.
Est-il un plugin qui permet de gérer ce mieux? Je sais que je suis en train de réinventer la roue ici.
Évidemment ce que j'ai déjà n'est pas joli et sûrement n'est pas le "meilleur", mais il fonctionne.. et c'est LAID.
for ( $i = 0; $i -lt $args.count; $i++ ) {
if ($args[ $i ] -eq "/n"){ $strName=$args[ $i+1 ]}
if ($args[ $i ] -eq "-n"){ $strName=$args[ $i+1 ]}
if ($args[ $i ] -eq "/d"){ $strDomain=$args[ $i+1 ]}
if ($args[ $i ] -eq "-d"){ $strDomain=$args[ $i+1 ]}
}
Write-Host $strName
Write-Host $strDomain
Vous devez vous connecter pour publier un commentaire.
Vous êtes en train de réinventer la roue. Normal scripts PowerShell ont des paramètres de départ avec
-
, commescript.ps1 -server http://devserver
Puis de les manipuler dans
param
section dans le début du fichier.Vous pouvez également affecter des valeurs par défaut pour votre params, de les lire à partir de la console en cas de non disponibilité ou d'arrêter l'exécution du script:
À l'intérieur du script, vous pouvez tout simplement
puisque tous les paramètres sont des variables disponibles dans le script portée.
Dans cet exemple, le
$server
obtient une valeur par défaut si le script est appelé sans elle, le script s'arrête si vous omettez le-username
paramètre et de la demande d'entrée de la borne si-password
est omis.Mise à jour:
Vous pourriez aussi bien souhaitez passer un "drapeau" (un booléen (true/false paramètre) pour un script PowerShell. Par exemple, votre script peut accepter une "force" où le script s'exécute dans une plus prudent mode lorsque la force n'est pas utilisée.
Le mot clé, c'est-à
[switch]
type de paramètre:Dans le script, alors vous pouvez travailler avec elle comme ceci:
Maintenant, lors de l'appel du script, vous définissez le commutateur/indicateur de paramètre comme ceci:
Si vous souhaitez explicitement à l'état du pavillon n'est pas défini, il y a une syntaxe particulière pour que
Liens vers des ressources utiles à la documentation de Microsoft (pour PowerShell 5.0; tho versions 3.0 et 4.0 sont également disponibles sur les liens):
[string]$username = $(throw "-username is required.")
il est la syntaxe pour les paramètres obligatoires:[Parameter(Mandatory=$true)][string]$username
. Voici plus d'infos sur la différence entre ces techniques: blogs.technet.com/b/heyscriptingguy/archive/2011/05/22/...-option
tag?Credential
type, qui prendra soin de cacher le mot de passe lors de la frappe et de les stocker en tant queSecureString
. (Je ne suis pas totalement vendu sur la valeur deSecureString
, mais au moins, il diminue le risque de tomber accidentellement imprimé dans la sortie.)