Udostępnij za pośrednictwem


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

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 będą oceniać wartość false. Na koniec możesz określić dodatkowy blok kodu, który zostanie uruchomiony, 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 ocenia wyrażenie warunkowe <test1> jako true lub false. Jeśli <test1> parametr 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> parametr ma wartość true, <statement list 2> uruchamia i program PowerShell kończy instrukcję if . Jeśli obie metody <test1> i zostaną obliczone na wartość false, <statement list 3> blok kodu zostanie uruchomiony, a program PowerShell zakończy instrukcję if<test2> .

Za pomocą wielu elseif instrukcji można utworzyć łańcuch serii 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 wartość 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 mniejsza lub równa 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 zgodna ze składnią operatorów ternary 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łąź powinna zostać obliczona w następnej kolejności:

  • 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 wartość $true. Gdy Test-Path funkcja zwraca $falsewartość , wartość $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, jest 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 nie, 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 tych stażystów:

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

Zobacz też