about_If
Korte beschrijving
Beschrijft een taalopdracht die u kunt gebruiken om instructielijsten uit te voeren op basis van de resultaten van een of meer voorwaardelijke tests.
Lange beschrijving
U kunt de if
instructie gebruiken om codeblokken uit te voeren als een opgegeven voorwaardelijke test waar oplevert. U kunt ook een of meer aanvullende voorwaardelijke tests opgeven die moeten worden uitgevoerd als alle eerdere tests onwaar zijn. Ten slotte kunt u een extra codeblok opgeven dat wordt uitgevoerd als geen enkele andere voorwaardelijke test waar oplevert.
Syntax
In het volgende voorbeeld ziet u de syntaxis van de if
instructie:
if (<test1>)
{<statement list 1>}
[elseif (<test2>)
{<statement list 2>}]
[else
{<statement list 3>}]
Wanneer u een if
-instructie uitvoert, evalueert PowerShell de <test1>
voorwaardelijke expressie als waar of onwaar. Als <test1>
waar is, <statement list 1>
wordt uitgevoerd en wordt de if
instructie afgesloten door PowerShell. Als <test1>
onwaar is, evalueert PowerShell de voorwaarde die is opgegeven door de <test2>
voorwaardelijke instructie.
Zie about_Booleans voor meer informatie over booleaanse evaluatie.
Als <test2>
waar is, <statement list 2>
wordt uitgevoerd en wordt de if
instructie afgesloten door PowerShell. Als beide <test1>
en <test2>
onwaar zijn, wordt het <statement list 3
> codeblok uitgevoerd en sluit PowerShell de if
-instructie af.
U kunt meerdere elseif
instructies gebruiken om een reeks voorwaardelijke tests te koppelen. Elke test wordt alleen uitgevoerd als alle vorige tests onwaar zijn. Als u een if
instructie wilt maken die veel elseif
instructies bevat, kunt u in plaats daarvan een Switch-instructie gebruiken.
Voorbeelden:
De eenvoudigste if
instructie bevat één opdracht en bevat elseif
geen instructies of instructies else
. In het volgende voorbeeld ziet u de eenvoudigste vorm van de if
instructie:
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
Als in dit voorbeeld de $a
variabele groter is dan 2
, wordt de voorwaarde geëvalueerd als true en wordt de instructielijst uitgevoerd. Als $a
echter kleiner is dan of gelijk is aan 2
of geen bestaande variabele is, wordt er geen bericht weergegeven in de if
instructie.
Als u een Else-instructie toevoegt, wordt een bericht weergegeven wanneer $a kleiner is dan of gelijk is aan 2. Zoals in het volgende voorbeeld wordt weergegeven:
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.")
}
Als u dit voorbeeld verder wilt verfijnen, kunt u de elseif
-instructie gebruiken om een bericht weer te geven wanneer de waarde van $a
gelijk is aan 2
. Zoals in het volgende voorbeeld wordt weergegeven:
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.")
}
De syntaxis van de ternaire operator gebruiken
PowerShell 7.0 heeft een nieuwe syntaxis geïntroduceerd met behulp van de ternaire operator. Deze volgt de syntaxis van de C#-ternaire operator:
<condition> ? <if-true> : <if-false>
De ternaire operator gedraagt zich als de vereenvoudigde if-else
instructie. De <condition>
expressie wordt geëvalueerd en het resultaat wordt geconverteerd naar een booleaanse waarde om te bepalen welke vertakking als volgende moet worden geëvalueerd:
- De
<if-true>
expressie wordt uitgevoerd als de<condition>
expressie waar is - De
<if-false>
expressie wordt uitgevoerd als de<condition>
expressie false is
Bijvoorbeeld:
$message = (Test-Path $path) ? "Path exists" : "Path not found"
In dit voorbeeld is Path exists
de waarde van $message
wanneer Test-Path
retourneert$true
. Wanneer Test-Path
wordt geretourneerd$false
, is Path not found
de waarde van $message
.
$service = Get-Service BITS
$service.Status -eq 'Running' ? (Stop-Service $service) : (Start-Service $service)
Als de service in dit voorbeeld wordt uitgevoerd, is deze gestopt en als de status niet Actief is, wordt deze gestart.
Als een <condition>
expressie , <if-true>
of <if-false>
een opdracht aanroept, moet u deze tussen haakjes plaatsen. Als u dat niet doet, genereert PowerShell een argumentuitzondering voor de opdracht in de <condition>
expressie en parseringsuitzonderingen voor de <if-true>
expressies en <if-false>
.
PowerShell genereert bijvoorbeeld uitzonderingen voor deze 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.
In dit voorbeeld wordt het volgende geparseerd:
(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists