If-Koubou

Geek School: Nauka formatowania, filtrowania i porównywania w PowerShell

Geek School: Nauka formatowania, filtrowania i porównywania w PowerShell (Jak)

W tym wydaniu Geek School patrzymy na formatowanie, filtrowanie i porównywanie obiektów w potoku.

Przeczytaj poprzednie artykuły z serii:

  • Dowiedz się, jak zautomatyzować system Windows za pomocą programu PowerShell
  • Nauka korzystania z poleceń cmdlet w PowerShell
  • Nauka korzystania z obiektów w PowerShell

I pozostańcie czujni przez resztę serii przez cały tydzień.

Domyślne formatowanie

Kiedy po raz pierwszy zacząłem pracę z PowerShellem, pomyślałem, że wszystko jest magiczne, ale prawdą jest, że wystarczy trochę czasu, aby zrozumieć, co dzieje się pod maską. To samo dotyczy systemu formatowania PowerShell. W rzeczywistości, jeśli uruchomisz polecenie cmdlet Get-Service, wygenerowane dane wyjściowe pokażą tylko 3 właściwości: Status, Name i DisplayName.

Ale jeśli potrącisz Get-Service do Get-Member, zobaczysz, że obiekty kontrolera ServiceController mają o wiele więcej niż tylko te trzy właściwości, więc co się dzieje?

Odpowiedź leży w ukrytym pliku, który określa, w jaki sposób większość wbudowanych poleceń cmdlet wyświetla ich wyniki. Aby uzyskać zrozumienie, wpisz następujące polecenie w powłoce i naciśnij enter.

Notatnik C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml

Jeśli użyjemy funkcji Znajdź w Notatniku, możemy szybko przejść do sekcji, która szczegółowo opisuje wynik polecenia cmdlet Get-Service, wyszukując typ ServiceController.

Nagle widać, że pod maską PowerShell formatuje dowolne obiekty w potoku, które są typu ServiceController i tworzy tabelę z trzema kolumnami: Status, Nazwa i DisplayName. Ale co jeśli typ, z którym masz do czynienia, nie ma wpisu w tym pliku lub jakiegokolwiek innego pliku formatu? To naprawdę proste. Jeśli obiekt wychodzący z potoku ma 5 lub więcej właściwości, PowerShell wyświetla wszystkie właściwości obiektu na liście; jeśli ma mniej niż 5 właściwości, wyświetla je w tabeli.

Formatowanie danych

Jeśli nie jesteś zadowolony z domyślnego formatowania obiektu lub typu, możesz rozwinąć własne formatowanie. Istnieją trzy cmdlety, które musisz wiedzieć, aby to zrobić.

  • Formatuj listę
  • Formatuj tabelę
  • Format-szeroki

Format-szeroki po prostu pobiera kolekcję obiektów i wyświetla pojedynczą właściwość każdego obiektu. Domyślnie będzie szukać właściwości nazwy; jeśli twoje obiekty nie zawierają właściwości name, użyje pierwszej właściwości obiektu, gdy właściwości zostaną posortowane alfabetycznie.

Get-Service | Format-szeroki

Jak widać, domyślnie są to dwie kolumny, chociaż możesz określić zarówno właściwość, z której chcesz korzystać, jak i liczbę kolumn, które chcesz wyświetlić.

Get-Service | Format-szeroki - Właściwość DisplayName - kolumna 6

Jeśli coś jest domyślnie sformatowane jako tabela, zawsze można go przełączyć do widoku listy za pomocą polecenia cmdlet listy formatów. Rzućmy okiem na wynik polecenia cmdlet Get-Process.

Ten widok tabelaryczny bardzo dobrze pasuje do tego rodzaju informacji, ale udawajmy, że chcemy go zobaczyć w formie listy. Wszystko, co naprawdę musimy zrobić, to podłączyć do niego Formatuj listę.

Get-Process | Formatuj listę

Jak widać, domyślnie wyświetlane są tylko cztery pozycje na liście. Aby wyświetlić wszystkie właściwości obiektu, możesz użyć znaku wieloznacznego.

Get-Process | Lista formatów - właściwość *

Alternatywnie możesz wybrać tylko żądane właściwości.

Get-Process | Format-lista -Właściwość nazwa, id

Formatuj tabelę, z drugiej strony pobiera dane i przekształca je w tabelę. Ponieważ nasze dane z Get-Process mają już postać tabeli, możemy z niej skorzystać, aby łatwo wybrać właściwości, które chcemy wyświetlić w tabeli. Użyłem parametru AutoSize, aby wszystkie dane pasowały do ​​jednego ekranu.

Get-Process | Nazwa tabeli formatu, id -AutoSize

Filtrowanie i porównywanie

Jedną z najlepszych rzeczy w korzystaniu z potoku opartego na obiektach jest możliwość filtrowania obiektów z potoku na dowolnym etapie za pomocą polecenia cmdlet Where-Object.

Get-Service | Where-Object $ _. Status -eq "Running"

Używanie, gdzie obiekt jest rzeczywiście bardzo prosty. $ _ reprezentuje bieżący obiekt potoku, z którego można wybrać właściwość, którą chcesz filtrować. Tutaj były tylko obiekty, w których właściwość Status równa się Running. Istnieje kilka operatorów porównania, których możesz użyć w bloku skryptu filtrującego:

  • eq (równy z)
  • neq (nie równe)
  • gt (większy niż)
  • ge (większy niż lub równy)
  • lt (mniej niż)
  • le (mniej niż lub równy)
  • like (Wildcard String Match)

Pełną listę i więcej informacji można przejrzeć w konceptualnym pliku pomocy about_comparison, jednak zajmuje trochę czasu przyzwyczajenie się do składni Where-Obeject. To wszystko na ten czas!