about_If
Krótki opis
Opisuje polecenie języka, którego można użyć do uruchamiania list instrukcji na podstawie wyników co najmniej jednego testu warunkowego.
Długi opis
Instrukcję można użyć do uruchamiania if
bloków kodu, jeśli określony test warunkowy daje wartość true. Można również określić co najmniej jeden dodatkowy test warunkowy do uruchomienia, jeśli wszystkie poprzednie testy będą oceniać wartość false. Na koniec możesz określić dodatkowy blok kodu, który jest uruchamiany, jeśli żaden inny wcześniej test warunkowy nie zwróci wartości true.
Składnia
W poniższym przykładzie przedstawiono składnię instrukcji if
:
if (<test1>)
{<statement list 1>}
[elseif (<test2>)
{<statement list 2>}]
[else
{<statement list 3>}]
Po uruchomieniu instrukcji if
program PowerShell oblicza wyrażenie warunkowe <test1>
jako true lub false. Jeśli <test1>
wartość ma wartość true, <statement list 1>
uruchamia i program PowerShell kończy instrukcję if
. Jeśli <test1>
ma wartość false, program PowerShell oblicza warunek określony przez instrukcję warunkową <test2>
.
Aby uzyskać więcej informacji na temat oceny logicznej, zobacz about_Booleans.
Jeśli <test2>
wartość ma wartość true, <statement list 2>
uruchamia i program PowerShell kończy instrukcję if
. Jeśli zarówno, jak i <test2>
zostanie obliczona wartość false, <statement list 3
> blok kodu zostanie uruchomiony, a program PowerShell zakończy instrukcję if
.<test1>
Za pomocą wielu elseif
instrukcji można połączyć serię testów warunkowych. Każdy test jest uruchamiany tylko wtedy, gdy wszystkie poprzednie testy są fałszywe. Jeśli musisz utworzyć instrukcję zawierającą if
wiele elseif
instrukcji, rozważ użycie instrukcji Switch.
Przykłady:
Najprostsza if
instrukcja zawiera jedno polecenie i nie zawiera żadnych elseif
instrukcji ani żadnych else
instrukcji. Poniższy przykład przedstawia najprostszą formę instrukcji if
:
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
W tym przykładzie, jeśli zmienna $a
jest większa niż 2
, warunek daje wartość true, a lista instrukcji zostanie uruchomiona. Jeśli jednak $a
jest mniejsza lub równa 2
lub nie jest istniejącą zmienną, if
instrukcja nie wyświetla komunikatu.
Dodając instrukcję Else, komunikat jest wyświetlany, gdy $a jest mniejszy lub równy 2. W następnym przykładzie pokazano:
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.")
}
Aby jeszcze bardziej uściślić ten przykład, możesz użyć elseif
instrukcji , aby wyświetlić komunikat, gdy wartość $a
jest równa 2
. W następnym przykładzie pokazano:
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.")
}
Używanie składni operatoraternary
Program PowerShell 7.0 wprowadził nową składnię przy użyciu operatoraternary. Jest zgodny ze składnią operatoraternary języka C#:
<condition> ? <if-true> : <if-false>
Operatorternary zachowuje się jak instrukcja uproszczona if-else
. Wyrażenie <condition>
jest obliczane, a wynik jest konwertowany na wartość logiczną, aby określić, która gałąź ma zostać obliczona dalej:
- Wyrażenie
<if-true>
jest wykonywane, jeśli<condition>
wyrażenie ma wartość true - Wyrażenie
<if-false>
jest wykonywane, jeśli<condition>
wyrażenie ma wartość false
Na przykład:
$message = (Test-Path $path) ? "Path exists" : "Path not found"
W tym przykładzie wartość parametru $message
to Path exists
when Test-Path
zwraca $true
wartość . Gdy Test-Path
zwraca $false
wartość , wartość parametru $message
to Path not found
.
$service = Get-Service BITS
$service.Status -eq 'Running' ? (Stop-Service $service) : (Start-Service $service)
W tym przykładzie, jeśli usługa jest uruchomiona, została zatrzymana i jeśli jej stan nie jest uruchomiony, jest uruchomiony.
Jeśli wyrażenie <condition>
, <if-true>
lub <if-false>
wywołuje polecenie, należy opakowować je w nawiasy. Jeśli tego nie zrobisz, program PowerShell zgłasza wyjątek argumentu dla polecenia w wyrażeniu <condition>
i analizuje wyjątki dla <if-true>
wyrażeń i <if-false>
.
Na przykład program PowerShell zgłasza wyjątki dla tychternaries:
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.
Ten przykład analizuje następujące przeanalizować:
(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists