about_If
Kurze Beschreibung
Beschreibt einen Sprachbefehl, mit dem Sie Anweisungslisten basierend auf den Ergebnissen einer oder mehrerer bedingter Tests ausführen können.
Lange Beschreibung
Sie können die if
Anweisung verwenden, um Codeblöcke auszuführen, wenn ein angegebener bedingter Test als wahr ausgewertet wird. Sie können auch einen oder mehrere zusätzliche bedingte Tests angeben, die ausgeführt werden sollen, wenn alle vorherigen Tests als falsch ausgewertet werden. Schließlich können Sie einen zusätzlichen Codeblock angeben, der ausgeführt wird, wenn kein anderer vorheriger bedingter Test als "true" ausgewertet wird.
Syntax
Das folgende Beispiel zeigt die Syntax der if
Anweisung:
if (<test1>)
{<statement list 1>}
[elseif (<test2>)
{<statement list 2>}]
[else
{<statement list 3>}]
Wenn Sie eine if
Anweisung ausführen, wertet PowerShell den <test1>
bedingten Ausdruck als wahr oder falsch aus. Ist <test1>
"true", <statement list 1>
wird ausgeführt, und PowerShell beendet die if
Anweisung. Ist <test1>
"false" angegeben, wertet PowerShell die durch die <test2>
bedingte Anweisung angegebene Bedingung aus.
Weitere Informationen zur booleschen Auswertung finden Sie unter about_Booleans.
Ist <test2>
"true", <statement list 2>
wird ausgeführt, und PowerShell beendet die if
Anweisung. Wenn beide wertet <test1>
und <test2>
auf "false" ausgewertet wird, wird der> <statement list 3
Codeblock ausgeführt, und PowerShell beendet die if
Anweisung.
Sie können mehrere elseif
Anweisungen verwenden, um eine Reihe von bedingten Tests zu verketten. Jeder Test wird nur ausgeführt, wenn alle vorherigen Tests falsch sind. Wenn Sie eine Anweisung erstellen müssen, die viele if
elseif
Anweisungen enthält, sollten Sie stattdessen eine Switch-Anweisung verwenden.
Beispiele:
Die einfachste if
Anweisung enthält einen einzelnen Befehl und enthält elseif
keine Anweisungen oder else
Anweisungen. Das folgende Beispiel zeigt die einfachste Form der if
Anweisung:
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
Wenn die $a
Variable in diesem Beispiel größer 2
als ist, wird die Bedingung als "true" ausgewertet, und die Anweisungsliste wird ausgeführt. Wenn $a
die Variable jedoch kleiner oder gleich 2
oder nicht vorhanden ist, zeigt die if
Anweisung keine Meldung an.
Durch Hinzufügen einer Else-Anweisung wird eine Meldung angezeigt, wenn $a kleiner oder gleich 2 ist. Wie das nächste Beispiel zeigt:
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.")
}
Um dieses Beispiel weiter zu verfeinern, können Sie die elseif
Anweisung verwenden, um eine Meldung anzuzeigen, wenn der Wert $a
gleich 2
ist. Wie das nächste Beispiel zeigt:
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.")
}
Verwenden der ternären Operatorsyntax
PowerShell 7.0 hat eine neue Syntax mit dem ternären Operator eingeführt. Es folgt der Syntax des C#-ternären Operators:
<condition> ? <if-true> : <if-false>
Der ternäre Operator verhält sich wie die vereinfachte if-else
Anweisung. Der <condition>
Ausdruck wird ausgewertet, und das Ergebnis wird in einen booleschen Wert konvertiert, um zu bestimmen, welche Verzweigung als Nächstes ausgewertet werden soll:
- Der Ausdruck
<if-true>
wird ausgeführt, wenn der Ausdruck<condition>
TRUE ist. - Der Ausdruck
<if-false>
wird ausgeführt, wenn der Ausdruck<condition>
FALSE ist.
Zum Beispiel:
$message = (Test-Path $path) ? "Path exists" : "Path not found"
In diesem Beispiel wird der Wert des Werts $message
zurückgegeben$true
Test-Path
.Path exists
Wenn Test-Path
der $false
Wert zurückgegeben wird, lautet Path not found
der Wert von $message
.
$service = Get-Service BITS
$service.Status -eq 'Running' ? (Stop-Service $service) : (Start-Service $service)
In diesem Beispiel wird der Dienst beendet, und wenn der Status nicht ausgeführt wird, wird er gestartet.
Wenn ein <condition>
, <if-true>
oder <if-false>
ein Ausdruck einen Befehl aufruft, müssen Sie ihn in Klammern umschließen. Andernfalls löst PowerShell eine Argumentausnahme für den Befehl im <condition>
Ausdruck aus und analysiert Ausnahmen für die <if-true>
Ausdrücke und <if-false>
Ausdrücke.
PowerShell löst beispielsweise Ausnahmen für diese Ternaries aus:
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.
Und in diesem Beispiel werden analysiert:
(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists