Si les informations d'un script telles qu'un nom de serveur peuvent être inscrites "en dur" dans le code ou indiquées manuellement via un invité type Read-Host, il peut être utile de savoir comment les renseigner directement depuis un autre script en passant des arguments.

Comment faire?

Création simple de paramètres

Il suffit d'ajouter en début de script la commande Param() . Cette commande permet d'identifier la partie contenant les paramètres, et d'envoyer au script certaines données. Bien entendu, insérer juste Param() ne fera strictement rien, il faut renseigner quels sont les arguments qui doivent être captés, quels sont leur format, et bien sur s'ils sont obligatoires ou non.

Dans notre script (nommé scriptargs.ps1) , créons donc ces quelques lignes en début de script :

Syntaxe pour un paramètre

arguments%20scripts

Puis, lançons notre script en passant les paramètres. Pour cela, deux possibilités :

  • Depuis une console powershell : Nous n'avons qu'à invoquer le script ainsi (en supposant que nous sommes dans le même répertoire)
    scriptargs%20invoquer
  • Depuis une fenêtre "exécuter" (utile lorsque nous lançons un script en tâche planifiée par exemple)
    %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -file "C:\Users\admin\Documents\scriptargs.ps1" -argumentduscript "Powershell c'est vraiment sympa!"

    Note : La commande "noexit" empêche le script de se fermer en fin d’exécution afin de voir le voir le résultat. Pensez à l'enlever si vous lancez des tâches planifiées de cette manière.

Et le résultat sera là !

scriptsresultat

A noter que le nom de l'argument passé en commande doit être le même que celui de la variable. Si j'avais mis dans mon script en variable de paramètre [string]$toto il aurait fallu appeler l’exécution du script avec -toto. Création avancée de paramètres Tout d'abord, quelle est la syntaxe pour pouvoir ajouter plusieurs paramètres à un script?

paramerreur

Ici, une faute de syntaxe est détectée sur la ligne du deuxième argument. Tout simplement car pour définir la fin de l'argument et le début du suivant, il faut mettre une virgule, un peu comme quand on définit des variables dans un tableau.

paramok

Une fois ceci fait, comment faire pour rendre un paramètre obligatoire? Pour cela, deux façons, avec deux différences importantes.

La première : l'interactive.

En ajoutant [parameter(Mandatory=$true)] avant de déclarer la variable, nous la rendons obligatoire.

mandatory

Et lorsque nous lançons notre script en omettant les paramètres, nous obtenons ce message :

mandatory%20works

Le script nous demande gentiment d'ajouter ce qui lui apparaît obligatoire, et si nous validons sans rien dedans, un message d'erreur arrête le script en précisant que la chaîne est vide.

mandatory%20works%20error

La seconde : l'erreur brute

En déclarant nos paramètres nous enregistrons une valeur par défaut à une de nos variables qui correspond à un message d'erreur throw.

Throw : Le mot clé Throw provoque une erreur avec fin d'exécution. Vous pouvez utiliser le mot clé Throw pour arrêter le traitement d'une commande, d'une fonction ou d'un script.

La syntaxe est la suivante :

Param( [string]$argumentduscript=$(throw "Vous avez oublié de renseigner l'argument du script!"), [int]$chiffre )

Et le message d'erreur retourné lorsque l'on omet les paramètres :

argument%20script%20throw

Le script s'arrête net et n'attend aucune interaction de la part de l'utilisateur si ce n'est celle de corriger l'erreur lors de l'appel du script!

Ajouter un commentaire

Article précédent Article suivant