Ce face Sort-Object
Sort-Object adună toate obiectele primite și le trimite mai departe în ordine. Fără -Property folosește proprietățile implicite de sortare ale tipului sau compară obiectele direct (util pentru numere și șiruri). Implicit, sortarea textului nu ține cont de majuscule; -CaseSensitive schimbă asta.
Pentru mai multe criterii scrii proprietățile separate prin virgulă. Dacă vrei ordini diferite pe fiecare criteriu, folosești hashtable-uri: @{ Expression = 'Nota'; Descending = $true }. Proprietatea poate fi și un bloc de script, de exemplu { [int]$_ }, pentru a sorta text ca numere.
Din PowerShell 6.0 există -Top și -Bottom (primele / ultimele N după sortare), iar din 6.2 -Stable, care păstrează ordinea inițială a elementelor egale. Aliasul sort există doar pe Windows; pe macOS și Linux sort pornește utilitarul de sistem.
Parametri
| Parametru | Descriere |
|---|---|
-Property |
Proprietăți, blocuri de script sau hashtable-uri cu Expression și Ascending/Descending. |
-Descending |
Ordine descrescătoare pentru toate criteriile. |
-Unique |
Elimină duplicatele după sortare; nu ține cont de majuscule. |
-Top / -Bottom |
Întoarce doar primele / ultimele N obiecte sortate; sortare stabilă (PowerShell 6.0+). |
-Stable |
Elementele egale rămân în ordinea în care au venit (PowerShell 6.2+). |
-CaseSensitive |
Sortare care ține cont de majuscule. |
-Culture |
Cultura folosită la compararea textului (de exemplu ro-RO). |
Ce returnează
Aceleași obiecte, în ordinea cerută.
Exemple
Exemplul 1: Primii trei elevi după notă, cu -Top
Elena și Bogdan au aceeași notă; -Top face o sortare stabilă, așa că Elena, venită prima, rămâne înaintea lui Bogdan.
$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 }
[pscustomobject]@{ Nume = 'Bogdan'; Oras = 'Iași'; Nota = 8 }
)
$elevi | Sort-Object -Property Nota -Descending -Top 3
Ieșire în terminal
Nume Oras Nota
---- ---- ----
Ioana Iași 10
Ana Iași 9
Elena Cluj 8
Exemplul 2: Două criterii: oraș crescător, notă descrescătoare
Al doilea criteriu este un hashtable cu Descending = $true; primul rămâne crescător.
$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 }
[pscustomobject]@{ Nume = 'Bogdan'; Oras = 'Iași'; Nota = 8 }
)
$elevi | Sort-Object -Property Oras, @{ Expression = 'Nota'; Descending = $true }
Ieșire în terminal
Nume Oras Nota
---- ---- ----
Elena Cluj 8
Mihai Cluj 7
Ioana Iași 10
Ana Iași 9
Bogdan Iași 8
Exemplul 3: Text care arată ca numere
Șirurile se sortează caracter cu caracter („10” înainte de „9”); cu { [int]$_ } se sortează ca numere.
$coduri = '10', '9', '100'
($coduri | Sort-Object) -join ', '
($coduri | Sort-Object { [int]$_ }) -join ', '
Ieșire în terminal
10, 100, 9
9, 10, 100
Greșeli frecvente
Sort-Object Nota -Descending | Select-Object -First 3nu garantează ordinea între elementele egale;-Top 3sau-Stableo păstrează.-Descendingse aplică tuturor proprietăților. Pentru ordini amestecate folosește hashtable-uri cuDescending/Ascendingpe fiecare criteriu.- Pe macOS și Linux,
sortnu este alias pentruSort-Object, ci programul/usr/bin/sort, care primește text, nu obiecte. Scrie numele complet al cmdlet-ului în scripturi.
Comenzi înrudite
Select-Object: Alege doar anumite proprietăți ale obiectelor, adaugă proprietăți calculate sau păstrează primele, ultimele ori unicele elemente.Group-Object: Grupează obiectele care au aceeași valoare la o proprietate și arată câte sunt în fiecare grup.Where-Object: Filtrează obiectele din pipeline și le lasă să treacă doar pe cele care îndeplinesc o condiție.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.PowerShell pe macOS și Linux: Cum instalezi și pornești PowerShell 7 (pwsh) pe macOS și Linux și ce se comportă diferit față de Windows: aliasuri, majuscule, căi.