If-Koubou

Geek School: Nauka korzystania z obiektów w PowerShell

Geek School: Nauka korzystania z obiektów w PowerShell (Jak)

Zrozumienie obiektów jest jednym z podstawowych pojęć "uzyskiwania" PowerShell. Dołącz do nas, gdy odkrywamy obiekty i jak sprawiają, że PowerShell jest lepszy niż jakakolwiek inna obecnie dostępna.

Przeczytaj poprzednie artykuły z serii:

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

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

Obiekty

Czy zastanawiałeś się kiedyś, co odróżnia PowerShell od tradycyjnej powłoki Linux-a, takiej jak Bash, czy nawet starszego wiersza poleceń? Odpowiedź jest bardzo prosta: tradycyjne powłoki generują tekst, co utrudnia wykonywanie takich czynności, jak formatowanie i filtrowanie. Oczywiście istnieją narzędzia, które pomogą Ci wykonać zadanie (sed i grep przychodzą na myśl), ale na koniec dnia, jeśli chcesz wykonać intensywne przetwarzanie tekstu, musisz znać wyrażenia regularne, takie jak tył twojej dłoni.

PowerShell wykorzystuje podstawową platformę .Net i przyjmuje inne podejście, używając obiektów zamiast tekstu. Obiekty są po prostu reprezentacją czegoś. Są zbiorem części i działań, aby z nich korzystać. Przyjrzyjmy się częściom roweru i sposobom ich wykorzystania.

Obiekty w .Net są bardzo podobne, z wyjątkiem dwóch małych różnic: wywoływane są "Części" nieruchomości i "Instrukcje" są wywoływane metody. Jeśli chcielibyśmy reprezentować usługę systemu Windows jako obiekt, możemy zdecydować, że właściwe jest opisanie jej za pomocą trzech właściwości: nazwa usługi, stan i opis. Musimy również wchodzić w interakcje z usługą, abyśmy mogli nadać obiektowi metodę Start, Stop i Pause.

Możesz zobaczyć właściwości i metody obiektu, przekazując go do cmdletu Get-Member. Obiekty wyjściowe polecenia cmdlet programu PowerShell są w dużej mierze podstawowymi typami ze środowiska .Net, ale można tworzyć własne obiekty, jeśli trzeba użyć języka takiego jak C # lub użyć typu PSObject.

Rurociąg

Istnieje wiele powłok Linuxa z potokiem, co pozwala wysłać tekst, który jedno polecenie wyprowadza jako dane wejściowe do następnego polecenia w potoku. PowerShell przenosi to na wyższy poziom, umożliwiając pobranie obiektów, które wyprowadza jedno polecenie cmdlet i przekazanie ich jako danych wejściowych do następnego polecenia cmdlet w potoku. Sztuką jest wiedzieć, jaki typ obiektu zwraca polecenie cmdlet, co jest bardzo proste przy użyciu polecenia cmdlet Get-Member.

Get-Service | Get-Member

Z przyczyn wykraczających poza zakres tego artykułu właściwości i metody są wspólnie nazywane członkami klasy, co wyjaśnia, dlaczego używasz polecenia cmdlet Get-Member, aby uzyskać listę wszystkich metod i właściwości obiektu. Polecenie cmdlet Get-Member zwraca również inną ważną informację, będącą podstawowym typem obiektu. Na powyższym zrzucie widać, że Get-Service zwraca obiekty typu:

System.ServiceProcess.ServiceController

Ponieważ PowerShell zajmuje się obiektami, a nie tekstem, nie wszystkie cmdlety mogą być ze sobą połączone za pomocą potoku [1]. Oznacza to, że musimy znaleźć cmdlet, który chce zaakceptować obiekt System.ServiceProcess.ServiceController z potoku.

Get-Command -ParameterType System.ServiceProcess.ServiceController

Zauważ, że istnieje cmdlet o nazwie Stop-Service; spójrzmy na pomoc dla niego.

Get-Help -Name Stop-Service

Wygląda na to, że parametr InputObject pobiera tablicę obiektów ServiceController jako dane wejściowe. Zwykle, jeśli widzisz parametr o nazwie InputObject, to będzie on akceptował dane wejściowe z potoku, ale dla pewności przyjrzyjmy się pełnej pomocy dla tego parametru.

Get-Help -Name Stop-Service -Full

Nasze podejrzenia były prawidłowe. W tym momencie wiemy, co następuje:

  • Get-Service zwraca obiekty ServiceController
  • Stop-Service ma parametr o nazwie InputObject, który akceptuje jeden lub więcej kontrolerów ServiceController jako dane wejściowe.
  • Parametr InputObject akceptuje wejście potoku.

Korzystając z tych informacji, możemy wykonać następujące czynności:

Get-Service -Name "Urządzenie mobilne Apple" | Stop-Service

To wszystko na ten czas ludzie. Następnym razem sprawdzimy, jak możemy formatować, filtrować i porównywać obiekty w potoku.

Zadanie domowe

  • Czytaj w Pipeline obiektu

Jeśli masz jakieś pytania, możesz tweetować mnie @taybgibb, lub po prostu zostaw komentarz.