Windows PowerShell : Définition des paramètres

Il existe des méthodes simples et des méthodes complexes pour définir les paramètres dans Windows PowerShell. Les deux présentent leurs propres avantages.

Don Jones

Vous aurez souvent écrire un script ou une fonction qui doit accepter une sorte d'entrée. Cela pourrait être un nom d'ordinateur, un chemin de fichier ou quelque chose comme ça. Vous pouvez indiquer à Windows PowerShell à attendre de ces paramètres, les recueillir à partir de la ligne de commande et mettre leurs valeurs dans des variables au sein de votre script ou la fonction. Qui rend traitant d'entrée facile et efficace.

Vous devez juste savoir comment déclarer vos paramètres. Le moyen plus simple de faire est donc le bloc param :

Param(
  [string]$computerName,
  [string]$filePath
)

Vous n'avez pas à briser dans des lignes distinctes, comme je l'ai fait. Il est légal de le lancer tous ensemble sur une seule ligne. Je préfère l'enfoncer pour une lecture plus facile, bien que. Lorsqu'il est utilisé dans les premières lignes de code dans un fichier de script ou dans une fonction, Windows PowerShell lit ceci et sera même complet onglet paramètre noms lorsque quelqu'un s'exécute le script ou la fonction. J'ai été prudent d'utiliser les noms de paramètre : ils sont –computerName et –filePath ici. Elles sont similaires à celles d'autres applets de commande Windows PowerShell utilisent pour ce genre d'information. De cette façon, mes paramètres sont compatibles avec ce qui existe déjà dans la coquille.

Si j'ai mis cela dans un script appelé Get-Something.ps1, j'utiliserais les paramètres comme ceci :

./Get-Something –computerName SERVER1 –filePath C:\Whatever

Je pourrais aussi tronquer les noms de paramètres. Cela me permet de taper des caractères moins et ils continuent de travailler :

./Get-Something –comp SERVER1 –file C:\Whatever

Je pourrais même omettre les noms entièrement. Windows PowerShell automatiquement et par position accepte les valeurs. Ici, j'ai besoin d'être prudents fournir des valeurs dans le même ordre dans lequel les paramètres sont répertoriés dans mon fichier :

./Get-Something SERVER1 C:\Whatever

Bien sûr, en utilisant les noms de paramètres, la commande devient un peu plus facile pour une personne à découvrir. J'obtiens ensuite le luxe de mettre les paramètres dans un ordre quelconque, que je veux :

./Get-Something –filePath C:\Whatever –computerName SERVER1

Windows PowerShell fournit également un moyen plus complexe de déclarer les paramètres. Cette syntaxe plus véritable vous permet de définir les paramètres obligatoires, de spécifier une position (si vous ne faites pas, alors le paramètre ne peut être utilisé que par son nom) et bien plus encore. Cette syntaxe étendue est aussi juridique dans les scripts et les fonctions :

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$True,Position=1)]
   [string]$computerName,
	
   [Parameter(Mandatory=$True)]
   [string]$filePath
)

Encore une fois, vous pouvez exécuter tout ce que l'ensemble sur une seule ligne, mais il briser le rend un peu plus facile à lire. J'ai donné deux mes paramètres un [Parameter()] decorator et tous les deux définis comme obligatoires.

Si quelqu'un tente d'exécuter mon script et oublie un ou deux de ces paramètres, la coquille vous invite pour eux automatiquement. Il n'y a aucun travail supplémentaire de ma part nécessaire pour rendre cela possible. J'ai également défini –computerName comme étant en première position, mais –filePath doit être fourni par un nom.

Il y a certains autres avantages à l'utilisation de la directive [CmdletBinding()]. D'une part, il s'assure de mon script ou fonction aura tous les Windows PowerShell paramètres communs, y compris –Verbose et –Debug. Maintenant, je peux utiliser Write-Verbose et écriture-Debug dans mon script ou la fonction, et leur production est automatiquement supprimée.

Exécutez le script ou la fonction avec –Verbose ou –Debug et écriture-Verbose ou écriture-Debug (respectivement) sont magiquement activée. C'est une excellente façon de produire des informations de progression étape par étape (Write-Verbose) ou d'ajouter des points d'arrêt débogage (Write-Debug) dans vos scripts.

Comme ils sont actuellement rédigés, ces deux paramètres acceptera qu'une seule valeur. En tant que déclarant [string []] serait qu'ils acceptent un ensemble de valeurs. Vous serait alors cette énumérer à l'aide d'une boucle Foreach, afin que vous pourrait travailler avec une seule valeur à la fois.

Un autre type de paramètre soignée est [switch] :

Param([switch]$DoSomething)

Maintenant, je peux tourner mon script ou la fonction sans aucun paramètre de –DoSomething et à l'interne la variable DoSomething $ sera $False. Si je lance le script avec le paramètre –DoSomething, $DoSomething est défini sur $True. Il n'est pas nécessaire de passer une valeur pour le paramètre. Windows PowerShell il définit sur $True si vous incluez simplement elle. C'est le fonctionnement des paramètres de commutateur, tels que le paramètre –recurse de Get-ChildItem.

Gardez à l'esprit que chaque paramètre est sa propre entité, et elle est séparée du paramètre suivant par une virgule. Vous remarquerez que dans un exemple précédent :

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$True,Position=1)]
   [string]$computerName,
	
   [Parameter(Mandatory=$True)]
   [string]$filePath
)

Il le paramètre de la-ComputerName entière, y compris son décorateur [Parameter()], apparaît avant la virgule. La virgule indique je suis fait expliquer le premier paramètre et je suis prêt à passer à la prochaine. Tout associé de –filePath suit la virgule. Si j'avais besoin d'un troisième paramètre, je mettrais une autre virgule :

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$True,Position=1)]
   [string]$computerName,
	
   [Parameter(Mandatory=$True)]
   [string]$filePath,

   [switch]$DoSomething
)

Tout cela est contenu dans le bloc Param(). Notez que vous ne devez pas utiliser le décorateur [Parameter()] sur chaque paramètre. Seulement utiliser sur celles où vous avez besoin de déclarer quelque chose, comme le paramètre étant obligatoire, acceptant les entrées de pipeline, étant dans une certaine position et ainsi de suite. Exécutez about_functions_advanced_parameters aide dans Windows PowerShell pour plus d'informations sur d'autres attributs, que vous pouvez déclarer de cette façon.

Écriture de scripts qui acceptent des entrées uniquement via les paramètres et les fonctions, c'est une meilleure pratique. Il les rend plus autonomes, plus facile de document et plus compatible avec la façon dont le reste des œuvres des coquille.

Don Jones

Don Jones Microsoft MVP lauréat est un auteur de « Apprendre Windows PowerShell dans un mois de repas » (Manning Publications, 2011), un livre conçu pour aider un administrateur à devenir efficace avec Windows PowerShell. Jones offre également le publique et sur les lieux de formation Windows PowerShell. Communiquer avec lui par ConcentratedTech.com ou bit.ly/AskDon.

Contenu connexe