if / elseif / else în PowerShell

Control și funcții Windows PowerShell 1.0

if rulează un bloc de cod doar când condiția e adevărată; elseif și else tratează celelalte cazuri, iar ?: (din PowerShell 7.0) e forma scurtă.

Sintaxă
if (<condiție>) { ... } elseif (<condiție>) { ... } else { ... }
<condiție> ? <dacă-da> : <dacă-nu>

Ce face if / elseif / else

if evaluează condiția din paranteze și, dacă e adevărată, rulează blocul din acolade. Poți adăuga oricâte elseif, verificate în ordine doar dacă cele de dinainte au fost false, și un else final. Condițiile se scriu cu operatorii de comparație (-eq, -gt, -like…) și se combină cu -and, -or, -not.

Condiția nu trebuie să fie neapărat $true/$false: $null, 0, textul gol și o colecție goală se consideră false, aproape orice altceva adevărat. De aceea if ($fisiere) verifică dacă o comandă a găsit ceva, iar if (Test-Path $cale) dacă o cale există. Pentru multe ramuri care compară aceeași valoare, switch e mai ușor de citit.

Din PowerShell 7.0 există operatorul ternar condiție ? valoare1 : valoare2, ca în C#: întoarce prima valoare dacă condiția e adevărată, altfel pe a doua. Dacă o parte este o comandă (de exemplu Test-Path), pune-o între paranteze. În Windows PowerShell 5.1 operatorul nu există, acolo folosești if/else.

Parametri

Parametru Descriere
if (cond) { } Rulează blocul dacă cond e adevărată.
elseif (cond) { } Încă o condiție, verificată doar dacă cele anterioare au fost false.
else { } Rulează dacă nicio condiție nu a fost adevărată.
cond ? a : b Operatorul ternar (PowerShell 7.0+): întoarce a sau b.
-and / -or / -not Combină sau neagă condiții; ! e echivalent cu -not.

Exemple

Exemplul 1: Calificativ după notă

Se verifică pe rând; prima condiție adevărată câștigă.

$nota = 7
if ($nota -ge 9) {
    'Foarte bine'
}
elseif ($nota -ge 5) {
    'Promovat'
}
else {
    'Nepromovat'
}

Ieșire în terminal

Promovat

Exemplul 2: Operatorul ternar pentru stoc

Forma scurtă întoarce direct textul potrivit, pe care îl salvezi într-o variabilă.

$stoc = 0
$mesaj = $stoc -gt 0 ? 'În stoc' : 'Stoc epuizat'
$mesaj

Ieșire în terminal

Stoc epuizat

Exemplul 3: Condiții cu comenzi

Comanda din condiție se pune în paranteze. A doua verificare combină două condiții cu -and.

$cale = 'C:\Proiecte\facturi'
(Test-Path $cale) ? 'Folderul există' : 'Folderul lipsește'
$total = 250
if ($total -gt 100 -and $total -le 500) { 'Livrare gratuită în Iași' }

Ieșire în terminal

Folderul există
Livrare gratuită în Iași

Greșeli frecvente

  • Să scrii if ($nota > 5) sau if ($a = 5): primul creează fișierul 5, al doilea atribuie. Folosește -gt și -eq.
  • Să scrii else if despărțit: în PowerShell cuvântul este elseif.
  • Să scrii Test-Path $cale ? 'da' : 'nu' fără paranteze: PowerShell trimite ? ca argument lui Test-Path și dă eroare. Scrie (Test-Path $cale) ? 'da' : 'nu'.
  • Să folosești operatorul ternar într-un script care rulează și în Windows PowerShell 5.1: acolo e eroare de sintaxă.

Comenzi înrudite

  • Operatori de comparație: PowerShell compară cu -eq, -ne, -gt, -lt, -like, -match, -contains, -in, nu cu = sau >; implicit nu ține cont de majuscule.
  • switch: switch compară o valoare (sau fiecare element al unei colecții) cu mai multe modele și rulează blocul celor potrivite; are -Wildcard și -Regex.
  • try / catch / finally: try/catch prinde erorile care opresc o comandă, iar finally rulează mereu; pentru erorile obișnuite ale cmdlet-urilor pui -ErrorAction Stop.
  • Test-Path: Verifică dacă o cale există și întoarce True sau False; poate cere să fie fișier sau folder și să fie mai nouă decât o dată.