about_If

Kort beskrivning

Beskriver ett språkkommando som du kan använda för att köra instruktionslistor baserat på resultatet av ett eller flera villkorsstyrda tester.

Lång beskrivning

Du kan använda If-instruktionen för att köra kodblock om ett angivet villkorstest utvärderas till sant. Du kan också ange en eller flera ytterligare villkorsstyrda tester som ska köras om alla tidigare tester utvärderas till false. Slutligen kan du ange ytterligare ett kodblock som körs om inget annat tidigare villkorstest utvärderas till sant.

Syntax

I följande exempel visas syntaxen för If-instruktionen:

if (<test1>)
    {<statement list 1>}
[elseif (<test2>)
    {<statement list 2>}]
[else
    {<statement list 3>}]

När du kör en If-instruktion utvärderar PowerShell <test1> villkorsuttryck som sant eller falskt. Om <test1> är sant körs <statement list 1> och PowerShell avslutar If-instruktionen. Om <test1> är falskt utvärderar PowerShell villkoret som anges av den <test2> villkorliga instruktionen.

Mer information om boolesk utvärdering finns i about_Booleans.

Om <test2> är sant körs <statement list 2> och PowerShell avslutar If-instruktionen. Om både <test1> och <test2> evaluate till false <statement list 3> körs kodblocket och PowerShell avslutar If -instruktionen.

Du kan använda flera Elseif-instruktioner för att länka en serie villkorliga tester. Så att varje test endast körs om alla tidigare tester är falska. Om du behöver skapa en If-instruktion som innehåller många Elseif-instruktioner bör du överväga att använda en Switch-instruktion i stället.

Exempel:

Den enklaste If instruktionen innehåller ett enda kommando och innehåller inga Elseif-satser eller några Else-instruktioner. I följande exempel visas den enklaste formen av If-instruktionen:

if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
}

I det här exemplet, om den $a variabeln är större än 2, utvärderas villkoret till true och instruktionslistan körs. Men om $a är mindre än eller lika med 2 eller inte är en befintlig variabel visas inget meddelande i If instruktionen.

Genom att lägga till en Else-instruktion visas ett meddelande när $a är mindre än eller lika med 2. Som nästa exempel visar:

if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
}
else {
    Write-Host ("The value $a is less than or equal to 2," +
        " is not created or is not initialized.")
}

Om du vill förfina det här exemplet ytterligare kan du använda -instruktionen Elseif för att visa ett meddelande när värdet för $a är lika med 2. Som nästa exempel visar:

if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
}
elseif ($a -eq 2) {
    Write-Host "The value $a is equal to 2."
}
else {
    Write-Host ("The value $a is less than 2 or" +
        " was not created or initialized.")
}

Använda operatorsyntaxen för ternary

PowerShell 7.0 introducerade en ny syntax med operatorn ternary. Den följer operatorsyntaxen för C# ternary:

<condition> ? <if-true> : <if-false>

Operatorn ternary fungerar som den förenklade if-else-instruktionen. Uttrycket <condition> utvärderas och resultatet konverteras till ett booleskt värde för att avgöra vilken gren som ska utvärderas härnäst:

  • Uttrycket <if-true> körs om <condition>-uttrycket är sant
  • Uttrycket <if-false> körs om <condition>-uttrycket är falskt

Till exempel:

$message = (Test-Path $path) ? "Path exists" : "Path not found"

I det här exemplet är värdet för $message "Sökväg finns" när Test-Path returnerar $true. När Test-Path returnerar $falseär värdet för $message "Sökvägen hittades inte".

$service = Get-Service BITS
$service.Status -eq 'Running' ? (Stop-Service $service) : (Start-Service $service)

I det här exemplet, om tjänsten körs, stoppas den och om dess status inte är Körs startas den.

Se även