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.
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
Puis, lançons notre script en passant les paramètres. Pour cela, deux possibilités :
%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à !
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?
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.
Une fois ceci fait, comment faire pour rendre un paramètre obligatoire? Pour cela, deux façons, avec deux différences importantes.
En ajoutant [parameter(Mandatory=$true)] avant de déclarer la variable, nous la rendons obligatoire.
Et lorsque nous lançons notre script en omettant les paramètres, nous obtenons ce message :
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.
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 :
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!