Operatori de comparație în PowerShell

Variabile și tipuri Windows PowerShell 1.0

PowerShell compară cu -eq, -ne, -gt, -lt, -like, -match, -contains, -in, nu cu = sau >; implicit nu ține cont de majuscule.

Sintaxă
-eq -ne -gt -ge -lt -le
-like -notlike -match -notmatch
-contains -notcontains -in -notin

Ce face Operatori de comparație

PowerShell nu folosește ==, < sau > pentru comparații. Operatorii sunt cuvinte cu cratimă: -eq (egal), -ne (diferit), -gt (mai mare), -ge (mai mare sau egal), -lt (mai mic), -le (mai mic sau egal). Caracterul > este redirecționare: if ($nota > 5) nu compară nimic, ci scrie valoarea în fișierul 5. Comparațiile de text nu țin cont de majuscule; pentru asta există variantele cu c: -ceq, -clike, -cmatch.

-like compară cu un model wildcard (* orice text, ? un caracter, [a-z] un interval) și trebuie să se potrivească tot textul. -match folosește expresii regulate, caută oriunde în text și, când găsește, completează variabila automată $Matches ($Matches[0] este potrivirea întreagă, $Matches[1] primul grup). Tipul din dreapta se convertește la tipul din stânga: 8 -eq '8' este True.

Când în stânga este o colecție, -eq, -gt, -like, -match nu întorc True/False, ci elementele care se potrivesc. Pentru „conține?” folosește -contains (colecția în stânga) sau -in (valoarea în stânga, din Windows PowerShell 3.0); ele întorc mereu un boolean și caută o valoare întreagă, nu o bucată de text. Pentru a combina condiții ai -and, -or, -not (sau !).

Parametri

Parametru Descriere
-eq / -ne Egal / diferit.
-gt / -ge Mai mare / mai mare sau egal.
-lt / -le Mai mic / mai mic sau egal.
-like / -notlike Potrivire cu wildcard (*, ?, [ ]), pe tot textul.
-match / -notmatch Potrivire cu expresie regulată; completează $Matches pentru o valoare simplă.
-contains / -notcontains colecție -contains valoare: True dacă valoarea e în colecție.
-in / -notin valoare -in colecție: inversul lui -contains (3.0+).
-ceq, -clike, -cmatch... Variantele care țin cont de majuscule.
-is / -isnot Verifică tipul: $x -is [int].

Exemple

Exemplul 1: Numere și text

Textul '8' e convertit la număr, pentru că în stânga e un număr. -eq ignoră majusculele, -ceq nu.

$nota = 8
$nota -gt 5
$nota -eq '8'
'Iași' -eq 'IAȘI'
'Iași' -ceq 'IAȘI'

Ieșire în terminal

True
True
True
False

Exemplul 2: Wildcard și expresii regulate

-like verifică extensia, -match găsește un număr de telefon oriunde în text și îl pune în $Matches.

'factura-2026.pdf' -like '*.pdf'
'Telefon Mihai: 0740123456' -match '07\d{8}'
$Matches[0]

Ieșire în terminal

True
True
0740123456

Exemplul 3: Comparații pe colecții

-gt pe un tablou filtrează elementele. -contains și -in întorc un singur boolean.

$note = 10, 7, 9, 4
$note -gt 6
$note -contains 4
5 -in $note

Ieșire în terminal

10
7
9
True
False

Greșeli frecvente

  • Să scrii >, < sau = într-o condiție: > redirecționează ieșirea într-un fișier, = atribuie. Folosește -gt, -lt, -eq.
  • Să folosești -contains pentru text: 'PowerShell' -contains 'Shell' este False, pentru că operatorul caută elemente în colecții. Pentru bucăți de text folosește -like '*Shell*' sau -match.
  • Să folosești -like 'pdf' și să aștepți potrivire pe raport.pdf: modelul trebuie să acopere tot textul, deci '*.pdf'.
  • Să citești $Matches după un -match care a eșuat sau a fost aplicat pe o colecție: variabila păstrează potrivirea anterioară.

Comenzi înrudite

  • if / elseif / else: 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ă.
  • 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.
  • Where-Object: Filtrează obiectele din pipeline și le lasă să treacă doar pe cele care îndeplinesc o condiție.
  • Variabile și tipuri: Variabilele încep cu $, primesc orice obiect .NET și pot fi legate de un tip ([int], [string], [datetime]); .GetType() arată tipul.
  • Tablouri (@()): Un tablou ține mai multe valori; îl creezi cu virgule sau @(), îl citești cu [index], iar += creează de fiecare dată un tablou nou.