about_If
Krátký popis
Popisuje příkaz jazyka, který můžete použít ke spuštění seznamů příkazů na základě výsledků jednoho nebo více podmíněných testů.
Dlouhý popis
Příkaz můžete použít if
ke spuštění bloků kódu, pokud se zadaný podmíněný test vyhodnotí jako true. Můžete také zadat jeden nebo více dalších podmíněných testů, které se mají spustit, pokud se všechny předchozí testy vyhodnotí jako false. Nakonec můžete zadat další blok kódu, který se spustí, pokud se žádný jiný předchozí podmíněný test nevyhodnotí jako true.
Syntaxe
Následující příklad ukazuje if
syntaxi příkazu:
if (<test1>)
{<statement list 1>}
[elseif (<test2>)
{<statement list 2>}]
[else
{<statement list 3>}]
Když spustíte if
příkaz, PowerShell vyhodnotí <test1>
podmíněný výraz jako true nebo false. Pokud <test1>
je true, <statement list 1>
spustí a PowerShell příkaz ukončí if
. Pokud <test1>
je false, PowerShell vyhodnotí podmínku určenou podmíněným příkazem <test2>
.
Další informace o logickém vyhodnocení najdete v tématu about_Booleans.
Pokud <test2>
je true, <statement list 2>
spustí a PowerShell příkaz ukončí if
. Pokud se vyhodnotí <test1>
jako nepravda, <statement list 3
> blok kódu se spustí a PowerShell příkaz ukončíif
.<test2>
K zřetězování řady podmíněných testů můžete použít více elseif
příkazů. Každý test se spustí jenom v případě, že jsou všechny předchozí testy nepravdivé. Pokud potřebujete vytvořit if
příkaz, který obsahuje mnoho elseif
příkazů, zvažte místo toho použití příkazu Switch.
Příklady:
Nejjednodušší if
příkaz obsahuje jeden příkaz a neobsahuje žádné elseif
příkazy ani žádné else
příkazy. Následující příklad ukazuje nejjednodušší formu if
příkazu:
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
V tomto příkladu $a
platí, že pokud je proměnná větší než 2
, podmínka se vyhodnotí jako true a spustí se seznam příkazů. Pokud $a
je ale menší nebo rovno 2
nebo není existující proměnná, if
příkaz nezobrazí zprávu.
Když přidáte příkaz Else, zobrazí se zpráva, když $a je menší nebo rovna 2. Jak ukazuje následující příklad:
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.")
}
Chcete-li dále upřesnit tento příklad, můžete použít elseif
příkaz k zobrazení zprávy, pokud je hodnota $a
rovna 2
. Jak ukazuje následující příklad:
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.")
}
Použití syntaxe ternárního operátoru
PowerShell 7.0 zavedl novou syntaxi pomocí ternárního operátoru. Následuje syntaxe ternárního operátoru jazyka C#:
<condition> ? <if-true> : <if-false>
Ternární operátor se chová jako zjednodušený if-else
příkaz. Výraz <condition>
se vyhodnotí a výsledek se převede na logickou hodnotu, aby bylo možné určit, která větev se má vyhodnotit dále:
- Výraz
<if-true>
se spustí, pokud<condition>
je výraz pravdivý. - Výraz
<if-false>
se spustí, pokud<condition>
je výraz nepravda.
Příklad:
$message = (Test-Path $path) ? "Path exists" : "Path not found"
V tomto příkladu je Path exists
hodnota $message
při Test-Path
vrácení $true
. Když Test-Path
se vrátí $false
, hodnota $message
je Path not found
.
$service = Get-Service BITS
$service.Status -eq 'Running' ? (Stop-Service $service) : (Start-Service $service)
Pokud je služba spuštěná, je v tomto příkladu zastavená a pokud její stav není spuštěný, spustí se.
Pokud znak <condition>
, <if-true>
nebo <if-false>
výraz volá příkaz, musíte ho zabalit do závorek. Pokud ne, PowerShell vyvolá výjimku argumentu pro příkaz ve výrazu <condition>
a parsuje výjimky pro <if-true>
výrazy a <if-false>
výrazy.
PowerShell například vyvolá výjimky pro tyto ternáry:
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.
A tento příklad analyzuje:
(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists