Select-Object

Wybiera wskazane właściwości obiektów lub pierwsze/ostatnie elementy.

Select-Object to jedno z tych poleceń PowerShell, bez których szybko utoniesz w wynikach. Każde cmdlet zwraca obiekty z masą właściwości, a Ty zwykle potrzebujesz dwóch z dwudziestu. Select-Object (alias select) wybiera wskazane właściwości obiektów albo wycina z potoku pierwsze, ostatnie lub konkretne elementy. To filtr kolumn i wierszy w jednym — przydaje się w niemal każdym skrypcie, od raportów po szybkie sprawdzenie procesów.

Składnia i najważniejsze opcje

Podstawowa forma to przepuszczenie obiektów przez potok do Select-Object:

| Select-Object [-Property ] [-First ] [-Last ]

  • -Property — lista właściwości do pokazania, np. Name, Id, CPU. To parametr pozycyjny, więc nazwę często się pomija.
  • -ExcludeProperty — odwrotność: pokaż wszystko poza wskazanymi właściwościami.
  • -First — bierze pierwsze N obiektów z potoku.
  • -Last — bierze ostatnie N obiektów.
  • -Skip — pomija pierwsze N obiektów; -SkipLast pomija N od końca.
  • -Index — wybiera obiekty po indeksie liczonym od 0 (np. 0,2,4).
  • -Unique — usuwa duplikaty; uwaga, jest wrażliwy na wielkość liter.
  • -ExpandProperty — rozwija jedną właściwość i zwraca jej surową wartość zamiast obiektu opakowującego.

Przykłady użycia

Get-Process | Select-Object -First 5 — pokazuje pięć pierwszych procesów z listy, idealne do podejrzenia formatu danych.

Get-Process | Select-Object Name, Id, CPU — zawęża wynik do trzech kolumn zamiast całej ściany właściwości.

Get-Service | Select-Object -Property Name -ExpandProperty Name — zwraca czystą listę nazw jako stringi, a nie obiekty (świetne do przekazania dalej w potoku albo do pętli).

Get-ChildItem | Select-Object -Skip 2 -First 3 — pomija dwa pierwsze pliki i bierze trzy kolejne, czyli paginacja na piechotę.

Get-Content log.txt | Select-Object -Unique — zwraca tylko unikalne wiersze z pliku, przydatne przy odsiewaniu powtórzeń.

Częste błędy i pułapki

Najczęstsza wpadka to mylenie Select-Object z Where-Object. To pierwsze wybiera które kolumny i ile wierszy, drugie filtruje które wiersze spełniają warunek. Jeśli chcesz tylko działające usługi, potrzebujesz Where-Object, nie Select-Object.

Druga pułapka: -ExpandProperty rozwija dokładnie jedną właściwość i wybucha błędem, gdy nazwa rozwijanej właściwości koliduje z inną wybraną. Nie próbuj rozwijać dwóch naraz — od tego jest osobne wywołanie.

Pamiętaj też, że -First potrafi przerwać potok wcześniej, gdy tylko zbierze tyle obiektów, ile zażądałeś — to optymalizacja, nie błąd, ale zaskakuje przy poleceniach z efektami ubocznymi. I jeszcze drobiazg: -Unique rozróżnia Plik od plik, więc jeśli chcesz ignorować wielkość liter, posortuj wcześniej albo użyj innego podejścia.

Powiązane komendy: Where-Object (filtrowanie obiektów), Sort-Object (sortowanie), Format-Table i Format-List (prezentacja), ForEach-Object (przetwarzanie po kolei), Get-Member (podgląd dostępnych właściwości).