Вступ до справи відьом 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, WildCard та Exacts ігноруються. Крім того, якщо пункт відповідності не є рядком, цей параметр ігнорується.
  • Підстановка : вказує на те, що умовою є рядок, що містить підстановку. Якщо ви використовуєте Wildcard, Regex та Exacts, вони ігноруються. Крім того, якщо пункт відповідності не є рядком, цей параметр ігнорується.
  • Точне : виконує збіг проти точного рядка. Якщо ви використовуєте Exact, Wildcard та Regex ігноруються, а якщо відповідне застереження не є рядком, цей параметр ігнорується.
  • CaseSensitive: Цей параметр перевірятиме умову, яка відповідає точно переданому Значенню (залежно від регістру), якщо воно не відповідає, то цей параметр ігнорується. Також потрібне значення рядка.
  • Файл : приймає шлях до файлу як вхідне значення, а не значення рядка. Якщо передано кілька параметрів файлу, він займає лише останній. Кожен рядок файлу читається та оцінюється відповідно до умови, і якщо умова відповідає, то він виконує це значення або відображає письмове повідомлення.

Блок-схема

Як працює комутатор у PowerShell?

Як показано на діаграмі вище, щоразу, коли будь-яке значення (рядок, Integer, float або інші типи даних), масив, макіяж, файли тощо передаються, то воно починає відповідати умовам по одному, і коли умова відповідає, сценарій виконує цей блок . Для кількох значень відповідності буде виконано кілька блоків скриптів, і якщо значення відповідності не знайдено, і якщо вказана умова за замовчуванням, то він виконує цей блок, інакше є нульовий вихід.

Приклади корпусу комутаторів в 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

Підстановка працює аналогічно параметру 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 -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. Що таке сценарій оболонки?
  2. Команди PowerShell
  3. Оператори PowerShell
  4. Використання Powershell
  5. Керівництво по масиву в PowerShell з прикладами

Категорія: