Ce face Select-Object
Select-Object (alias select) face două lucruri diferite. Cu -Property creează obiecte noi care au doar proprietățile cerute, în ordinea cerută. Cu -First, -Last, -Skip, -Index sau -Unique alege obiecte întregi dintr-o colecție, fără să le schimbe.
O proprietate calculată se scrie ca hashtable cu cheile Name (sau Label) și Expression; în bloc, $_ este obiectul curent. -ExpandProperty întoarce chiar valorile proprietății (șiruri, numere), nu obiecte cu o singură coloană, ceea ce e util când vrei o listă simplă de nume.
Când folosești -First sau -Index, PowerShell oprește comanda din stânga imediat ce a primit destule obiecte (optimizare din Windows PowerShell 3.0; -Wait o dezactivează). Din PowerShell 7.4, -CaseInsensitive face -Unique să nu mai țină cont de majuscule.
Parametri
| Parametru | Descriere |
|---|---|
-Property |
Proprietățile păstrate; acceptă wildcard-uri și proprietăți calculate @{ Name = '...'; Expression = { ... } }. |
-ExpandProperty |
Întoarce valorile unei singure proprietăți (dacă e tablou, fiecare element separat). |
-ExcludeProperty |
Proprietăți eliminate din rezultat; din PowerShell 6 merge și fără -Property. |
-First / -Last |
Primele sau ultimele N obiecte. |
-Skip / -SkipLast |
Sare peste primele N (sau ultimele N) obiecte. |
-Index |
Alege obiectele de pe pozițiile date (numerotare de la 0). |
-Unique |
Păstrează o singură apariție din obiectele identice; sensibil la majuscule. |
-CaseInsensitive |
Cu -Unique, compară fără să țină cont de majuscule (PowerShell 7.4+). |
Ce returnează
Obiecte noi (PSCustomObject) cu proprietățile alese, obiectele originale (la -First, -Unique etc.) sau valorile brute (la -ExpandProperty).
Exemple
Exemplul 1: Doar câteva coloane și primele două rânduri
Obiectele au trei proprietăți; păstrăm numele și nota pentru primii doi elevi.
$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 | Select-Object -Property Nume, Nota -First 2
Ieșire în terminal
Nume Nota
---- ----
Ana 9
Mihai 7
Exemplul 2: Proprietate calculată: totalul unei comenzi
Coloana „Total (lei)” nu există în date; o calculăm din preț și cantitate.
$produse = @(
[pscustomobject]@{ Produs = 'Cafea'; Pret = 25; Cantitate = 4 }
[pscustomobject]@{ Produs = 'Ceai'; Pret = 12; Cantitate = 10 }
[pscustomobject]@{ Produs = 'Prăjitură'; Pret = 18; Cantitate = 3 }
)
$produse | Select-Object Produs, @{ Name = 'Total (lei)'; Expression = { $_.Pret * $_.Cantitate } }
Ieșire în terminal
Produs Total (lei)
------ -----------
Cafea 100
Ceai 120
Prăjitură 54
Exemplul 3: -ExpandProperty: valori simple, nu obiecte
Obținem un tablou de șiruri, pe care îl putem uni direct cu -join.
$elevi = @(
[pscustomobject]@{ Nume = 'Ana'; Nota = 9 }
[pscustomobject]@{ Nume = 'Mihai'; Nota = 7 }
[pscustomobject]@{ Nume = 'Ioana'; Nota = 10 }
)
$nume = $elevi | Select-Object -ExpandProperty Nume
$nume -join ', '
Ieșire în terminal
Ana, Mihai, Ioana
Greșeli frecvente
Select-Object Numeîntoarce obiecte cu o proprietateNume, nu șiruri:"Salut $x"afișează atunci@{Nume=Ana}. Pentru valori simple folosește-ExpandProperty Numesau$elevi.Nume.-Uniqueține cont de majuscule:'Iași', 'iași'rămân două valori. Adaugă-CaseInsensitive(7.4+) sau foloseșteSort-Object -Unique, care nu ține cont de majuscule.Select-Object -First 5pus dupăSort-Objecte corect; pus înainte, alegi primele 5 obiecte nesortate și abia apoi le sortezi.
Comenzi înrudite
Where-Object: Filtrează obiectele din pipeline și le lasă să treacă doar pe cele care îndeplinesc o condiție.Sort-Object: Sortează obiectele după una sau mai multe proprietăți, crescător sau descrescător, opțional doar primele N.Format-Table: Afișează obiectele ca tabel, cu coloanele alese de tine, inclusiv coloane calculate.Get-Member: Arată tipul obiectelor dintr-un pipeline și ce proprietăți și metode au, ca să știi ce poți selecta, filtra sau apela.Pipeline (|): Operatorul | trimite obiectele unei comenzi, unul câte unul, comenzii următoare; $_ este obiectul curent, iar && și || înlănțuie comenzi.