Skip to content

Geek School: nauka korzystania z obiektów w PowerShell

19 de lipiec de 2021
sshot5150b3c58b51f 1024x412 1

Zrozumienie obiektów jest jednym z podstawowych pojęć „pobierania” PowerShell. Dołącz do nas, gdy będziemy badać obiekty i jak sprawiają, że PowerShell jest lepszy niż jakakolwiek inna powłoka dostępna dzisiaj.

Koniecznie przeczytaj poprzednie artykuły z serii:

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

I czekaj na resztę serii przez cały tydzień.

Obiekty

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

PowerShell korzysta z podstawowej struktury .Net i stosuje inne podejście, używając obiektów zamiast tekstu. Przedmioty są tylko reprezentacją czegoś. Są zbiorem części i czynności, które ich używają. Przyjrzyjmy się częściom roweru i sposobom ich wykorzystania.

1626709288 931 Geek School nauka korzystania z obiektow w PowerShell


Obiekty w .Net są prawie takie same, z wyjątkiem dwóch małych różnic: „Części” są nazywane nieruchomości a „Instrukcje” nazywają się metody. Gdybyśmy chcieli reprezentować usługę systemu Windows jako obiekt, moglibyśmy zdecydować, że właściwe jest opisanie jej za pomocą trzech właściwości: nazwy usługi, stanu i opisu. Musimy również wchodzić w interakcję z usługą, więc możemy nadać obiektowi metodę Start, Stop i Pause.

1626709288 556 Geek School nauka korzystania z obiektow w PowerShell

Możesz zobaczyć właściwości i metody obiektu, przekazując je do polecenia cmdlet Get-Member. Obiekty wyprowadzane przez polecenie cmdlet programu PowerShell są w dużej mierze podstawowymi typami z platformy .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 Linuksa z potoku, umożliwiających wysyłanie tekstu, który jedno polecenie wyprowadza jako dane wejściowe do następnego polecenia w potoku. Program PowerShell przenosi to na wyższy poziom, umożliwiając pobieranie obiektów, które wyprowadza jedno polecenie cmdlet i przekazywanie ich jako danych wejściowych do następnego polecenia cmdlet w potoku. Sztuczka polega na tym, aby wiedzieć, jaki typ obiektu zwraca polecenie cmdlet, co jest naprawdę łatwe w przypadku korzystania z polecenia cmdlet Get-Member.

Get-Service | Uzyskaj członka

1626709288 417 Geek School nauka korzystania z obiektow w PowerShell

Z powodów 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. Jednak polecenie cmdlet Get-Member zwraca również inną ważną informację, podstawowy typ obiektu. Na powyższym zrzucie widzimy, że Get-Service zwraca obiekty typu:

System.ServiceProcess.ServiceController

Ponieważ PowerShell zajmuje się obiektami, a nie tekstem, nie wszystkie polecenia cmdlet można połączyć ze sobą za pomocą potoku[1]. Oznacza to, że musimy znaleźć polecenie cmdlet, które chce zaakceptować obiekt System.ServiceProcess.ServiceController z potoku.

Get-Command -ParameterType System.ServiceProcess.ServiceController

1626709288 471 Geek School nauka korzystania z obiektow w PowerShell

Zauważ, że istnieje polecenie cmdlet o nazwie Stop-Service; spójrzmy na pomoc do tego.

Get-Help – Nazwa Stop-Service

1626709288 618 Geek School nauka korzystania z obiektow w PowerShell


Wygląda na to, że parametr InputObject przyjmuje jako dane wejściowe tablicę obiektów ServiceController. Zwykle, jeśli widzisz parametr o nazwie InputObject, zaakceptuje on dane wejściowe z potoku, ale dla pewności spójrzmy na pełną pomoc dotyczącą tego parametru.

Get-Help -Name Stop-Service -Full

1626709288 239 Geek School nauka korzystania z obiektow w PowerShell

Nasze podejrzenia były słuszne. 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 ServiceControllers jako dane wejściowe.
  • Parametr InputObject akceptuje dane wejściowe potoku.

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

Get-Service — nazwa „Urządzenie mobilne Apple” | Zatrzymaj usługę

1626709288 353 Geek School nauka korzystania z obiektow w PowerShell

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

Zadanie domowe

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

Czy ten post był pomocny?