Въведение в S случай на вещици в PowerShell

Функцията за превключване в PowerShell се използва за обработка на множество If изявления или в други условия, това е заместване на множество условия If / Else If / Else. За да проверите едно условие в Script или Function, можете да използвате оператора If / else, но ако искате да оцените повече IF изрази, тогава използвайте Switch.

Превключването е по-добре в сравнение с множество If оператори и лесно за изпълнение и проста употреба за кодиране. Има множество условия при всяко твърдение и когато едно от тях удовлетворява, тогава действието се изпълнява.

Синтаксис:

Switch ()
(
(Action1)
(Action2)
)

Пълен синтаксис:

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

ИЛИ

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

Параметри на кутията на превключвателя в PowerShell

  • Regex : Нарича се още Regular Expression. Извършва проверката на регулярния израз спрямо стойността на условието. Ако използвате Regex, WildCard и Exacts се игнорират. Също така, ако клаузата за съвпадение не е низ, този параметър се игнорира.
  • Уайлдкард : Указва, че условието е низ. Ако използвате Wildcard, Regex и Exacts се игнорират. Също така, ако клаузата за съвпадение не е низ, този параметър се игнорира.
  • Точно : Изпълнява мача срещу точния низ. Ако използвате Exact, Wildcard и Regex се игнорират и ако клаузата за съвпадение не е низ, този параметър се игнорира.
  • CaseSensitive: Този параметър ще провери условието, което съвпада точно с предадената стойност (чувствителна към регистъра), ако не съвпада, тогава този параметър се игнорира. Тя също се нуждае от стойност на низ.
  • Файл : приема пътя към файла като входна стойност, а не като стойност на низ. Ако се предадат множество файлови параметри, той отнема само последния. Всеки ред на файла се чете и оценява спрямо условието и ако условието съвпада, то той изпълнява тази стойност или показва писмено съобщение.

Блок-схема

Как работи превключвателят в PowerShell?

Както е показано по-горе на диаграмата, когато всяка стойност (низ, цяло число, плаващ или други типове данни), масив, заместващи символи, файлове и др. Се предава, тогава тя започва да съвпада условията едно по едно и когато състоянието съвпада, скриптът изпълнява този блок, За множество съвпадащи стойности ще се изпълни множество скриптове и ако не е намерена съвпадна стойност и ако е зададено условие по подразбиране, той изпълнява този блок, в противен случай има нулев изход.

Примери за превключвател в PowerShell

Нека видим дадения пример:

Пример №1

1. Проста функция за превключване с преминат низ, цяло число.

Код:

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

Резултат: Три

Код:

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

Изход: Изпълнени данни

Какво ще стане, ако параметърът не съвпада с израза. Като пример, даден по-долу, 5 не съвпада с нито един от случаите на Switch. В този случай изходът ще бъде нулев.

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

За да се преодолее горният проблем, по подразбиране трябва да се посочи и блокът по подразбиране се изпълнява, когато никой от параметъра не съвпада.

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

Изход: Не е намерено съвпадение

Пример №2

Нека видим дадения пример:

Разлика между if / else if / else и Switch. От примера по-долу можете да разберете как е лесно да напишете скрипт с функцията 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")
)

Изход: Това е 3 O'Clock

Време за изпълнение и на двата метода.

$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")
)

Общо милисекунди: 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")
)
)

Общо милисекунди: 25.6802

Разлика: 13.4614 милисекунди

Тази разлика става огромна, когато пишете масивен скрипт или функции вътре в превключвателя.

1. Превключете с параметъра Regex

Ако Regex е споменат в превключвателя, той оценява израза с преминала стойност и ако част от условието съвпада, тогава той изпълнява тази операция.

Разгледайте примера по-долу.

Код:

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

Резултат: нищо не се споменава

След добавяне на Regex.

Код:

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

Изход : Магарето се споменава

Магарето се споменава отново

2. Превключете с параметър Wildcard

Wildcard работи подобно на параметъра Like.

Код:

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

Изход: WMI Грешка

3. Превключете с точен параметър

Точната функция е по подразбиране в Switch. Няма значение дали го използвате или не. Но когато използвате два параметъра едновременно, последният параметър има предимство.

Код:

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

Резултат: Няма свят

Код:

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

Резултат: Hello World

4. Превключете с параметър на файла

Можете да предоставите файлов път директно до Switch като параметър. Можете да използвате File с път към файл, вместо да му давате променлив израз.

Код:

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

изход:

Можете да използвате $ PSItem или $ _ за работа с текущи елементи.

5. Превключване с параметър CaseSensitive

Когато използвате параметър Casesensitive в превключвател, тогава условието трябва да съответства точно на всеки знак.

Код:

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

Резултат: Това не е съвпадение

6. Преминаване на стойността на масива за превключване на функция

Прост масив:

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

изход:

десет

дванадесет

Преминаване на обект от масив

Код:

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

изход:

VM операция за изтриване

VM Създаване на операция

7. Състояние на счупване

Когато посочите условие за прекъсване, операцията се прекъсва в този цикъл и не може да продължи по-нататъшното изпълнение. Това е доста полезно, когато не искате да проверявате по-нататъшни стъпки, когато условието удовлетворява и времето за изпълнение става по-бързо.

Код:

$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
)
)

изход:

VM операция за изтриване

Ако забележите, има само един блок, изпълнен и след това той излиза от функцията за превключване.

8. Продължете състоянието

Параметърът на продължение се използва за пропускане на конкретната итерация. Например, ако има 3 елемента, които трябва да съвпадат, тогава той ще се изпълни първо, а когато условието съвпада, тогава той ще пропусне други стъпки и ще премине към следващата стъпка.

Код:

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

Изход: Изпълнява се първият блок

Както можете да видите, че има само един аргумент, предаден ('Здравей'), той изпълнява първия блок само защото изразът съвпада и няма друг аргумент, който да се изпълни, скриптът ще приключи.

  • Още един смесен пример за почивка и продължаване с Switch.

Код:

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

изход:

Първият блок се изпълнява

Изпълнява се втори блок

заключение

Като цяло, Switch е далеч по-добър от прилагането на множество If условия и осигурява повече функционалност и намаляване на времето за изпълнение.

Препоръчителни статии

Това е ръководство за превключване на Case в PowerShell. Тук също обсъждаме синтаксиса, параметрите и примерите на случая на превключване в Powershell. Може да разгледате и следните статии, за да научите повече-

  1. Какво е скрипт на Shell?
  2. PowerShell Команди
  3. Оператори на PowerShell
  4. Използва се от Powershell
  5. Ръководство за масив в PowerShell с примери

Категория: