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:
I pozostańcie czujni przez resztę serii przez cały tydzień.
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.
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:
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.
Jeśli masz jakieś pytania, możesz tweetować mnie @taybgibb, lub po prostu zostaw komentarz.