Въведение в 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. Може да разгледате и следните статии, за да научите повече-
- Какво е скрипт на Shell?
- PowerShell Команди
- Оператори на PowerShell
- Използва се от Powershell
- Ръководство за масив в PowerShell с примери