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 numit8, iar=atribuie. Operatorii de comparație sunt-gt,-eqetc. Where-Object Oras -EQ 'Cluj' -and Nota -GT 7nu 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 9dă$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.
Întrebări & Exemple de Cod:
Where-ObjectAi o nelămurire despre utilizarea comenzii
Where-Objectsau 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.