19Aug
W tym wydaniu Geek School przyjrzymy się formatowaniu, filtrowaniu i porównywaniu obiektów w potoku.
Zapoznaj się z poprzednimi artykułami z serii:
- Dowiedz się, jak zautomatyzować system Windows za pomocą programu PowerShell
- Nauka korzystania z poleceń Cmdlets w programie PowerShell
- Nauka korzystania z obiektów w programie PowerShell
Pozostań zestrojony przez resztę serii przez cały tydzień.
Domyślne formatowanie
Kiedy zaczynałem od PowerShella, myślałem, że wszystko jest magiczne, ale prawda jest taka, że zajmuje 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ź znajduje się w ukrytym pliku, który określa, jak większość wbudowanych cmdletów 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żywamy funkcji Znajdź notatnika, możemy szybko przejść do sekcji, która szczegółowo opisuje wynik polecenia cmdlet Get-Service, wyszukując ServiceControllerrodzaj.
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
- Formatuj
w całym formacie 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 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 przy użyciu 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 powiedzmy, że chcemy go wyświetlić w formie listy. Wszystko, co naprawdę musimy zrobić, to podłączyć do Pobierz procesFormatuj listę Jak widać, tylko cztery pozycje są domyślnie wyświetlane na liście. Aby wyświetlić wszystkie właściwości obiektu, możesz użyć znaku wieloznacznego. Pobierz procesFormat-List -Property * Alternatywnie możesz wybrać tylko żądane właściwości. Pobierz procesFormat-List -Property name, id Format-Table, 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. Pobierz procesNazwa tabeli formatowania, id -AutoSize Jedną z najlepszych rzeczy w używaniu 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żna użyć w bloku skryptu filtrującego: Pełna lista i więcej informacji można przeglądać w konceptualnym pliku pomocy about_comparison, jednak zajmuje trochę czasu przyzwyczajenie się do składni Where-Obeject. To wszystko na ten czas! Filtrowanie i porównywanie