Les fonctions sont courantes dans PowerShell et pour vraiment comprendre le langage PowerShell, il est important que vous sachiez comment fonctionnent les fonctions. Dans cet article, nous allons montrer comment une fonction PowerShell évolue de pratiquement rien jusqu’à avoir des paramètres utilisant des attributs de validation.
Pour le démontrer, commençons d’abord par une fonction qui ne peut pas être plus simple.
function Write-Log {
param()
}
Lorsqu’elle est exécutée à l’intérieur d’une session PowerShell, cette fonction s’exécutera mais ne fera rien car il n’y a pas de code à exécuter. PowerShell exécute simplement la fonction elle-même et retourne.
Pour que la fonction fasse réellement quelque chose, nous devons ajouter du code. Le code est ajouté entre le bloc param et la dernière accolade. Vous pouvez voir ci-dessous que je fais en sorte que ma fonction de journal d’écriture renvoie la chaîne « J’ai fait quelque chose » à la console.
function Write-Log {
param()
'I did something'
}
PS> Write-Log
I did something
Notre fonction s’appelle Write-Log, donc je suppose que ce sera une fonction qui finira par écrire une sorte de texte dans un fichier journal. Parce que nous ne voulons pas écrire la même chose dans un fichier journal à chaque fois, nous devons fournir un moyen de modifier le message lorsque la fonction s’exécute. Pour ce faire, nous allons ajouter un paramètre. Les paramètres permettent à l’utilisateur de transmettre différentes valeurs à la fonction au moment de l’exécution. Cela permet à la fonction de collecter des entrées dynamiques au moment de l’exécution.
Pour ajouter un paramètre, j’ajouterai une variable. Dans ce cas, la variable est appelée Message. Je vais l’ajouter à l’intérieur du bloc param comme indiqué ci-dessous. Vous pouvez alors voir que je peux référencer ce paramètre à l’intérieur de la fonction elle-même. Lors de son exécution, la fonction retournera la valeur que je transmets au paramètre Message.
function Write-Log {
param($Message)
$Message
}
PS> Write-Log -Message 'I did something'
I did something
Vous n’avez pas à vous arrêter à un seul paramètre. Nous pouvons en ajouter autant que nous le voulons ici. Ci-dessous, j’ajoute un paramètre de gravité, fournissant une valeur lorsque la fonction est exécutée et vous pouvez voir qu’elle présente le même comportement.
function Write-Log {
param($Message, $Severity)
"$Message - Severity: $Severity"
}
Write-Log -Message 'I did something' -Severity 1
Maintenant que nous savons comment gérer les paramètres, nous pouvons entrer dans les types de paramètres. Un paramètre a un type comme tout le reste dans PowerShell. Ci-dessus, il utilisait un type mais il acceptait tout type d’objet imaginable. Le paramètre n’a pas été explicitement tapé. C’est une bonne pratique de le faire sur tous les paramètres pour s’assurer que seules les valeurs attendues sont transmises.
Pour définir un type, nous pouvons ajouter le type entre crochets juste avant la déclaration du paramètre.
function Write-Log {
param($Message)
$Message
}
Une fois qu’un type explicite est affecté au paramètre, PowerShell n’acceptera que les entrées de ce type ou d’un objet qu’il peut convertir. Dans cet exemple ci-dessous, je passe la valeur booléennefalsefalse au paramètre Message. Vous pouvez voir que PowerShell ne le permettra pas. En effet, il ne peut pas convertir un type booléen en type ServiceController.
Cependant, si nous passons un objet ServiceController que Get-Service renvoie, cela fonctionne très bien.
PS> Write-Log -Message $service
Status Name DisplayName
------ ---- -----------
Stopped AdtAgent Microsoft Monitoring Agent Audit Fo...
Nous pouvons également utiliser des attributs de paramètres. Les attributs de paramètre nous permettent de définir différentes caractéristiques de chaque paramètre qui déterminent son fonctionnement. Dans l’exemple ci-dessous, j’utilise le paramètre obligatoire. Ces attributs obligent l’utilisateur à transmettre une valeur au paramètre Message sinon la fonction ne s’exécutera pas.
Je mets également une valeur par défaut sur le paramètre de gravité. Cela me permet de forcer la sévérité à toujours être 1 à moins qu’elle ne soit remplacée au moment de l’exécution en passant une valeur à ce paramètre.
function Write-Log {
param(
$Message,
$Severity = 1
)
"$Message - Severity: $Severity"
}
Enfin, nous pouvons utiliser les attributs de validation des paramètres. Les attributs de validation des paramètres sont un excellent moyen de restreindre les valeurs transmises à un paramètre. Dans l’exemple ci-dessous, j’utilise l’attribut de validation ValidateRange(). Cet attribut est utilisé sur des paramètres de type entier pour définir une plage de nombres autorisés. Dans cet exemple, j’autorise uniquement les valeurs de gravité à être de 1 à 5. Toute autre valeur ne se trouvant pas dans cette plage échouera.
function Write-Log {
param(
$Message,
$Severity
)
"$Message - Severity: $Severity"
}
Récapitulatif
Vous devriez maintenant avoir une compréhension de base du fonctionnement des fonctions dans PowerShell. Nous avons couvert tout ce que vous devez savoir pour commencer à créer des fonctions utiles dans PowerShell. Je vous encourage à commencer à remarquer des moments dans vos scripts où une fonction serait utile et à commencer à les construire. Vous verrez au fil du temps que votre code deviendra plus propre et beaucoup plus facile à lire.