PowerShell : structure conditionnelle If, Else et ElseIf

I. Présentation

Dans ce tutoriel, je vous propose d'aborder la notion de structure conditionnelle en PowerShell et de voir les trois types d'instruction suivants : 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 mais aussi pour faciliter la compréhension.

Tutoriel disponible au format vidéo :

II. 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 ce n'est pas possible pour 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...

📢 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)
}

La partie "condition" va permettre de tester une ou plusieurs conditions. Dans le cas où la condition se vérifie, 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 tout 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 également à "IT-Connect" alors on écrit "Bienvenue !".

$texte = "IT-Connect"
If($texte -eq "IT-Connect") 
{ 
  Write-Output "Bienvenue !"
}

B. Condition If / Else en PowerShell

Maintenant, on va ajouter une condition supplémentaire à cette phrase : Si $texte est également à "IT-Connect" alors on écrit "Bienvenue !" sinon on écrit "Oups !". C'est là que l'instruction Else va intervenir...

$texte = "Microsoft"

If($texte -eq "IT-Connect") 
{ 
  Write-Output "Bienvenue !"
}else{
  Write-Output "Oups !"
}

C. Condition If / ElseIf / Else en PowerShell

Grâce à ce bloc, nous agissons seulement dans le cas où $texte est égal à "IT-Connect". Imaginons maintenant que l'on souhaite également gérer le cas où $texte est égal à "www.it-connect.fr".

Pour inclure ce second test de manière indépendant du premier, il est nécessaire d'utiliser l'instruction ElseIf puis de 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 : question de logique en fait.

L'instruction Else n'est pas obligatoire : on pourrait se contenter de If et ElseIf. 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. Double condition avec If et -or / -and

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.

Comme je suis cool, voici un exemple à base de -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

Jusqu'ici nous avons vu comment réaliser un test dans un If (ou ElseIf) en comparant deux valeurs grâce à un opérateur de comparaison. Il faut savoir que l'on peut inclure directement une commande dans une condition If.

Par exemple, si l'on veut tester la présence d'un processus, c'est-à-dire que le processus existe (qu'il est en cours d'exécution), on peut 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'existe pas.

Dans le même esprit, nous pourrions tester la présence d'un ficher via Test-Path. Voici un exemple avec le fichier "C:\Windows\System32\drivers\etc\hosts" :

If(Test-Path -Path "C:\Windows\System32\drivers\etc\hosts" -ErrorAction SilentlyContinue){
 Write-Output "Le fichier hosts existe !"
}

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 cet article, vous devriez être en mesure d'utiliser les structures conditionnelles dans vos scripts PowerShell.

Si vous avez une question, n'hésitez pas à laisser un commentaire, je pourrais ajouter des exemples en fonction de vos questions.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian B.

Consultant chez Délibérata le jour, blogueur pour IT-Connect la nuit, je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

florian has 2505 posts and counting.See all posts by florian

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.