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 -instruktionen if
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 instruktionssyntaxen if
:
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 villkorsuttrycket <test1>
som sant eller falskt. Om <test1>
är sant, <statement list 1>
körs och PowerShell avslutar -instruktionen if
. Om <test1>
är falskt utvärderar PowerShell villkoret som anges av villkorssatsen <test2>
.
Mer information om boolesk utvärdering finns i about_Booleans.
Om <test2>
är sant, <statement list 2>
körs och PowerShell avslutar -instruktionen if
. Om både <test1>
och <test2>
utvärderas till false körs kodblocket <statement list 3
> och PowerShell avslutar -instruktionen if
.
Du kan använda flera elseif
instruktioner för att länka en serie villkorsstyrda tester. Varje test körs bara 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 elseif
inga instruktioner eller instruktioner else
. I följande exempel visas den enklaste formen av -instruktionen if
:
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
I det här exemplet, om variabeln $a
ä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, visar instruktionen if
inte ett meddelande.
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 $a
för är lika 2
med . 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 uttrycket<condition>
är sant - Uttrycket
<if-false>
körs om uttrycket<condition>
är falskt
Exempel:
$message = (Test-Path $path) ? "Path exists" : "Path not found"
I det här exemplet är Path exists
värdet $message
för när Test-Path
returnerar $true
. När Test-Path
returnerar $false
är Path not found
värdet $message
för .
$service = Get-Service BITS
$service.Status -eq 'Running' ? (Stop-Service $service) : (Start-Service $service)
Om tjänsten körs i det här exemplet stoppas den och om dess status inte är Körs startas den.
Om ett <condition>
- eller <if-true>
<if-false>
-uttryck anropar ett kommando måste du omsluta det med parenteser. Om du inte gör det genererar PowerShell ett argumentfel för kommandot i <condition>
uttrycket och parsar undantag för uttrycken <if-true>
och <if-false>
.
PowerShell genererar till exempel undantag för dessa ternaries:
Test-Path .vscode ? Write-Host 'exists' : Write-Host 'not found'
(Test-Path .vscode) ? Write-Host 'exists' : Write-Host 'not found'
(Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
Test-Path: A positional parameter cannot be found that accepts argument '?'.
ParserError:
Line |
1 | (Test-Path .vscode) ? Write-Host 'exists' : Write-Host 'not found'
| ~
| You must provide a value expression following the '?' operator.
ParserError:
Line |
1 | (Test-Path .vscode) ? (Write-Host 'exists') : Write-Host 'not found'
| ~
| You must provide a value expression following the ':' operator.
Och det här exemplet parsar:
(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists