Detta avsnitt är en introduktion till villkorssatser i PowerShell.
Här går vi igenom grundläggande begrepp som du behöver förstå innan du börjar arbeta med de olika typerna av villkorssatser – till exempel hur kodblock fungerar och hur du skriver kommandon över flera rader.
Villkorssatser används för att styra programflödet – alltså för att avgöra vilken kod som ska köras beroende på om ett visst villkor är sant eller falskt. Med andra ord låter villkorssatser PowerShell fatta beslut baserat på givna kriterier:
”Om detta stämmer – gör så här, annars – gör något annat.”
De två vanligaste typerna av villkorssatser i PowerShell är if och switch, men i det här inledande avsnittet fokuserar vi på de gemensamma grunderna som båda bygger på.
Begreppet kodblock
Ett kodblock är ett stycke kod som omges av klammer parenteser { … }.
PowerShell betraktar allt som står mellan { och } som ett sammanhängande block, oavsett om det innehåller en eller flera rader kod.
Kodblock används ofta i bland annat if-, foreach-, och switch-satser, men principen är densamma: hela blocket körs endast när dess villkor uppfylls.
Exempel på ett kodblock ned flera rader:
if ($x -gt 10) {
Write-Output "The value is greater than 10"
Write-Output "This is another line in the same code block"
}
Här utgör båda Write-Output-raderna ett kodblock, som bara körs om villkoret $x -gt 10 är sant.
Skriva kod på flera rader
När du arbetar i PowerShell-terminalen kan både kommandon och kodblock sträcka sig över flera rader.
Om PowerShell upptäcker att ett kommando ännu inte är avslutat – till exempel när du har öppnat en klammerparentes { eller använt en operator som pipeline | eller backtick ` – visar terminalen prompten >>. Den markerar att du fortfarande befinner dig mitt i samma kommando.
Observera att du ska inte själv skriva >>. PowerShell visar den automatiskt när du trycker Enter innan kommandot är färdigt.
Exempel 1 – nej avslutad kodblock
PS C:\> if ($x -gt 5) {
>> Write-Host "Greater than 5"
>> }
- I det här exemplet ser PowerShell att du har öppnat ett kodblock med { efter if-satsen.
Terminalen visar därför prompten >> för att markera att kommandot inte är färdigt ännu. - Du skriver sedan raden: Write-Host ”Greater than 5” och trycker Enter. Eftersom blocket fortfarande är öppet, fortsätter PowerShell att visa >>.
- Först när du avslutar blocket genom att skriva } anser PowerShell att kommandot är komplett och kör hela satsen.
Exempel 2 – långt kommando med pipeline
PS C:\> Get-Process | >> Sort-Object CPU | >> Select-Object -First 5
- I det här exemplet avslutas varje rad med en pipeline (|), vilket betyder att utdata från ett kommando skickas vidare till nästa.
- PowerShell förstår att kommandot inte är färdigt ännu och visar därför prompten >> automatiskt när du trycker Enter.
- När den sista raden har skrivits in utan en avslutande pipeline, kör PowerShell hela kommando och visar resultatet.
Exempel 3 – radbrytning med backtick
PS C:\> Get-Service `
>> | Where-Object {$_.Status -eq "Running"} `
>> | Sort-Object DisplayName
- Här används backtick-tecknet (`) i slutet av raden för att tala om för PowerShell att kommandot fortsätter på nästa rad.
Detta är ett medvetet sätt att bryta upp långa rader i skript för att göra dem mer läsbara. - Precis som i tidigare exempel visar PowerShell prompten >> automatiskt på varje ny rad tills hela kommandot är färdigt och kan köras.
- Observera att i den sista delen används inte backticket.