Delen via


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 instructie if 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 voorgaande tests onwaar evalueren. Ten slotte kunt u een extra codeblok opgeven dat wordt uitgevoerd als er geen andere voorwaardelijke test resulteert in waar.

Syntaxis

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, wordt <statement list 1> uitgevoerd en sluit PowerShell de if-instructie af. Als <test1> onwaar is, evalueert PowerShell de voorwaarde die is opgegeven door de <test2> voorwaardelijke instructie.

Zie about_Booleansvoor meer informatie over booleaanse evaluatie.

Als <test2> waar is, wordt <statement list 2> uitgevoerd en sluit PowerShell de if-instructie af. Als zowel <test1> als <test2> resulteert in onwaar, 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 geen elseif instructies of else instructies. 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 variabele $a groter is dan 2, wordt de voorwaarde geëvalueerd als waar en wordt de lijst met instructies uitgevoerd. Als $a echter kleiner is dan of gelijk is aan 2 of geen bestaande variabele is, wordt in de if-instructie geen bericht weergegeven.

Door een else-instructie toe te voegen, 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 instructie elseif 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 ternaire C#-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 vervolgens 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 onwaar is

Bijvoorbeeld:

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

In dit voorbeeld wordt de waarde van $messagePath exists wanneer Test-Path$trueretourneert. Wanneer Test-Path$falseretourneert, wordt de waarde van $messagePath not found.

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

In dit voorbeeld, als de service wordt uitgevoerd, wordt deze gestopt en als de status niet Wordt uitgevoerd, wordt deze gestart.

Als een <condition>, <if-true>of <if-false> expressie een opdracht aanroept, moet u deze tussen haakjes verpakken. Als u dit niet doet, genereert PowerShell een argumentuitzondering voor de opdracht in de <condition>-expressie en parseren van uitzonderingen voor de <if-true> en <if-false> expressies.

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.

En in dit voorbeeld wordt het volgende geparseerd:

(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists

Zie ook