Сервісний центр VPSGroup ремонт комп'ютерної техніки, заправка картриджів, ремонт оргтехніки, Київ, Виставковий центр, Васильківська, 55

Використання оператора Switch в PowerShell.

Зазвичай для перевірки будь-якого умови в PowerShell використовується конструкція If - Else. Нагадаю, що оператор If призначений для перевірки умови і виконання певної дії, пов'язаного з цією умовою. Якщо задана умова дотримана, то виконуємо одну дію, якщо не дотримано - то інше.

В принципі в одному скрипті подібну перевірку можна виконувати необмежену кількість разів, однак якщо умов багато, то використання If стає кілька незручним.

Тому при великій кількості перевіряються умов краще застосовувати оператор Switch, який дозволяє об'єднувати список умов в одній інструкції.Switch черзі зіставляє перевіряється значення (value) з кожним заданим умовою (condition), і якщо знаходить збіг, то виконує дію (action), пов'язане з цією умовою. Синтаксис виглядає так:

Switch (value) {
condition 1 {action}
condition 2 {action}
condition n {action}}

як простий приклад візьмемо скрипт, в якому проводиться перевірка значення змінної $ a на відповідність одному з трьох значень.При збігу виводиться знайдене значення змінної:

$ a = 1
Switch ($ a) {
1 { "one"}
2 { "two"}
3 { "three"}}
Write-Host "switched"



Як видно з попереднього прикладу, дія проводиться тільки при збігу значень. Якщо ви хочете, щоб дія виконувалося і при відсутності збігів, то можна вказати ключове слово Default.В цьому випадку якщо жодна з умов не буде виконано, то буде вироблено дію за замовчуванням, вказане після Default. Наприклад:

$ a = 4
Switch ($ a) {
1 { "one"}
2 { "two"}
3 { " three "}
Default {" Out of range "; exit}
}
Write-Host "switched"



Може бути так, що в списку опиниться декілька однакових умов, як в наступному прикладі:

$ a = 1
switch ($ a) {
1 { "one"}
2 { "two"}
3 { "three"}
1 { "another one"}
DEFAULT { "Out of range"; exit}
}
Write-Host "switched"



Як бачите, в цьому випадку оператор Switch виконав обидві дії.Якщо значення змінної співпало з одним з умов і код виконався, обробка не переривається, а проводиться порівняння з наступним умовою і так далі. Уникнути цього можна за допомогою ключових слів Break і Continue.

Зазначене в кінці інструкції, Break наказує в разі збігу припинити подальший пошук і виконати вказану дію.Ключове слово Break означає, що обробка більше не виконується і оператор Switch завершує свою роботу.

$ a = 1
switch ($ a) {
1 { "one", break}
2 { "two"}
3 { "three"}
1 { "another one"}
DEFAULT { "Out of range"; exit}
}
Write-Host "switched"

Ключове слово Continue вказує, що обробка поточного умови завершена і не буде тривати, після чого почнеться пошук наступної умови.Тобто на відміну від Break, Continue завершує роботу Switch, а переходить до наступній умові:

$ a = 1
switch ($ a) {
1 { "one", continue}
2 { "two"}
3 { "three"}
1 { "another one"}
DEFAULT { "Out of range"; exit}
}
Write-Host "switched"

Switch дозволяє працювати не тільки з константами. Так як перевіряється значення можна вказати один вислів PowerShell, а замість умови - інше.Для прикладу перевіримо стан сервісу Spooler, і якщо він у вимкненому стані, то включимо його:

switch (Get-Service | where {$ _. Name -eq "spooler"}) {
{ $ _. status -eq "Running"} { "Service is running"}
{$ _. status -eq "Stopped"} { "Service is stopped, starting ..."; Start-Service spooler}
}



Ще оператор Switch має кілька додаткових параметрів, призначених для обробки рядків:

Exact - умова є рядком і має точно відповідати критерію;
Wildcard - умова є рядком, що містить групові символи;
Regex - умова містить регулярні вирази;
CaseSensitive - умова чутливе до регістру.Якщо умова не є рядком, то параметр ігнорується;
File - умова береться з файлу.

Для прикладу візьмемо текстовий файл з уривком з "Хоббіта", а в умови використовуємо групові символи. Умова спрацьовує при кожному знаходженні слів Hobbit і Baggins:

$ content = Get-Content C: \ Files \ Hobbit.txt
Switch -Wildcard ($ content) {
"* Hob *" { "Word Hobbit is found"}
"* Bagg *" { "Word Baggins is found"}
}



У статті я навів лише кілька простих прикладів. Насправді можливості Switch набагато ширше, особливо в поєднанні з регулярними виразами. Але це вже зовсім інша історія