Sort-Object to cmdlet PowerShella, który układa obiekty w potoku według wartości wskazanej właściwości. W PowerShellu prawie wszystko jest obiektem, więc zamiast ślepego sortowania tekstu jak w klasycznym sort, tu sortujesz po konkretnych polach: nazwie procesu, rozmiarze pliku, dacie modyfikacji, zużyciu pamięci. Dostajesz z powrotem posortowaną kolekcję tych samych obiektów, gotową do dalszej obróbki w potoku.
Składnia i najważniejsze opcje
Podstawowa forma to . Parametr -Property jest pozycyjny, więc zwykle piszesz samą nazwę właściwości.
-Property— właściwość (lub lista właściwości), po której sortujesz. Przy kilku właściwościach najpierw sortuje po pierwszej, remisy rozstrzyga kolejną.-Descending— sortowanie malejąco (domyślnie jest rosnąco). Działa na wszystkie podane właściwości naraz.-Unique— usuwa duplikaty i zwraca tylko unikalne elementy. Uwaga: domyślnie porównuje bez rozróżniania wielkości liter.-CaseSensitive— traktuje WIELKIE i małe litery jako różne przy sortowaniu i porównywaniu.-Top— zwraca tylko N pierwszych elementów po posortowaniu (PowerShell 6+).-Bottom— zwraca tylko N ostatnich elementów po posortowaniu (PowerShell 6+).-Stable— zachowuje pierwotną kolejność elementów o równych wartościach (PowerShell 7+).
Przykłady użycia
Get-Process | Sort-Object -Property WS -Descending— pokazuje procesy od najbardziej pamięciożernych (working set) w dół.Get-ChildItem | Sort-Object Length -Descending | Select-Object -First 5— pięć największych plików w bieżącym katalogu.Get-ChildItem | Sort-Object LastWriteTime— pliki od najstarszego do najnowszego.Get-Content lista.txt | Sort-Object -Unique— sortuje linie z pliku i wyrzuca powtórki.Get-Process | Sort-Object CPU -Top 3— trzy procesy z największym czasem CPU, bez doklejaniaSelect-Object.
Częste błędy i pułapki
Najczęstsza wpadka: Sort-Object sortuje jako tekst, jeśli właściwość jest tekstem. Kolumna z liczbami zapisanymi jako string ustawi ci 10 przed 2. Wtedy rzutuj wyrażeniem, np. Sort-Object { [int]$_.Numer }.
Druga sprawa: -Unique domyślnie ignoruje wielkość liter, więc Plik i plik zostaną potraktowane jako jeden. Jeśli to problem, dołóż -CaseSensitive. Pamiętaj też, że -Top, -Bottom i -Stable to nowsze parametry (odpowiednio PowerShell 6+ i 7+) — na starym Windows PowerShell 5.1 ich nie masz, tam używaj Select-Object -First / -Last. I nie myl tego z systemowym poleceniem sort.exe, które zna tylko czysty tekst i nie ma pojęcia o właściwościach obiektów.
Powiązane komendy: Select-Object, Where-Object, Group-Object, Measure-Object, ForEach-Object.