Introduction à S witch Case dans PowerShell

La fonction de commutation dans PowerShell est utilisée pour gérer plusieurs instructions If ou en d'autres termes, elle remplace plusieurs conditions If / Else If / Else. Pour vérifier une seule condition dans Script ou Function, vous pouvez utiliser l'instruction If / else mais si vous souhaitez évaluer davantage d'instructions IF, utilisez Switch.

Le commutateur est mieux comparé à plusieurs instructions If et facile à implémenter et à utiliser simplement pour le codage. Il y a plusieurs conditions sous chaque instruction et quand l'une d'elles satisfait alors l'action est exécutée.

Syntaxe:

Switch ()
(
(Action1)
(Action2)
)

Syntaxe complète:

Switch (-regex | -wildcard | -exact ) ( -casesensitive ) ( ) (
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)

OU

Switch (-regex | -wildcard | -exact ) ( -casesensitive ) -file (filename)(
"String" | Number | Variable | ( expression ) ( statementlist )
default ( statementlist )
)

Paramètres du boîtier de commutateur dans PowerShell

  • Regex : Il est également appelé expression régulière. Effectue la vérification de l'expression régulière par rapport à la valeur de la condition. Si vous utilisez Regex, WildCard et Exacts sont ignorés. De plus, si la clause de correspondance n'est pas une chaîne, ce paramètre est ignoré.
  • Caractère générique : indique que la condition est une chaîne générique. Si vous utilisez Wildcard, Regex et Exacts sont ignorés. De plus, si la clause de correspondance n'est pas une chaîne, ce paramètre est ignoré.
  • Exact : effectue la correspondance avec la chaîne exacte. Si vous utilisez Exact, Wildcard et Regex sont ignorés et si la clause de correspondance n'est pas une chaîne, ce paramètre est ignoré.
  • CaseSensitive: ce paramètre vérifie la condition qui correspond exactement à la valeur transmise (sensible à la casse) si elle ne correspond pas, alors ce paramètre est ignoré. Il a également besoin d'une valeur de chaîne.
  • Fichier : prend le chemin d'accès au fichier comme une valeur d'entrée plutôt qu'une valeur de chaîne. Si plusieurs paramètres de fichier sont transmis, il ne prend que le dernier. Chaque ligne du fichier est lue et évaluée par rapport à la condition et si la condition correspond alors elle exécute cette valeur ou affiche un message écrit.

Organigramme

Comment fonctionne le commutateur dans PowerShell?

Comme le montre le diagramme ci-dessus, chaque fois qu'une valeur (chaîne, entier, flottant ou autres types de données), tableau, caractères génériques, fichiers, etc. est transmise, il commence à faire correspondre les conditions une par une et lorsque la condition correspond, le script exécute ce bloc . Pour plusieurs valeurs correspondantes, plusieurs blocs de scripts seront exécutés et si aucune valeur correspondante n'est trouvée et si la condition par défaut est spécifiée, alors il exécute ce bloc sinon il y a une sortie nulle.

Exemples de boîtier de commutateur dans PowerShell

Voyons l'exemple donné:

Exemple 1

1. Fonction de commutation simple avec chaîne, valeur entière transmise.

Code:

switch (3) (
1 ("One")
2 ("Two")
3 ("Three")
)

Sortie: trois

Code:

switch("data")(
"abc"("Abc executed")
"xyz"("Xyz Executed")
"data"("Data Executed")
)

Sortie: données exécutées

Maintenant, que faire si le paramètre ne correspond pas à l'expression. Comme exemple donné ci-dessous, 5 ne correspond à aucun des cas Switch. Dans ce cas, la sortie sera nulle.

switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
)

Pour surmonter le problème ci-dessus, default doit spécifier et le bloc par défaut s'exécute lorsqu'aucun paramètre ne correspond.

switch (5) (
1 ("One")
2 ("Two")
3 ("Three")
default("No Match Found")
)

Sortie: aucune correspondance trouvée

Exemple # 2

Voyons l'exemple donné:

Différence entre if / else if / else et Switch. Dans l'exemple ci-dessous, vous pouvez comprendre comment il est facile d'écrire un script avec la fonction Switch.

$time = 3
if($time -eq 1)("It's 1 O'Clock")
elseif ($time -eq 2) ("It's 2 O'Clock")
elseif ($time -eq 3) ("It's 3 O'Clock")
else ("No Match Found")

$time = 3
switch ($time) (
1 ("It's 1 O'Clock")
2 ("It's 2 O'Clock")
3 ("It's 3 O'Clock")
default("No Match found")
)

Sortie: c'est 3 heures

Temps d'exécution pour les deux méthodes.

$time = 3
Measure-Command (
if($time -eq 1)("It's 1 O'Clock")
elseif ($time -eq 2) ("It's 2 O'Clock")
elseif ($time -eq 3) ("It's 3 O'Clock")
else ("No Match Found")
)

TotalMillisecondes: 39.1416

$time = 3
Measure-Command (
switch ($time) (
1 ("It's 1 O'Clock")
2 ("It's 2 O'Clock")
3 ("It's 3 O'Clock")
default("No Match found")
)
)

TotalMillisecondes: 25.6802

Différence: 13, 4614 millisecondes

Cette différence devient énorme lorsque vous écrivez un script ou des fonctions massifs à l'intérieur du commutateur.

1. Commutateur avec paramètre Regex

Si Regex est mentionné dans switch, il évalue l'expression avec la valeur transmise et si une partie de la condition correspond alors il exécute cette opération.

Considérez l'exemple ci-dessous.

Code:

Switch ("Donkey")(
"Dog" ("Dog is Mentioned")
"Cat" ("Cat is Mentioned")
"Don" ("Donkey is Mentioned")
"key" ("Donkey is mentioned again")
default ("Nothing is mentioned")
)

Sortie: rien n'est mentionné

Après avoir ajouté Regex.

Code:

Switch -Regex ("Donkey")(
"Dog" ("Dog is Mentioned")
"Cat" ("Cat is Mentioned")
"Don" ("Donkey is Mentioned")
"key" ("Donkey is mentioned again")
default ("Nothing is mentioned")
)

Sortie : l' âne est mentionné

L'âne est à nouveau mentionné

2. Commutateur avec paramètre générique

Le caractère générique fonctionne de manière similaire au paramètre Like.

Code:

$msg = "Error, WMI connection failed"
Switch -Wildcard ($msg) (
"Error*" ("WMI Error")
"Warning*" ("WMI Warning")
"Successful*" ("WMI Connection Successful")
)

Sortie: erreur WMI

3. Commutateur avec paramètre exact

La fonction exacte est par défaut dans Switch. Peu importe que vous l'utilisiez ou non. Mais lorsque vous utilisez deux paramètres en même temps, le dernier paramètre est prioritaire.

Code:

Switch -Regex -Exact ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)

Sortie: pas de monde

Code:

Switch -Exact -Regex ("Hello")(
"He" ("Hello World")
"Hi" ("Hi World")
Default ("No World")
)

Sortie: Hello World

4. Commutateur avec paramètre de fichier

Vous pouvez fournir un chemin de fichier directement au commutateur en tant que paramètre. Vous pouvez utiliser Fichier avec un chemin d'accès à un fichier au lieu de lui donner une expression variable.

Code:

Switch -Wildcard -File C:\temp\switchtest.txt (
"*Warning*"(Write-Warning $PSItem)
"*Error*"(Write-Error $PSItem)
)

Production:

Vous pouvez utiliser $ PSItem ou $ _ pour travailler avec les éléments actuels.

5. Commutateur avec paramètre CaseSensitive

Lorsque vous utilisez un paramètre sensible à la casse dans un commutateur, la condition doit correspondre exactement à chaque caractère.

Code:

switch -CaseSensitive ("Hello") (
"HeLlo" ("This is different HeLlo")
Default ("This is not Matching")
)

Sortie: cela ne correspond pas

6. Passer la valeur du tableau pour changer de fonction

Tableau simple:

switch (10, 12) (
9 ( "Nine" )
10 ( "Ten" )
11 ("Eleven")
12 ("Twelve")
Default ("None")
)

Production:

Dix

Douze

Passer un objet tableau

Code:

$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) (
"VM_Delete" ("VM Delete Operation")
"VM_Create" ("VM Create Operation")
"VM_Shutdown" ("VM Shutdown Operation")
)

Production:

Opération de suppression de machine virtuelle

Opération de création de machine virtuelle

7. Condition de rupture

Lorsque vous spécifiez une condition d'interruption, l'opération interrompt cette boucle et ne peut pas poursuivre l'exécution. C'est très utile lorsque vous ne voulez pas vérifier d'autres étapes lorsque la condition est satisfaite et que le temps d'exécution devient plus rapide.

Code:

$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) (
"VM_Delete" (
"VM Delete Operation"
break )
"VM_Create" (
"VM Create Operation"
break)
"VM_Shutdown" (
"VM Shutdown Operation"
break
)
)

Production:

Opération de suppression de machine virtuelle

Si vous remarquez, il n'y a qu'un seul bloc exécuté, puis il quitte la fonction de commutation.

8. Continuer la condition

Le paramètre Continue est utilisé pour ignorer l'itération particulière. Par exemple, s'il y a 3 éléments à faire correspondre, il s'exécute en premier et lorsque la condition correspond, il saute les autres étapes et passe à l'étape suivante.

Code:

switch ('Hello') (
"hello" ('First Block Executes'
continue)
'HELLO' ('Second Block Executes'
continue )
'HeLLo' ('Third Block Exectues'
continue )
Default ('Nothing executed')
)

Sortie: premier bloc exécuté

Comme vous pouvez le voir, il n'y a qu'un seul argument passé ('Bonjour'), ​​il exécute le premier bloc uniquement parce que l'expression correspond et qu'il n'y a plus d'autre argument à exécuter, le script se terminera.

  • Un autre exemple mixte de pause et de continuer avec Switch.

Code:

switch ('Alpha', 'Beta', 'Delta') (
"Alpha" ('First Block Executes'
continue)
'Beta' ('Second Block Executes'
break )
'Delta' ('This will not Execute')
)

Production:

Exécution du premier bloc

Exécution du deuxième bloc

Conclusion

Dans l'ensemble, Switch est bien meilleur que l'implémentation de plusieurs conditions If et offre plus de fonctionnalités et une réduction du temps d'exécution.

Articles recommandés

Cela a été un guide pour Switch Case dans PowerShell. Ici, nous discutons également de la syntaxe, des paramètres et des exemples de cas de commutateur dans Powershell. Vous pouvez également consulter les articles suivants pour en savoir plus-

  1. Qu'est-ce que Shell Scripting?
  2. Commandes PowerShell
  3. Opérateurs PowerShell
  4. Utilisations de Powershell
  5. Guide de tableau dans PowerShell avec des exemples

Catégorie: