Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 if můžete použít 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.
Syntax
Následující příklad ukazuje syntaxi příkazu if:
if (<test1>)
{<statement list 1>}
[elseif (<test2>)
{<statement list 2>}]
[else
{<statement list 3>}]
Když spustíte příkaz if, PowerShell vyhodnotí <test1> podmíněný výraz jako true nebo false. Pokud je <test1> pravdivý, <statement list 1> se spustí a PowerShell ukončí příkaz if. Pokud je <test1> false, PowerShell vyhodnotí podmínku určenou <test2> podmíněným příkazem.
Další informace o logickém vyhodnocení najdete v tématu about_Booleans.
Pokud je <test2> pravdivý, <statement list 2> se spustí a PowerShell ukončí příkaz if. Pokud se <test1> i <test2> vyhodnotí jako nepravda, spustí se blok kódu <statement list 3> a PowerShell příkaz if ukončí.
K řetězení řady podmíněných testů můžete použít více příkazů elseif. Každý test se spustí jenom v případě, že jsou všechny předchozí testy nepravdivé. Pokud potřebujete vytvořit příkaz if, který obsahuje mnoho příkazů elseif, zvažte místo toho použití příkazu switch.
Příklady:
Nejjednodušší příkaz if obsahuje jeden příkaz a neobsahuje žádné příkazy elseif ani žádné příkazy else. Následující příklad ukazuje nejjednodušší formu příkazu if:
if ($a -gt 2) {
Write-Host "The value $a is greater than 2."
}
Pokud je v tomto příkladu proměnná $a větší než 2, podmínka se vyhodnotí jako true a spustí se seznam příkazů. Pokud je ale $a menší nebo roven 2 nebo není existující proměnnou, příkaz if zprávu nezobrazí.
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 tento příklad dále upřesnit, můžete použít příkaz elseif 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ý příkaz if-else. 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 je výraz<condition>pravdivý. - Výraz
<if-false>se spustí, pokud je výraz<condition>false.
Například:
$message = (Test-Path $path) ? "Path exists" : "Path not found"
V tomto příkladu je hodnota $messagePath exists, když Test-Path vrátí $true. Když Test-Path 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ěno, spustí se.
Pokud výraz <condition>, <if-true>nebo <if-false> 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 výrazy <if-true> a <if-false>.
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