skript kan fatta beslut. Hur? Genom att använda ett koncept som kallas villkorlig logik. PowerShell if-uttalandet och if / else-konstruktionerna är de vanliga sätten att definiera villkor.
När du skriver PowerShell-skript gör du det med en specifik uppgift eller uppgifter i åtanke. Men en operation kan ha mer än en möjlig åtgärd baserad på ett eller flera villkor. Denna situation är där PowerShell If-Else-konstruktionen kommer in.,
i den här artikeln kommer du att lära dig vad PowerShell If-Else construct är, förstå dess syntax och hur det fungerar. Du kommer också att lära av exemplen några av de olika sätt som du kan använda PowerShell If-Else för att lägga till villkorlig logikhantering i dina skript.
Innehållsförteckning
förstå PowerShell If-Else Syntax
PowerShell if-else construct utvärderar ett eller flera villkorliga uttryck. Nedan ser du If-satsens syntax. Denna stil kallas ibland flödeskontroll.,
if (<test1>) {<statement list 1>}
som du kan se från syntaxen ovan är varje test inneslutet i en parentes ()
. Tester kan använda sig av olika operatörer som jämförelseoperatörer och logiska operatörer,
uttalandelistorna innehåller koden som är avsedd att köras om resultatet av testet utvärderar till Sant.
då finns det tre möjliga uttalanden i en If-grupp. Det här är IF, ELSEIF, och andra uttalanden.,
-
if
uttalande innehåller det första testet för att utvärdera, följt av den första uttalande listan inneslutna i lockigt fästen{}
.PowerShell om uttalande är det enda uttalande som krävs för att vara närvarande. -
elseif
– satsen är där du lägger till villkor. Du kan lägga till flera ElseIf uttalanden när du flera villkor. PowerShell kommer att utvärdera var och en av dessa villkor sekventiellt. -
else
– uttalandet accepterar inte något villkor., Satslistan i detta uttalande innehåller koden som ska köras om alla tidigare testade förhållanden är falska.
förstå PowerShell If-Else Logic Flow
för att ytterligare förstå hur PowerShell If-Else fungerar måste du bekanta dig med dess logiska flöde. Diagrammet nedan illustrerar det grundläggande flödet av PowerShell If-Else.,
När if-uttalandet körs går PowerShell igenom varje villkor som utvärderar om koden returnerar sant eller falskt. En sammanfattning av beteendet är nedan:
- PowerShell utvärderar tillståndet i Test 1.
- om resultatet av Test 1 returnerar sant kommer koden i If-satslistan att köras och PowerShell avslutar If-satsen.,
- Om resultatet av Test 1 returnerar falskt fortsätter PowerShell att utvärdera tillståndet (Test n) i nästa ElseIf-uttalande.
- Om resultatet av Test n returnerar falskt fortsätter PowerShell att utvärdera tillståndet (Test n)i nästa ElseIf-uttalande, om ett annat ElseIf-uttalande finns-eller –
- om resultatet av Test n returnerar FALSKT körs koden i else-satsen. Då kommer PowerShell att avsluta If-satsen-eller –
- om resultatet av Test n returnerar sant körs koden i ElseIf-satsen. Då kommer PowerShell att avsluta If-uttalandet.,
använda Powershell If-Else-satsen
nästa avsnitt är flera exempel på hur du använder PowerShell If-Else-satsen när du skriver skript. De tekniker du lär dig kan vägleda dig att använda If-uttalandet om du stöter på en verklig situation som kräver dess användning.
Single If-Else Condition
Från och med den mest grundläggande är single If-satsen. Du bör använda ett enda if-uttalande när det bara finns ett villkor att testa.
exemplet nedan testar om värdet för variabeln$num
är större än 10., Om resultatet är sant visas resultatet som säger "$num is greater than 10"
på skärmen. Om resultatet är falskt, gör PowerShell ingenting eftersom det bara finns ett villkor att testa.
$num = 11if ($num -gt 10) { "$num is greater than 10"}
klistra in koden ovan i PowerShell ger dig resultatet som visas nedan.,
Nu, om du vill lägga till en standard ”fallback” – åtgärd snarare än att bara låta PowerShell göra ingenting när testresultatet är falskt, kan du lägga till else-uttalandet.
i exemplet nedan körs koden i else-satsen om värdet för variabeln$num
inte är större än 10.
$num = 9if ($num -gt 10){ "$num is greater than 10"}else{ "$num is NOT greater than 10"}
Om du kör den ändrade koden i PowerShell får du den utgång som visas nedan.,
Från och med PowerShell 7.0 har en ny syntax för if-uttalandet införts med en ternär operatör. Single If uttalanden kan göra god användning av denna nya syntax.
med samma exempel ovan ser koden ut så här med den ternära operatören.,
$num = 11$num -gt 10 ? "$num is greater than 10" : "$num is NOT greater than 10"
Multiple If-Else Conditions with ElseIf
När det finns flera villkor för att utvärdera, du måste lägga till en eller flera ElseIf uttalanden. Varje ElseIf-uttalande innehåller testuttrycket och dess egen kod att köra.,
skriptet nedan, när det körs, kommer att fortsätta att fråga efter ett fruktnamn tills CTRL+C
tangenttryckning utfärdas, eller användaren matar in bokstaven ”X
”.
då kommer If-satsen att gå igenom varje tillstånd i följd tills den hittar en matchning. Om inmatningen inte matchade något av villkoren skulle koden i else-uttalandet utföras.
nedan visas hur skriptet ovan beter sig när det körs i PowerShell.,
rapportering av ledigt diskutrymme Status
rapportering av ledigt diskutrymme är en uppgift som är gemensam för systemadministratörer. Det vanliga sättet att rapportera rymdinformationen för fasta diskar på en Windows-dator kretsar kring koden nedan.
Get-CimInstance -ClassName CIM_LogicalDisk | Where-Object {$_.DriveType -eq 3}
den information som koden ovan kommer att returnera skulle se ut som den som visas i nästa skärmdump.,
som du kan se visar utmatningen ovan enhetsbeteckningen och de fria utrymmesvärdena tillsammans med andra egenskaper. Medan utgången ovan är bra är det inte intuitivt. Hur informationen presenteras indikerar inte om diskutrymmet är i ett kritiskt eller varningsläge eller normalt.,
använda ett PowerShell If-uttalande för att förbättra koden
med PowerShell If-Else-uttalandet kan en mer intuitiv utgång uppnås genom att lägga till villkor för att kontrollera om ledigt utrymme är över eller under vissa tröskelvärden. Och dessa tröskelvärden definierar statusen för ledigt diskutrymme.
exempelskriptet nedan utför följande:
- med hjälp av värdet på variabeln
$Critical
definierar du tröskeln till vilken procentandelen ledigt utrymme kommer att märkas som kritisk., - med hjälp av värdet på variabeln
$Warning
definierar du tröskeln till vilken procentandelen ledigt utrymme kommer att märkas som varning. - få all fast diskinformation från den lokala datorn
- bläddra igenom all diskinformation för att bestämma ledigt utrymme och märka dess status.
- om procentandelen ledigt utrymme är högre än värdet för variabeln
$Warning
är statusen för diskutrymme taggad som normal., - om procentandelen ledigt utrymme är högre än värdet för variabeln
$Critical
taggas statusen diskutrymme som varning. - om procentandelen fritt utrymme är mindre än eller lika med värdet för variabeln
$Critical
är statusen för diskutrymme taggad som kritisk.
- om procentandelen ledigt utrymme är högre än värdet för variabeln
- komponera objektegenskaperna
'Drive Letter'
,'Drive Name'
,'Total Space (GB)'
,'Free Space (GB)'
,'Free Space (%)'
och'Status'
., - returnera slutrapporten
kopiera koden nedan och spara skriptet med filnamnetGet-DiskSpace.ps1
. Glöm inte att ändra värdena för variablerna$Critical
och$Warning
om du vill testa med olika tröskelvärden.
När skriptet har sparats, testa det genom att ringa sitt namn i PowerShell. Nedan är provdemonstrationen av hur det här skriptet fungerar.,
som du kan se från utgången bestäms statusen för varje disk av den fria diskutrymme, vilket var resultatet av att använda flera villkor med PowerShell If-Else.
Multiple and Nested If-Else
låt oss säga att du har ett if-else-uttalande med ett villkor som definieras ielse
– blocket., När if-else-satsen körs anropas else
– blocket om koden inuti if
– blocket returnerar FALSKT.
inutielse
– blocket måste du utföra ett annat villkorligt test. Som ett resultat behöver du ett annat If-Else-uttalande. Detta scenario kallas en kapslad If-Else. Det kapslade If-Else-uttalandet används ofta om det inre If-Else beror på resultatet av operationen i det yttre If-Else.
använda flera och kapslade If-Else uttalanden kan vara ganska förvirrande., Den viktigaste punkten är att komma ihåg ställningen placering och se till att du indrag din kod. Indragning av din kod hjälper dig att enkelt känna igen och skilja dina If-Else-uttalanden.
exempel på flera/kapslade if-Else-satser
exemplet nedan visar hur flera och kapslade If-Else kan vara beroende av resultatet av varandra. Logiken i koden nedan är som följer.
- Om
$SendEmail
är$false
, kommer skriptet att göra ingenting och avsluta., - Om
$SendEmail
är$true
, får variablerna$From
och$To
inte vara tomma eller null. Annars kommer$abortFlag
att ställas in på 1. - Om
$SendEmail
är$true
och$CCEnabled
är$true
, får variabeln$CC
inte vara tom eller null. Annars kommer$abortFlag
att ställas in på 1., - Om
$SendEmail
är$true
och$BCCEnabled
är$true
, får variabeln$BCC
inte vara tom eller null. Annars kommer$abortFlag
att ställas in på 1. - om värdet
$abortFlag
är 1, avslutas skriptet vid denna tidpunkt och fortsätter inte. - om värdet
$abortFlag
är 0 fortsätter skriptet till slutet.
kopiera koden nedan och spara den somSend-MyMail.ps1
. Ändra inte några värden ännu.,
När du har sparat filen, kör den i PowerShell som visas nedan. Demonstrationen nedan visar resultatet av skriptet när variabelvärdena går oförändrade.
därefter redigerar du skriptet och uppdaterar alla variabler korrekt som det här snippet nedan.
Efter att ha redigerat variablerna, spara skriptet och kör det igen. Det ska visa dig samma resultat, som framgår nedan.,
ändra nu variablerna och prova olika kombinationer för att testa hur kapslade If-Else kommer att påverkas. Modifiera och testa på egen hand skulle hjälpa dig att förstå logiken ytterligare.
sammanfattning
i den här artikeln lärde du dig om den villkorliga logikkonstruktionen – PowerShell If-Else-konstruktionen., Med If-Else-satsen kan skrifterna formulera villkorlig logik och styra sina skripts åtgärder baserat på testresultat.
med exemplen som visas i den här artikeln borde du ha lärt dig sätt och tekniker för hur du använder If-Else-satsen när du skapar en beslutsdriven kod. If-Else kan vara enkelt med ett enda tillstånd och blir mer komplex medan du gräver djupare in i de kapslade If-Else-uttalandena.
vad tycker du om If-Else-uttalandet? Är detta något som du tror att du skulle använda mer och mer efter att ha läst den här artikeln?, Vilka andra syften kan du tänka på var du kan tillämpa den kunskap du har förvärvat här?
Ytterligare läsning
- Om Om
- tillbaka till grunderna: PowerShell foreach Loop