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

A if utasítással kódblokkokat futtathat, ha egy megadott feltételes teszt eredménye 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.

Szintaxis

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

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

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

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

Ha <test2> igaz, <statement list 2> fut, és a PowerShell kilép a if utasításból. Ha <test1> és <test2> is hamis eredményt ad, a <statement list 3> kódblokk fut, és a PowerShell kilép a if utasításból.

Több elseif utasítást is használhat feltételes tesztek sorozatának láncolataként. Minden teszt csak akkor fut, ha az összes korábbi teszt hamis. Ha több if utasítást tartalmazó elseif utasítást kell létrehoznia, fontolja meg inkább egy 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 else utasítást. Az alábbi példa a if utasítás legegyszerűbb formáját 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ékre lesz kiértékelve, és az utasításlista fut. Ha azonban $a kisebb vagy egyenlő, mint 2, vagy nem egy meglévő változó, a if utasítás nem jelenít meg üzenetet.

Egy else utasítás hozzáadásával üzenet jelenik meg, ha $a kisebb vagy egyenlő 2-nél. 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 a elseif utasítással megjeleníthet egy üzenetet, ha a $a értéke 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éldául:

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

Ebben a példában a $message értéke Path exists, amikor Test-Path$truead vissza. Ha Test-Path$falsead vissza , a $message értéke Path not found.

$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, akkor leállításra kerül, és ha az állapota nem Futó, akkor elindításra kerül.

Ha egy <condition>, <if-true>vagy <if-false> kifejezés parancsot hív meg, zárójelbe kell tenni. Ha nem, a PowerShell argumentumkivételt hoz létre a <condition> kifejezésben lévő parancshoz, és elemzi a <if-true> és <if-false> kifejezések kivételeit.

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