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-
- Qu'est-ce que Shell Scripting?
- Commandes PowerShell
- Opérateurs PowerShell
- Utilisations de Powershell
- Guide de tableau dans PowerShell avec des exemples