Główna » jak » Nauka w szkole uczącej się Jak korzystać z obiektów w PowerShell

    Nauka w szkole uczącej się Jak korzystać z obiektów w PowerShell

    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.

    Zapoznaj się z poprzednimi artykułami 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 kiedykolwiek zastanawiałeś się, co odróżnia PowerShell od tradycyjnej powłoki Linuksa, 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ć jakąkolwiek ciężką analizę tekstu, musisz znać wyrażenia regularne, takie jak tył twojej dłoni.

    PowerShell wykorzystuje bazową strukturę .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ę Windows jako obiekt, możemy 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 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, których 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.

    The Pipeline

    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 go 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. Sztuczka polega na tym, aby wiedzieć, jaki typ obiektu przywraca 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 obrazku 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 przyjmuje tablicę obiektów ServiceController jako dane wejściowe. Zwykle, jeśli widzisz parametr o nazwie InputObject, to zaakceptuje on dane wejściowe z potoku, ale po prostu spójrzmy na pełną pomoc 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 na Pipeline Obiektu

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