about_If

Rövid leírás

Egy olyan nyelvi parancsot ismertet, a segítségével utasításlistákat futtathat egy vagy több feltételes teszt eredményei alapján.

Hosszú leírás

Az utasítással if kódblokkokat futtathat, ha egy megadott feltételes teszt értéke igaz. Megadhat egy vagy több további feltételes tesztet is, ha az összes korábbi teszt eredménye hamis. Végül megadhat egy további kódblokkot is, amely akkor fut, ha egyetlen korábbi feltételes teszt sem lesz igaz.

Syntax

Az alábbi példa az utasítás szintaxisát if mutatja be:

if (<test1>)
    {<statement list 1>}
[elseif (<test2>)
    {<statement list 2>}]
[else
    {<statement list 3>}]

Utasítás futtatásakor if a PowerShell igaz vagy hamisként értékeli ki a <test1> feltételes kifejezést. Ha <test1> igaz, <statement list 1> fut, és a PowerShell kilép az utasításból if . Ha <test1> hamis, a PowerShell kiértékeli a feltételes utasítás által megadott feltételt <test2> .

A logikai értékeléssel kapcsolatos további információkért lásd a about_Booleans.

Ha <test2> igaz, <statement list 2> fut, és a PowerShell kilép az utasításból if . Ha mindkettő <test1> és <test2> a kiértékelés hamis, a <statement list 3> kódblokk lefut, és a PowerShell kilép az utasításból if .

Több utasítással is elseif összekapcsolhat egy sor feltételes tesztet. Minden teszt csak akkor fut, ha az összes korábbi teszt hamis. Ha több elseif utasítást if tartalmazó utasítást kell létrehoznia, fontolja meg inkább a Switch utasítás használatát.

Példák:

A legegyszerűbb if utasítás egyetlen parancsot tartalmaz, és nem tartalmaz semmilyen elseif utasítást vagy utasítást else . Az alábbi példa az utasítás legegyszerűbb formáját if mutatja be:

if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
}

Ebben a példában, ha a $a változó nagyobb, mint 2, a feltétel igaz értéket ad, és az utasításlista fut. Ha $a azonban kisebb vagy egyenlő 2 , mint egy meglévő változó, if az utasítás nem jelenít meg üzenetet.

Egy Else utasítás hozzáadásával egy üzenet jelenik meg, ha $a kisebb vagy egyenlő, mint 2. Ahogy a következő példa is mutatja:

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.")
}

A példa pontosításához az elseif utasítással megjeleníthet egy üzenetet, ha az értéke $a megegyezik.2 Ahogy a következő példa is mutatja:

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.")
}

A ternáris operátor szintaxisának használata

A PowerShell 7.0 új szintaxist vezetett be a ternáris operátor használatával. A C# ternáris operátor szintaxisát követi:

<condition> ? <if-true> : <if-false>

A ternáris operátor az egyszerűsített if-else utasításhoz hasonlóan viselkedik. A <condition> kifejezés kiértékelése és az eredmény logikai értékké alakítása annak meghatározásához, hogy melyik ágat kell legközelebb kiértékelni:

  • A <if-true> kifejezés akkor lesz végrehajtva, ha a <condition> kifejezés igaz
  • A <if-false> kifejezés akkor lesz végrehajtva, ha a <condition> kifejezés hamis

Példa:

$message = (Test-Path $path) ? "Path exists" : "Path not found"

Ebben a példában az érték $message az, amikor Test-Path visszaadja a függvényt$truePath exists. Ha Test-Path a visszaadott $falseérték $messagePath not foundaz .

$service = Get-Service BITS
$service.Status -eq 'Running' ? (Stop-Service $service) : (Start-Service $service)

Ebben a példában, ha a szolgáltatás fut, le van állítva, és ha az állapota nem fut, elindul.

Ha egy <condition>, <if-true>vagy <if-false> kifejezés parancsot hív meg, zárójelbe kell tördelnie. Ha nem, a PowerShell argumentumkivételt ad a parancshoz a <condition> kifejezésben, és elemzi a kivételeket a kifejezéshez és <if-false> a <if-true> kifejezésekhez.

A PowerShell például kivételeket emel ki ezekre a ternárokra:

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.

Ez a példa pedig a következőt elemzi:

(Test-Path .vscode) ? (Write-Host 'exists') : (Write-Host 'not found')
exists

Lásd még