Les structures conditionnelles : If, Else, ElseIf
Sommaire
I. Présentation
Dans ce chapitre, nous allons faire nos premiers pas avec les structures conditionnelles en PowerShell. Nous allons étudier les trois instructions suivantes : "If", "Else" et "ElseIf".
Mon objectif est de vous expliquer comment ça fonctionne et de vous fournir différents exemples que vous pourrez réutiliser dans vos scripts, et qui sont là aussi pour vous permettre de bien comprendre cette notion.
II. Qu'est-ce qu'une condition ?
Avant même d'évoquer la syntaxe des structures conditionnelles en PowerShell, ou de parler du premier exemple, commençons par répondre à une question toute simple : qu'est-ce qu'une condition ? Une condition, dans le contexte de la programmation, est une expression qui peut être évaluée pour donner soit vrai (true), soit faux (false).
Ces conditions sont le fondement même des structures conditionnelles comme "If", "Else" et "ElseIf" que nous allons étudier dans ce chapitre. En effet, elles permettent à votre script de prendre des décisions basées sur le résultat d'une ou plusieurs conditions. Par exemple, si une certaine condition est vraie, alors un certain bloc de code sera exécuté. Sinon, dans le cas contraire, un autre bloc de code sera exécuté.
De façon littéraire, et à titre d'exemple, voici ce que nous pouvons écrire :
Si (Il y a du soleil){ Je vais effectuer le trajet en moto } Sinon { Je vais effectuer le trajet en voiture }
Sur le même principe :
Si (La batterie de mon ordinateur est inférieure à 10%){ Je vais connecter le chargeur } Sinon ( Je vais continuer à travailler sur batterie)
Les conditions vont permettre d'évaluer la situation et de prendre une décision. En PowerShell, c'est comme dans la vie réelle : les conditions peuvent être aussi simples qu'une comparaison entre deux valeurs ou aussi complexes que nécessaire pour répondre à vos besoins spécifiques. L'objectif étant de parvenir à couvrir un maximum de situation et de besoin, afin que votre script réagisse de manière appropriée à différentes situations.
III. Syntaxe If, Else, ElseIf
Un bloc de structure conditionnelle commence toujours par une instruction "If" et elle sera éventuellement suivie par une ou plusieurs instructions "Else/ElseIf". Il peut également y avoir une instruction "If" seule, mais c'est impossible d'utiliser seules les instructions "Else" et "ElseIf".
En français, et afin de faciliter aussi la compréhension, on peut traduire ces trois instructions :
- If = Si...
- Else = Sinon...
- ElseIf = Sinon si...
Remarque : "If" et "ElseIf" peuvent inclure une ou plusieurs conditions, alors que "Else" n'accepte pas de condition (il s'applique lorsque toutes les conditions sont fausses).
A. Condition If en PowerShell
La syntaxe d'une structure conditionnelle "If" simple est la suivante :
If(condition) { # bloc de code : instructions à exécuter si la condition est vraie }
La partie "condition" va permettre de tester une ou plusieurs conditions. Dans le cas où la condition se vérifie (vraie), alors le bloc de code sera exécuté. Ce bloc de code peut contenir un autre If (conditions If imbriquées), une boucle d'un autre type ou toute autre commande : il n'y a pas de restriction à ce niveau-là.
Prenons un exemple, essayons de traduire en structure conditionnelle la phrase suivante :
Si $texte est égal à "IT-Connect" alors on écrit "Bienvenue !".
Ce qui donne :
$texte = "IT-Connect" If($texte -eq "IT-Connect") { Write-Output "Bienvenue !" }
Puisque notre variable est égale à "IT-Connect", alors le message "Bienvenue !" sera indiqué dans la console. Si nous modifions la valeur de la variable "$texte", alors ce ne sera plus le cas.
Nous pouvons essayer d'utiliser une condition If avec le cmdlet "Test-Path" dont l'objectif est de vérifier l'existence d'un élément (un fichier, par exemple).
Partons du principe que nous cherchons à vérifier l'existence du fichier "C:\Windows\System32\drivers\etc\hosts". Si le fichier existe, nous allons simplement retourner un message de confirmation (et uniquement dans ce cas).
If((Test-Path -Path "C:\Windows\System32\drivers\etc\hosts") -eq $True)
{
Write-Output "Le fichier existe sur l'ordinateur local"
}
La commande "Test-Path" retourne vrai (true) si le fichier existe, ou faux (false) si le fichier n'existe pas, donc nous devons vérifier que le résultat est "vrai", d'où l'utilisation de l'opérateur de comparaison d'égalité "-eq".
Mais, finalement, ce test est facultatif puisque le code sera exécuté seulement si la condition est vraie, et l'instruction "If" sera capable d'interpréter directement le résultat retourné par "Test-Path". Ainsi, dans le cas présent, nous pouvons écrire ceci :
If(Test-Path -Path "C:\Windows\System32\drivers\etc\hosts")
{
Write-Output "Le fichier existe sur l'ordinateur local"
}
B. Condition If / Else en PowerShell
Maintenant, nous allons ajouter une condition supplémentaire : "Else". Nous allons faire évoluer nos deux exemples précédents.
Tout d'abord, nous allons faire en sorte d'écrire un code correspondant à cette phrase :
Si $texte est également à "IT-Connect" alors on écrit "Bienvenue !" sinon on écrit "Oups !".
Ce qui va donner :
$texte = "Microsoft" If($texte -eq "IT-Connect") { Write-Output "Bienvenue !" } Else { Write-Output "Oups !" }
Puis, nous pouvons faire évoluer le second exemple sur le même principe : si le fichier n'existe pas, nous l'indiquons dans la console.
If(Test-Path -Path "C:\Windows\System32\drivers\etc\hosts")
{
Write-Output "Le fichier existe sur l'ordinateur local"
}
Else
{
Write-Output "Le fichier est introuvable !"
}
À chaque fois, il n'y aura qu'un bloc de code exécuté : c'est impossible que le code du "If" et du "Else" soit exécuté tous les deux. Ce sera obligatoirement l'un ou l'autre en fonction de l'évaluation de la condition.
C. Condition If / ElseIf / Else en PowerShell
Continuons à faire évoluer notre premier exemple. Actuellement, nous agissons seulement dans le cas où "$texte" est égal à "IT-Connect". Imaginons maintenant que nous souhaitons également gérer le cas où "$texte" est égal à "www.it-connect.fr".
Pour inclure ce second test de manière indépendante du premier, nous devons utiliser l'instruction "ElseIf" puis finir par "Else" pour gérer tous les autres cas.
Ce qui donne :
$texte = "www.it-connect.fr" If($texte -eq "IT-Connect") { Write-Output "Bienvenue !" } ElseIf($texte -eq "www.it-connect.fr") { Write-Output "Bienvenue sur www.it-connect.fr !" } Else { Write-Output "Oups !" }
Il est important de préciser que l'instruction "Else" doit toujours être la dernière si vous désirez inclure une ou plusieurs instructions "ElseIf".
L'instruction "Else" n'est pas obligatoire. Nous pouvons nous satisfaire de "If" et "ElseIf" (attention à l'impact éventuel sur le fonctionnement du script). Il suffit de supprimer l'instruction "Else" :
$texte = "www.it-connect.fr" If($texte -eq "IT-Connect") { Write-Output "Bienvenue !" } ElseIf($texte -eq "www.it-connect.fr") { Write-Output "Bienvenue sur www.it-connect.fr !" }
E. Conditions multiples
L'exemple précédent à base "If/ElseIf/Else" a l'avantage de permettre d'exécuter un bloc de code différent en fonction de si $texte = "IT-Connect" ou $texte = "www.it-connect.fr". Néanmoins, nous pourrions avoir besoin d'exécuter le même code que "$texte" soit égal à "IT-Connect" ou "www.it-connect.fr".
Ce n'est pas un problème ! Il suffit d'inclure deux conditions à tester dans l'instruction "If" à l'aide "-or" ("ou"). Ceci va permettre de tester si l'une des deux conditions est vraie. Si vous souhaitez que les deux soient vraies, vous devrez utiliser "-and" ("et") : tout en sachant que le mix des deux est possible.
Voici la syntaxe à utiliser (attention aux parenthèses) :
$texte = "www.it-connect.fr" If(($texte -eq "IT-Connect") -or ($texte -eq "www.it-connect.fr")) { Write-Output "Bienvenue !" } Else { Write-Output "Oups !" }
Voici un autre exemple avec "-and" où l'on va tester la valeur de deux variables.
$compteur1 = 10 $compteur2 = 20 If(($compteur1 -eq 10) -and ($compteur2 -eq 20)) { Write-Output "Les deux compteurs sont valides !" }
Il est à noter que l'opérateur "-eq" pour indiquer "égal" n'est pas le seul à pouvoir être utilisé dans une structure conditionnelle. Bien sûr, vous pouvez utiliser les autres opérateurs de comparaison : -ne, -gt, -ge, -lt, -le.... Ainsi que "-match" et "-like". Cette syntaxe est également possible dans un "ElseIf".
Pour finir, voici un exemple où nous allons utiliser les opérateurs de comparaison "-gt" et "-lt" :
$Compteur = 10 If($Compteur -gt 0) { "$Compteur est supérieur à 0" } ElseIf($Compteur -lt 0) { "$Compteur est un nombre négatif" }
F. Condition If avec un test basé sur une commande
Comme nous l'avons vu avec "Test-Path", un test dans un "If" (ou "ElseIf") n'intègre pas obligatoirement un opérateur de comparaison. En effet, nous pouvons inclure directement une commande dans une condition "If".
Par exemple, si nous voulons tester la présence d'un processus, c'est-à-dire que le processus existe (qu'il est en cours d'exécution), nous pouvons utiliser cette syntaxe :
If(Get-Process -Name "explorer" -ErrorAction SilentlyContinue)
{
Write-Output "Le processus explorer est en cours d'exécution !"
}
Le fait d'ajouter "-ErrorAction SilentlyContinue" permet d'éviter qu'un message d'erreur s'affiche dans la console dans le cas où le processus n'existerait pas.
IV. Conclusion
Nous venons de voir comment intégrer des tests conditionnels dans un script PowerShell grâce à "If-Else" et "If-ElseIf-Else". Grâce aux exemples de ce chapitre, vous devriez être en mesure d'utiliser les structures conditionnelles dans vos scripts PowerShell. En maîtrisant l'utilisation des conditions, vous pouvez créer des scripts PowerShell qui sont dynamiques, flexibles et capables de gérer une variété de scénarios.
Et si la condition est que la donnée doit être nulle ou qu’elle ne doit pas correspondre à une variable contenant plusieurs valeurs ?
$variable = internal,external
if (($toto -eq $null) -or ($toto -ne $variable)) , je viens de tester et snif ca ne marche pas, peut être une idée ?