/ / Geek School: Naucz się korzystać z zadań w PowerShell

Geek School: Naucz się korzystać z zadań w PowerShell

PowerShell ma cztery typy zadań - zadania w tle, zadania zdalne, zadania WMI i zadania zaplanowane. Dołącz do nas, gdy dowiemy się, czym one są 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 programie PowerShell
  • Nauka używania obiektów w PowerShell
  • Nauka formatowania, filtrowania i porównywania w PowerShell
  • Naucz się korzystać z Remoting w PowerShell
  • Korzystanie z programu PowerShell w celu uzyskania informacji o komputerze
  • Praca z kolekcjami w PowerShell

I bądź na bieżąco z resztą serialu przez cały tydzień.

Zadania w tle

Do tej pory wszystko, co wam pokazałemPowerShell jest zsynchronizowany, co oznacza, że ​​wpisujemy coś w powłoce i niewiele możemy zrobić, dopóki to polecenie nie zakończy się. W tym miejscu pojawiają się zadania w tle. Aby uruchomić tło, po prostu przekaż blok skryptu do polecenia cmdlet Start-Job.

Start-Job –Nazwa GetFileList –Scriptblock {Get-ChildItem C: –Recurse}

wizerunek

Teraz możemy robić wszystko, co chcemy w powłoce, podczas gdy ten blok skryptu działa w tle.

wizerunek

Po rozpoczęciu 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.

wizerunek

Obiekty zadania informują o statusieOferty pracy. Na przykład na powyższym zrzucie ekranu możemy zobaczyć, że mamy BackgroundJob o nazwie GetFileList, który wciąż działa, ale już zaczął zwracać dane. Jeśli w dowolnym momencie zdecydujesz, że zadanie działało zbyt długo, możesz łatwo je zatrzymać, przesyłając je do Stop-Job.

Get-Job –Nazwa GetFileList | Stop-Job

wizerunek

Jednak po zatrzymaniu pracy, cokolwiekdane, które otrzymał do momentu zatrzymania, są nadal dostępne. Jest jednak gotcha. W programie PowerShell wyniki otrzymane dla zadania są usuwane. Aby pozostały, musisz określić parametr przełącznika utrzymania dla Odbioru – Zadania.

Get-Job –Nazwa GetFileList | Receive-Job - Keep

wizerunek

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

Get-Job –Nazwa GetFileList | Usuń zadanie

Spowoduje to usunięcie go z listy zadań zwracanych przez Get-Job.

wizerunek

Zdalne prace

Kilka lekcji temu zastanawialiśmy się, jak możemy z tego skorzystaćzdalne uruchamianie poleceń PowerShell na zdalnym komputerze za pomocą Invoke-Command, ale czy wiesz, że możesz także użyć Invoke-Command, aby rozpocząć pracę zdalną w tle? Aby to zrobić, po prostu dodaj parametr –AsJob na końcu polecenia:

Invoke-Command -ComputerName Flash, Viper-Administrator poświadczeń -ScriptBlock {gci} –AsJob

wizerunek

To było proste polecenie i powinno już zostać zakończone, więc spójrzmy na status naszych zadań.

wizerunek

Hmm, wygląda na to, że się nie udało. To przenosi mnie do mojej pierwszej pracy z pracą. Podczas tworzenia nowego zadania dowolnego typu w programie PowerShell tworzy ono jedno zadanie nadrzędne oprócz jednego zadania podrzędnego dla każdego komputera, na którym jest uruchomione. Podczas używania polecenia cmdlet Get-Job pokazuje tylko zadania nadrzędne, a właściwość state jest najgorszym scenariuszem, co oznacza, że ​​nawet jeśli polecenie nie uruchomi się tylko na jednym ze stu komputerów, stan zadań nadrzędnych powie: nie powiodło się Aby zobaczyć listę zadań podrzędnych, musisz użyć parametru IncludeChildJob.

wizerunek

Jeśli przyjrzysz się bliżej, zobaczysz, że zadanie się spełniłow rzeczywistości zawodzi tylko na jednym komputerze, co prowadzi nas do następnej gotcha. Gdy spróbujesz uzyskać wyniki zadania, jeśli podasz nazwę lub identyfikator zadania rodzica, PowerShell zwróci dane ze wszystkich zadań potomnych. Problem polega na tym, że jeśli wystąpił błąd w jednym z zadań podrzędnych, zostanie nam czerwony tekst.

wizerunek

Można to obejść na dwa sposoby. Po pierwsze, jeśli wiesz, dla jakich komputerów chcesz uzyskać wyniki, możesz po prostu użyć parametru ComputerName polecenia cmdlet Recieve –Job.

Get-Job –Id 3 | Odbierz-Job –Keep –ComputerName Viper

wizerunek

Alternatywnie można uzyskać wyniki z określonego zadania podrzędnego, używając jego identyfikatora zadania.

Get-Job -Id 3 –IncludeChildJob

wizerunek

Get-Job -Id 5 | Receive-Job - Keep

wizerunek

WMI Jobs

Zadania WMI są bardzo podobne do Zadań zdalnych, wymagając tylko dodania parametru –AsJob do polecenia cmdlet Get-WmiObject.

wizerunek

wizerunek

Niestety oznacza to, że podlegają one również tym samym problemom, o których wspomniałem w sekcji Zadania zdalne.

Zaplanowane prace

Ostatnie trzy rodzaje prac, na które spojrzeliśmynietrwałe, co oznacza, że ​​są dostępne tylko w bieżącej sesji. Zasadniczo oznacza to, że jeśli uruchomisz zadanie, a następnie otworzysz inną konsolę PowerShell i uruchomisz Get-Job, nie zobaczysz żadnych zadań. Wróć jednak do konsoli, z której wykonałeś zadanie, będziesz mógł zobaczyć jego status. Jest to sprzeczne z zaplanowanymi zadaniami, które są trwałe. Zasadniczo Zaplanowane Zadanie jest blokiem skryptuktóry działa zgodnie z harmonogramem. W przeszłości ten sam efekt można było uzyskać za pomocą Harmonogramu zadań systemu Windows, który tak naprawdę dzieje się pod maską. Aby utworzyć nowe Zaplanowane zadanie, wykonujemy następujące czynności:

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

W tym poleceniu dzieje się całkiem sporo, więc podzielmy to.

  • Po pierwsze, nadajemy naszej Zaplanowanej Pracy nazwę GetEventLogs.
  • Mówimy wtedy, że po uruchomieniu chcemy uruchomić zawartość określonego bloku skryptu, który w zasadzie pobiera 100 najnowszych wpisów w dzienniku zdarzeń bezpieczeństwa.
  • Następnie określamy wyzwalacz. Ponieważ parametr wyzwalacza przyjmuje obiekt wyzwalający jako dane wejściowe, użyliśmy polecenia w nawiasie, aby wygenerować wyzwalacz, który będzie uruchamiał się codziennie o 17:00.
  • Ponieważ mamy do czynienia z dziennikiem zdarzeń, musimy działać jako administrator, co możemy określić, tworząc nowy obiekt ScheduledJobOption i przekazując go do parametru ScheduledJobOption.

wizerunek

Ponieważ jest to nieco inny rodzaj zadania, konieczne będzie również użycie innego polecenia, aby pobrać listę wszystkich zaplanowanych zadań na komputerze.

Get-ScheduledJob

wizerunek

To wszystko.