skrypty mogą podejmować decyzje. Jak? Za pomocą koncepcji zwanej logiką warunkową. Instrukcja PowerShell if i konstrukcje if / else są powszechnymi sposobami definiowania warunków.
pisząc skrypty PowerShell, robisz to z myślą o konkretnym zadaniu lub zadaniach. Ale operacja może mieć więcej niż jedno możliwe działanie w oparciu o jeden lub więcej warunków. W tej sytuacji pojawia się konstrukcja PowerShell If-Else.,
w tym artykule dowiesz się, czym jest konstrukcja PowerShell If-Else, zrozumiesz jego składnię i jak działa. Na podstawie przykładów dowiesz się także, w jaki sposób można użyć PowerShell If-Else do dodania warunkowej obsługi logicznej w skryptach.
spis treści
zrozumienie składni PowerShell If-Else
konstrukcja PowerShell if-else oblicza co najmniej jedno wyrażenie warunkowe. Poniżej zobaczysz składnię instrukcji If. Ten styl jest czasami nazywany kontrolą przepływu.,
if (<test1>) {<statement list 1>}
jak widać z powyższej składni, każdy test jest zamknięty w nawiasie ()
. Testy mogą wykorzystywać różne operatory, takie jak operatory porównawcze i operatory logiczne,
listy instrukcji zawierają kod przeznaczony do uruchomienia, jeśli wynik testu zostanie oceniony na true.
w grupie instrukcji If są trzy możliwe polecenia. Są to stwierdzenia IF, ELSEIF i ELSE.,
-
if
instrukcja zawiera pierwszy test do oceny, a następnie pierwszą listę instrukcji zamkniętą w nawiasach klamrowych{}
.Instrukcja PowerShell if jest jedyną wymaganą instrukcją. - Instrukcja
elseif
jest miejscem, w którym można dodać warunki. Możesz dodać wiele poleceń ElseIf w przypadku wielu warunków. PowerShell oceni każdy z tych warunków kolejno. - oświadczenie
else
nie akceptuje żadnych warunków., Lista instrukcji w tej instrukcji zawiera kod do uruchomienia, jeśli wszystkie wcześniejsze Przetestowane warunki są fałszywe.
zrozumienie przepływu logicznego PowerShell If-Else
aby lepiej zrozumieć, jak działa PowerShell If-Else, musisz zapoznać się z jego przepływem logicznym. Poniższy diagram ilustruje podstawowy przepływ PowerShell If-Else.,
gdy instrukcja if jest uruchomiona, PowerShell jest uruchamiany przez każdy warunek oceniający, czy KOD Zwraca wartość true lub false. Podsumowanie zachowania znajduje się poniżej:
- PowerShell ocenia Warunek W teście 1.
- Jeśli wynik testu 1 zwróci true, zostanie uruchomiony kod znajdujący się na liście instrukcji If, a PowerShell zakończy działanie instrukcji If.,
- Jeśli wynik testu 1 zwróci false, PowerShell kontynuuje ocenę warunku (Test n) w następnej instrukcji ElseIf.
- Jeśli wynik testu N zwróci false, PowerShell kontynuuje ocenę warunku (Test n) w następnej instrukcji ElseIf, jeśli istnieje inna Instrukcja ElseIf-lub-
- Jeśli wynik testu N zwróci false, kod w instrukcji Else zostanie uruchomiony. Następnie PowerShell zakończy polecenie If-OR-
- Jeśli wynik testu N zwróci true, kod w instrukcji ElseIf zostanie uruchomiony. Następnie PowerShell zakończy polecenie If.,
używanie instrukcji PowerShell If-Else
następne sekcje to kilka przykładów użycia instrukcji PowerShell If-Else podczas pisania skryptów. Techniki, których się nauczysz, mogą pomóc ci w użyciu instrukcji If, jeśli napotkasz rzeczywistą sytuację, która wymaga jej użycia.
pojedynczy warunek If-Else
zaczynający się od najbardziej podstawowego jest pojedyncza Instrukcja If. Powinieneś użyć pojedynczej instrukcji if, gdy jest tylko jeden warunek do przetestowania.
poniższy przykład sprawdza, czy wartość zmiennej $num
jest większa niż 10., Jeżeli wynik jest true, wtedy na ekranie zostanie wyświetlony wynik "$num is greater than 10"
. Jeśli wynik jest fałszywy, PowerShell nie robi nic, ponieważ jest tylko jeden warunek do przetestowania.
$num = 11if ($num -gt 10) { "$num is greater than 10"}
wklejenie powyższego kodu do PowerShell da ci wynik pokazany poniżej.,
teraz, jeśli chcesz dodać domyślną akcję „fallback”, a nie tylko pozwolić PowerShell nic nie robić, gdy wynik testu jest fałszywy, można dodać instrukcję else.
w poniższym przykładzie kod w instrukcji Else zostanie uruchomiony, jeśli wartość zmiennej $num
nie jest większa niż 10.
$num = 9if ($num -gt 10){ "$num is greater than 10"}else{ "$num is NOT greater than 10"}
uruchomienie zmodyfikowanego kodu w PowerShell daje wynik pokazany poniżej.,
począwszy od PowerShell 7.0, Nowa składnia instrukcji If została wprowadzona przy użyciu operatora trójdzielnego. Pojedyncze polecenia If mogą dobrze wykorzystać tę nową składnię.
używając tego samego przykładu powyżej, tak wyglądałby kod z operatorem ternary.,
$num = 11$num -gt 10 ? "$num is greater than 10" : "$num is NOT greater than 10"
wiele warunków if-else z ElseIf
gdy istnieje wiele warunków do oceny, musisz dodać jedno lub więcej poleceń elseif. Każde polecenie ElseIf Zawiera wyrażenie test i własny kod do uruchomienia.,
poniższy skrypt, po wykonaniu, będzie wyświetlał monit o nazwę owocu, dopóki nie zostanie wydane naciśnięcie klawisza CTRL+C
lub użytkownik wprowadzi literę „X
„.
wtedy, Instrukcja If będzie przechodzić przez każdy warunek w kolejności, aż znajdzie dopasowanie. Jeśli Dane wejściowe nie spełniają żadnego z warunków, zostanie wykonany kod znajdujący się wewnątrz instrukcji Else.
poniżej znajduje się demonstracja zachowania powyższego skryptu podczas uruchamiania w PowerShell.,
raportowanie stanu wolnego miejsca na dysku
raportowanie wolnego miejsca na dysku jest jednym z zadań, które jest wspólne dla administratorzy systemu. Standardowy sposób raportowania informacji o przestrzeni dysków stacjonarnych na komputerze z systemem Windows obraca się wokół poniższego kodu.
Get-CimInstance -ClassName CIM_LogicalDisk | Where-Object {$_.DriveType -eq 3}
informacja, że powyższy kod zwróci wyglądałaby podobnie do tej pokazanej na następnym zrzucie ekranu.,
jak widać, powyższe wyjście pokazuje literę dysku i wartości wolnej przestrzeni, wraz z innymi właściwościami. Chociaż powyższe wyjście jest w porządku, nie jest intuicyjne. Sposób prezentacji informacji nie wskazuje, czy miejsce na dysku znajduje się w stanie krytycznym, ostrzegawczym czy normalnym.,
Korzystanie z instrukcji PowerShell If do poprawy kodu
korzystanie z instrukcji PowerShell If-Else, bardziej intuicyjne wyjście można osiągnąć poprzez dodanie warunków, aby sprawdzić, czy wolna przestrzeń jest powyżej lub poniżej określonych progów. I te progi będą określać stan wolnego miejsca na dysku.
poniższy przykładowy skrypt wykonuje następujące czynności:
- używając wartości zmiennej
$Critical
, określa próg, do którego procent wolnej przestrzeni będzie oznaczony jako krytyczny., - używając wartości zmiennej
$Warning
, zdefiniuj próg, do którego procent wolnego miejsca będzie oznaczony jako ostrzeżenie. - pobiera wszystkie stałe informacje o dysku z lokalnego komputera
- Przełącz wszystkie informacje o dysku, aby określić wolne miejsce i oznaczyć jego status.
- Jeśli procent wolnego miejsca jest większy niż wartość zmiennej
$Warning
, stan miejsca na dysku jest oznaczony jako normalny., - Jeśli procent wolnego miejsca jest większy niż wartość zmiennej
$Critical
, stan miejsca na dysku jest oznaczony jako ostrzeżenie. - Jeśli procent wolnego miejsca jest mniejszy lub równy wartości zmiennej
$Critical
, stan miejsca na dysku jest oznaczony jako krytyczny.
- Jeśli procent wolnego miejsca jest większy niż wartość zmiennej
- Skomponuj właściwości obiektu
'Drive Letter'
,'Drive Name'
,'Total Space (GB)'
,'Free Space (GB)'
,'Free Space (%)'
oraz'Status'
., - zwróć raport końcowy
skopiuj poniższy kod i zapisz skrypt o nazwie plikuGet-DiskSpace.ps1
. Nie zapomnij zmienić wartości zmiennych $Critical
I $Warning
, jeśli chcesz przetestować z różnymi progami.
Po zapisaniu skryptu przetestuj go, wywołując jego nazwę w PowerShell. Poniżej przykładowa demonstracja działania tego skryptu.,
jak widać na wyjściu, stan każdego dysku jest określony przez procent wolnego miejsca na dysku, który był wynikiem używania wielu warunków z PowerShell if-else.
wielokrotne i zagnieżdżone polecenie If-Else
Załóżmy, że masz instrukcję if-else z warunkiem zdefiniowanym w blokuelse
., Po uruchomieniu polecenia if-else, blok else
jest wywoływany, jeśli kod wewnątrz bloku if
zwróci false.
wewnątrz blokuelse
należy wykonać kolejny test warunkowy. W rezultacie potrzebne jest inne stwierdzenie If-Else. Ten scenariusz nazywa się zagnieżdżonym If-Else. Zagnieżdżona Instrukcja If-Else jest powszechnie używana, jeśli wewnętrzna Instrukcja If-Else zależy od wyniku operacji w zewnętrznej instrukcji If-Else.
używanie wielu i zagnieżdżonych poleceń If-Else może być dość mylące., Kluczowym punktem jest zapamiętanie położenia rusztowania i upewnienie się, że wciąłeś kod. Wcięcia kodu pomogą Ci łatwo rozpoznać i oddzielić instrukcje If-Else.
przykład wielu/zagnieżdżonych poleceń If-Else
poniższy przykładowy skrypt pokazuje, jak wiele i zagnieżdżone poleceń If-Else mogą być zależne od wyniku. Logika poniższego kodu jest następująca.
- Jeśli
$SendEmail
jest$false
, skrypt nie zrobi nic i zakończy działanie., - Jeśli
$SendEmail
to$true
, to$From
I$To
zmienne nie mogą być puste ani null. W przeciwnym razie$abortFlag
zostanie ustawione na 1. - Jeśli
$SendEmail
jest$true
I$CCEnabled
jest$true
, to$CC
zmienna nie może być pusta ani null. W przeciwnym razie$abortFlag
zostanie ustawione na 1., - Jeśli
$SendEmail
jest$true
I$BCCEnabled
jest$true
, to$BCC
zmienna nie może być pusta ani null. W przeciwnym razie$abortFlag
zostanie ustawione na 1. - Jeśli wartość
$abortFlag
wynosi 1, skrypt zakończy się w tym momencie i nie będzie kontynuowany. - Jeśli wartość
$abortFlag
wynosi 0, skrypt jest kontynuowany do końca.
skopiuj poniższy kod i zapisz go jako Send-MyMail.ps1
. Nie zmieniaj jeszcze żadnych wartości.,
Po zapisaniu pliku uruchom go w PowerShell, jak pokazano poniżej. Poniższa demonstracja pokazuje wynik skryptu, gdy wartości zmiennych pozostają niezmienione.
następnie zmodyfikuj skrypt i zaktualizuj wszystkie zmienne poprawnie, jak ten fragment poniżej.
Po edycji zmiennych Zapisz skrypt i uruchom go ponownie. Powinien pokazać ten sam wynik, jak widać poniżej.,
teraz zmodyfikuj zmienne i wypróbuj różne kombinacje, aby sprawdzić, jak zagnieżdżone If-Else będzie miało wpływ. Modyfikowanie i testowanie na własną rękę pomoże Ci zrozumieć logikę dalej.
podsumowanie
w tym artykule nauczyłeś się o warunkowej konstrukcji logicznej – konstrukcji PowerShell If-Else., Użycie instrukcji If-Else umożliwia skryptom formułowanie logiki warunkowej i kierowanie działaniami swoich skryptów na podstawie wyników testów.
korzystając z przykładów pokazanych w tym artykule, powinieneś nauczyć się sposobów i technik użycia instrukcji If-Else podczas tworzenia kodu opartego na decyzji. If-Else może być proste przy użyciu jednego warunku i staje się bardziej złożone podczas zagnieżdżania się instrukcji If-Else.
Co sądzisz o stwierdzeniu If-Else? Czy jest to coś, co myślisz, że będziesz używać coraz więcej po przeczytaniu tego artykułu?, Jakie inne cele możesz wymyślić, gdzie możesz zastosować zdobytą tutaj wiedzę?
Czytaj dalej
- o If
- powrót do podstaw: pętla PowerShell foreach