Where-Object în PowerShell

Filtrează obiectele din pipeline și le lasă să treacă doar pe cele care îndeplinesc o condiție.

Sintaxă
Where-Object [-FilterScript] <ScriptBlock>
Where-Object [-Property] <string> [-Value] <Object> -EQ | -NE | -GT | -GE | -LT | -LE | -Like | -Match | -In | -Contains ...

Ce face Where-Object

Where-Object (aliasuri where și ?) primește obiecte și le trimite mai departe doar pe cele pentru care condiția e adevărată. Forma clasică folosește un bloc de script în care $_ (sau $PSItem) este obiectul curent: Where-Object { $_.Nota -ge 9 }.

Din Windows PowerShell 3.0 există și sintaxa simplificată: Where-Object Oras -EQ 'Cluj'. Fiecare operator de comparație are un parametru-switch (-EQ, -GT, -Like, -Match, -In etc.) și o variantă sensibilă la majuscule (-CEQ, -CLike…). Operatorii logici -and / -or merg doar în forma cu bloc de script.

Comparațiile de text sunt implicit fără diferență între majuscule și minuscule. Din PowerShell 6.1, -Not alege obiectele la care proprietatea lipsește sau are valoarea $null / $false.

Parametri

Parametru Descriere
-FilterScript Blocul de script cu condiția; numele parametrului poate lipsi.
-Property Proprietatea comparată, în sintaxa simplificată (poziția 0).
-Value Valoarea cu care se compară (poziția 1).
-EQ, -NE, -GT, -GE, -LT, -LE Egal, diferit, mai mare, mai mare sau egal, mai mic, mai mic sau egal.
-Like, -NotLike Potrivire cu wildcard-uri (*, ?).
-Match, -NotMatch Potrivire cu o expresie regulată.
-In, -Contains Valoarea proprietății se află într-o listă / lista din proprietate conține valoarea.
-Not Proprietatea lipsește sau e falsă (PowerShell 6.1+).

Ce returnează

Obiectele de intrare care îndeplinesc condiția, nemodificate.

Exemple

Exemplul 1: Filtrare cu bloc de script

Păstrăm elevii cu nota cel puțin 9.

$elevi = @(
    [pscustomobject]@{ Nume = 'Ana'; Oras = 'Iași'; Nota = 9 }
    [pscustomobject]@{ Nume = 'Mihai'; Oras = 'Cluj'; Nota = 7 }
    [pscustomobject]@{ Nume = 'Ioana'; Oras = 'Iași'; Nota = 10 }
    [pscustomobject]@{ Nume = 'Elena'; Oras = 'Cluj'; Nota = 8 }
)
$elevi | Where-Object { $_.Nota -ge 9 }

Ieșire în terminal

Nume  Oras Nota
----  ---- ----
Ana   Iași    9
Ioana Iași   10

Exemplul 2: Sintaxa simplificată cu -Like

Numele care încep cu „i”; comparația nu ține cont de majuscule, deci găsește „Ioana”.

$elevi = @(
    [pscustomobject]@{ Nume = 'Ana'; Oras = 'Iași'; Nota = 9 }
    [pscustomobject]@{ Nume = 'Mihai'; Oras = 'Cluj'; Nota = 7 }
    [pscustomobject]@{ Nume = 'Ioana'; Oras = 'Iași'; Nota = 10 }
)
$elevi | Where-Object Nume -Like 'i*'

Ieșire în terminal

Nume  Oras Nota
----  ---- ----
Ioana Iași   10

Exemplul 3: Două condiții legate cu -and

Pentru mai multe condiții e nevoie de forma cu bloc de script.

$elevi = @(
    [pscustomobject]@{ Nume = 'Ana'; Oras = 'Iași'; Nota = 9 }
    [pscustomobject]@{ Nume = 'Mihai'; Oras = 'Cluj'; Nota = 7 }
    [pscustomobject]@{ Nume = 'Elena'; Oras = 'Cluj'; Nota = 8 }
)
$elevi | Where-Object { $_.Oras -eq 'Cluj' -and $_.Nota -ge 8 }

Ieșire în terminal

Nume  Oras Nota
----  ---- ----
Elena Cluj    8

Greșeli frecvente

  • Folosirea lui > sau = în condiție: { $_.Nota > 8 } redirecționează ieșirea într-un fișier numit 8, iar = atribuie. Operatorii de comparație sunt -gt, -eq etc.
  • Where-Object Oras -EQ 'Cluj' -and Nota -GT 7 nu funcționează: sintaxa simplificată acceptă o singură comparație. Scrie { $_.Oras -eq 'Cluj' -and $_.Nota -gt 7 }.
  • Date venite din CSV au proprietăți de tip text: { $_.Nota -gt 9 } compară atunci șiruri ('10' -gt 9 dă $false). Convertește: { [int]$_.Nota -gt 9 }.

Comenzi înrudite

  • Select-Object: Alege doar anumite proprietăți ale obiectelor, adaugă proprietăți calculate sau păstrează primele, ultimele ori unicele elemente.
  • ForEach-Object: Rulează un bloc de cod pentru fiecare obiect din pipeline; din PowerShell 7.0 poate rula blocurile în paralel cu -Parallel.
  • Operatori de comparație: PowerShell compară cu -eq, -ne, -gt, -lt, -like, -match, -contains, -in, nu cu = sau >; implicit nu ține cont de majuscule.
  • Pipeline (|): Operatorul | trimite obiectele unei comenzi, unul câte unul, comenzii următoare; $_ este obiectul curent, iar && și || înlănțuie comenzi.
  • Import-Csv: Citește un fișier CSV și creează câte un obiect pentru fiecare rând, cu proprietăți numite după coloanele din antet.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Where-Object

Ai o nelămurire despre utilizarea comenzii Where-Object sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.