If-Koubou

Geek School: Naucz się używać zadań w PowerShell

Geek School: Naucz się używać zadań w PowerShell (Jak)

PowerShell ma cztery typy zadań - Zadania w tle, Zadania zdalne, Zadania WMI i Zaplanowane zadania. Dołącz do nas, gdy dowiemy się, co to jest i jak możemy z nich korzystać.

Przeczytaj poprzednie artykuły z serii:

  • Dowiedz się, jak zautomatyzować system Windows za pomocą programu PowerShell
  • Nauka korzystania z poleceń cmdlet w PowerShell
  • Nauka korzystania z obiektów w PowerShell
  • Nauka formatowania, filtrowania i porównywania w PowerShell
  • Naucz się korzystać z Remotingu w PowerShell
  • Używanie PowerShell do uzyskiwania informacji o komputerze
  • Praca z kolekcjami w PowerShell

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

Zadania w tle

Do tej pory wszystko, co pokazałem ci w PowerShell, było synchroniczne, co oznacza, że ​​wpisujemy coś do powłoki i nie możemy zrobić zbyt wiele, dopóki polecenie to nie zostanie wykonane. W tym miejscu pojawiają się zadania w tle. Aby rozpocząć pracę w tle, zadanie należy po prostu przekazać blokowi skryptu do polecenia cmdlet Start-Job.

Start-Job -Name GetFileList -Scriptblock Get-ChildItem C: \ -Recurse

Teraz możemy swobodnie robić, co chcemy w powłoce, podczas gdy ten blok skryptu jest wykonywany w tle.

Po uruchomieniu nowego zadania PowerShell tworzy nowy obiekt zadania, który reprezentuje to zadanie. Listę wszystkich zadań można uzyskać w dowolnym momencie, uruchamiając polecenie cmdlet Get-Job.

Obiekty zadań informują o statusie zadań. Na przykład na powyższym zrzucie ekranu widzimy, że mamy usługę BackgroundJob o nazwie GetFileList, która wciąż działa, ale już zaczęła zwracać dane. Jeśli w dowolnym momencie zdecydujesz, że zadanie jest uruchomione zbyt długo, możesz je łatwo zatrzymać, przepuszczając je do Stop-Job.

Get-Job -Name GetFileList | Zatrzymaj zadanie

Jednak po zatrzymaniu pracy, wszelkie dane, które otrzymały do ​​momentu zatrzymania, są nadal dostępne. Jest jednak gafa. W PowerShell po otrzymaniu wyników dla zadania zostają one usunięte. Aby je pozostawić, musisz określić parametr przełącznika "Odbierz zadanie".

Get-Job -Name GetFileList | Odbieranie-praca -Trzymaj

Po zakończeniu pracy najlepiej ją usunąć. Aby usunąć zadanie, po prostu przeprowadź je do polecenia cmdlet Remove-Job.

Get-Job -Name GetFileList | Usuń zadanie

Spowoduje to usunięcie go z listy zadań zwróconych przez Get-Job.

Zdalne zadania

Kilka lekcji temu przyjrzeliśmy się sposobowi, w jaki możemy używać zdalnego dostępu do wykonywania poleceń PowerShell na zdalnym komputerze za pomocą polecenia Invoke-Command, ale czy wiesz, że możesz także użyć polecenia Invoke-Command, aby uruchomić zdalną pracę w tle? Aby to zrobić, po prostu dodaj parametr -AsJob na końcu polecenia:

Invoke-Command-ComputerName Flash, Viper -Credential-administratorBlock gci -AsJob

To było proste polecenie i powinno już zostać zakończone, więc przyjrzyjmy się naszemu statusowi pracy.

Hmm, wygląda na to, że się nie udało. To sprawia, że ​​zaczynam pracę. Podczas tworzenia nowego zadania dowolnego typu w PowerShell tworzy jedno zadanie nadrzędne oprócz jednego zadania podrzędnego dla każdego komputera, na którym działa zadanie. Gdy używasz polecenia cmdlet Get-Job, pokazuje tylko zadania nadrzędne, a właściwość stanu jest najgorszym scenariuszem, co oznacza, że ​​nawet jeśli polecenie nie działa tylko na jednym ze stu komputerów, stan nadrzędnych zadań powie: nie udało się. Aby wyświetlić listę zadań podrzędnych, należy użyć parametru IncludeChildJob.

Jeśli przyjrzysz się bliżej, zobaczysz, że zadanie rzeczywiście zawiodło tylko na jednym komputerze, co doprowadziło nas do następnego trafienia. Kiedy próbujesz uzyskać wyniki dla zadania, jeśli podasz nazwę lub identyfikator zadania rodzica, PowerShell zwróci dane ze wszystkich zadań podrzędnych. Problem polega na tym, że jeśli wystąpił błąd w jednym z zadań podrzędnych, pozostanie nam trochę czerwonego tekstu.

Są dwa sposoby na obejście tego. Po pierwsze, jeśli wiesz, na jakie komputery chcesz uzyskać wyniki, możesz po prostu użyć parametru ComputerName polecenia cmdlet Recieve -Job.

Get-Job -Id 3 | Receive-Job-Kee - Nazwa komputera Viper

Możesz również uzyskać wyniki z określonego zadania podrzędnego, używając jego identyfikatora zadania.

Get-Job -Id 3 -IncludeChildJob

Get-Job -Id 5 | Odbieranie-praca -Trzymaj

Praca WMI

Zadania WMI są takie same jak zadania zdalne, wymagające dodania tylko parametru -AsJob do polecenia cmdlet Get-WmiObject.

Niestety oznacza to, że są one również przedmiotem tych samych gier, o których wspomniałem w sekcji "Zadania zdalne".

Zaplanowane zadania

Trzy ostatnie typy zleceń, które rozpatrywaliśmy, nie były trwałe, co oznacza, że ​​są dostępne tylko w bieżącej sesji. Zasadniczo oznacza to, że jeśli uruchomisz zadanie, a następnie otworzysz kolejną konsolę PowerShell i uruchomisz zadanie Pobierz, nie zobaczysz żadnych zadań. Wróć jednak do konsoli, z której wykopałeś zadanie, aby zobaczyć jego status. Jest to przeciwieństwo Zaplanowanych zadań, które są trwałe. Zasadniczo Zaplanowane zadanie jest blokiem skryptu uruchamianym według harmonogramu. W przeszłości ten sam efekt mógł zostać osiągnięty za pomocą Windows Task Scheduler, który tak naprawdę dzieje się pod maską. Aby utworzyć nowe Zaplanowane zadanie, wykonaj następujące czynności:

Register-ScheduledJob -Name GetEventLogs -ScriptBlock Get-EventLog -LogName Security -Newest 100 -Trigger (New-JobTrigger -Daily -At 5pm) -ScheduledJobOption (New-ScheduledJobOption -RunElevated)

W tym poleceniu dzieje się całkiem sporo, więc zróbmy to.

  • Po pierwsze, nadajemy naszej Zaplanowanej pracy nazwę GetEventLogs.
  • Następnie mówimy, że po uruchomieniu chcemy, aby uruchomiła zawartość określonego bloku skryptu, który zasadniczo otrzymuje najnowsze 100 wpisów dziennika zdarzeń Security.
  • Następnie określamy wyzwalacz.Ponieważ parametr wyzwalacza przyjmuje obiekt wyzwalacza jako dane wejściowe, użyliśmy komendy parentetycznej do wygenerowania wyzwalacza, który będzie uruchamiany codziennie o godzinie 17:00.
  • Ponieważ mamy do czynienia z dziennikiem zdarzeń, musimy uruchomić go jako administrator, który możemy określić, tworząc nowy obiekt ScheduledJobOption i przekazując go do parametru ScheduledJobOption.

Ponieważ jest to nieco inny typ zadania, konieczne będzie również użycie innego polecenia w celu pobrania listy wszystkich zaplanowanych zadań na komputerze.

Get-ScheduledJob

To wszystko.