Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
Możesz użyć instrukcji if, aby uruchomić bloki kodu, jeśli określony test warunkowy zwróci wartość true. Można również określić co najmniej jeden dodatkowy test warunkowy do uruchomienia, jeśli wszystkie wcześniejsze testy zostaną ocenione jako fałsz. 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> ma wartość true, <statement list 1> działa, a 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> ma wartość true, <statement list 2> działa, a program PowerShell kończy instrukcję if. Jeśli zarówno <test1>, jak i <test2> zwracają wartość fałsz, to wykonywany jest blok kodu <statement list 3>, a program PowerShell kończy instrukcję if.
Aby połączyć serię testów warunkowych, można użyć wielu instrukcji elseif. Każdy test jest uruchamiany tylko wtedy, gdy wszystkie poprzednie testy są fałszywe. Jeśli musisz utworzyć instrukcję if zawierającą wiele instrukcji elseif, rozważ użycie instrukcji switch.
Przykłady:
Najprostsza instrukcja if zawiera jedno polecenie i nie zawiera żadnych instrukcji elseif ani żadnych instrukcji else. 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ą, instrukcja if 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ć instrukcji elseif, 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 operatora trójargumentowego
Program PowerShell 7.0 wprowadził nową składnię przy użyciu operatora trójargumentowego. Jest zgodny ze składnią operatora warunkowego języka C#.
<condition> ? <if-true> : <if-false>
Operatorternary zachowuje się jak uproszczona instrukcja if-else. Wyrażenie <condition> jest obliczane, a wynik jest konwertowany na wartość logiczną w celu określenia, która gałąź powinna zostać obliczona dalej:
- Wyrażenie
<if-true>jest wykonywane, jeśli wyrażenie<condition>ma wartość true - Wyrażenie
<if-false>jest wykonywane, jeśli wyrażenie<condition>ma wartość false
Na przykład:
$message = (Test-Path $path) ? "Path exists" : "Path not found"
W tym przykładzie wartość $message jest Path exists, gdy Test-Path zwraca $true. Gdy Test-Path zwraca wartość $false, wartość $message jest 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, zostaje zatrzymana, a jeśli jej stan nie jest Uruchomiona, zostaje uruchomiona.
Jeśli wyrażenie <condition>, <if-true>lub <if-false> wywołuje polecenie, należy opakowować je w nawiasy. Jeśli tak nie jest, program PowerShell zgłasza wyjątek argumentu dla polecenia w wyrażeniu <condition> oraz wyjątki parsowania dla wyrażeń <if-true> 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:
(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists