Sort-Object

Sortuje obiekty według wartości właściwości.

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 | Sort-Object [-Property] [-Descending]. 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 doklejania Select-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.