Adam Automator

czy musisz tworzyć wiele zaplanowanych zadań lub automatyzować tworzenie zaplanowanych zadań? Jeśli tak, masz szczęście. W tym artykule dowiesz się, jak zarządzać zaplanowanymi zadaniami za pomocą programu PowerShell.

Zaplanowane zadania, które wykonują proste czynności, są szybkie i wystarczająco wygodne, aby powtórzyć za pomocą interfejsu aplikacji Harmonogramu zadań (GUI). Administratorzy systemu lub programiści mogą jednak wymagać wdrożenia bardziej skomplikowanych zadań z wieloma harmonogramami, wyzwalaczami lub argumentami.

na szczęście możesz używać PowerShell do tworzenia zaplanowanych zadań i zarządzania nimi. Zarządzanie zaplanowanymi zadaniami za pomocą PowerShell jest możliwe za pomocą modułu ScheduledTasks wbudowanego w System Windows.

spis treści

wymagania wstępne

ponieważ jest to artykuł typu Nauka przez Działanie, Istnieją pewne wymagania wstępne, które można śledzić. Poniżej znajdują się wymagania dotyczące tworzenia zaplanowanych zadań programu PowerShell za pomocą programu PowerShell.

  • przykłady w tym artykule używają systemu Windows 10. Ale Windows Server 2012 i nowsze mogą zrobić to samo.
  • Windows PowerShell 5.1 lub PowerShell 7.
  • pomogłoby, gdybyś miał Edytor skryptów, taki jak Visual Studio Code, Notepad++ lub Windows PowerShell ISE.

Tworzenie nowego zaplanowanego zadania

zaplanowane zadanie wymaga do działania co najmniej dwóch komponentów; action i trigger. Dodanie kontekstu zabezpieczeń i zestawu powiązanych ustawień jest opcjonalne. Aby lepiej zrozumieć, zapoznaj się z krótkim wyjaśnieniem każdego komponentu zaplanowanego zadania poniżej:

  • Action – akcja wykonywana przez zaplanowane zadanie. Akcja zazwyczaj polega na uruchomieniu programu lub skryptu. Zaplanowane zadanie może mieć więcej niż jedno działanie.
  • steruje wyzwalaniem podczas uruchamiania zaplanowanego zadania. Wyzwalacze mogą być oparte na czasie, np. ustawianie harmonogramu powtarzania dziennego lub godzinowego. Wyzwalacze mogą być również oparte na aktywności, która uruchamia zadanie na podstawie wykrytych działań, takich jak uruchamianie komputera, logowanie użytkownika lub zarejestrowane zdarzenia.
  • Principal – kontroluje kontekst bezpieczeństwa używany do uruchomienia zaplanowanego zadania. Zleceniodawca obejmuje między innymi konto użytkownika i wymagane uprawnienia używane przez zaplanowane zadanie.
  • Settings-to zestaw opcji i warunków, które kontrolują zachowanie zaplanowanego zadania. Na przykład możesz dostosować zadanie, aby zostało usunięte po kolejnych dniach, gdy zadanie jest nieużywane.

podczas tworzenia zaplanowanego zadania nie są wyraźnie wymagane główne Ustawienia i ustawienia. Zamiast tego używane są wartości domyślne.

Tworzenie akcji zadania

Jeśli chcesz, aby zaplanowane zadanie coś wykonało, Utwórz nową akcję zadania. W tym przykładzie utworzysz zadanie, które wywoła PowerShell.exe i uruchom skrypt. Upewnij się, że twój edytor skryptów jest gotowy.

zauważ, że poniższy skrypt jest tylko losowym przykładem i nie musisz go używać. Możesz użyć dowolnego skryptu, który chcesz. Jednak korzystanie z poniższego skryptu tworzy łatwy do zweryfikowania wynik, który może potwierdzić, czy zaplanowane zadanie zadziałało.

poniższy przykładowy skrypt, po uruchomieniu, pobiera dziesięć ostatnich zdarzeń z dziennika zdarzeń aplikacji. Następnie wyeksportuj zdarzenia do nowego pliku XML w c:\temp folder. Skopiuj poniższy kod, wklej go do Edytora skryptów i zapisz z nazwą pliku Get-LatestAppLog. ps1 w dowolnym folderze, który chcesz.

poniższy kod wykorzystujeNew-ScheduledTaskAction do utworzenia nowego obiektu akcji zaplanowanych zadań przechowywanego w zmiennej$taskAction. Ta akcja wywoła plik wykonywalny powershell.exe I przekaże argument do uruchomienia C:\scripts\Get-LatestAppLog.ps1.

skopiuj powyższe polecenie i uruchom je w PowerShell. Wynikowy obiekt w zmiennej$taskAction powinien wyglądać jak zrzut ekranu poniżej.

Tworzenie nowej zaplanowanej akcji zadania

dodawanie wyzwalacza

teraz, gdy masz utworzoną akcję zadania, następnym krokiem jest utworzenie jest określenie, kiedy zadanie musi być uruchomione. Cmdlet używany do utworzenia wyzwalacza to New-ScheduledTaskTrigger cmdlet. Poniższe polecenie tworzy wyzwalacz, który będzie uruchamiany codziennie o 15: 00. Skopiuj i uruchom kod w PowerShell.

# Create a new trigger (Daily at 3 AM)$taskTrigger = New-ScheduledTaskTrigger -Daily -At 3PM$tasktrigger

wynikowy obiekt w zmiennej$tasktrigger powinien wyglądać tak samo jak na poniższym obrazku.

Tworzenie wyzwalacza (codziennie o 3 rano)

Rejestracja zadania

do tej pory stworzyłeś podstawowe wymagania aby utworzyć nowe zaplanowane zadanie. Następnym krokiem jest utworzenie zaplanowanego zadania i zarejestrowanie go w systemie.

poniższy kod używa poleceniaRegister-ScheduledTask, aby zarejestrować zaplanowane zadanie. Parametr-Action jest potrzebny do przekazania obiektu akcji zadania zapisanego w zmiennej o nazwie$taskAction. Parametr-Trigger jest potrzebny do przekazania zawartości zmiennej$taskTrigger.

# Register the new PowerShell scheduled task# The name of your scheduled task.$taskName = "ExportAppLog"# Describe the scheduled task.$description = "Export the 10 newest events in the application log"# Register the scheduled taskRegister-ScheduledTask ` -TaskName $taskName ` -Action $taskAction ` -Trigger $taskTrigger ` -Description $description

skopiuj powyższy kod i uruchom go w PowerShell. W rezultacie nowe zaplanowane zadanie jest rejestrowane, jak pokazano poniżej.

rejestracja nowego zaplanowanego zadania

uruchamianie zadania

Po utworzeniu zaplanowanego zadania należy potwierdzić, że zaplanowane zadanie teraz istnieje w systemie. Otwórz Harmonogram zadań i znajdź zaplanowane zadanie z listy. Powinieneś zobaczyć zarejestrowane zadanie na liście.

nowe zaplanowane zadanie widoczne w aplikacji Harmonogramu zadań

Możesz również potwierdzić istnienie zarejestrowanego zaplanowanego zadania, uruchamiając poniższe polecenie PowerShell.

Get-ScheduledTaskInfo -TaskName ExportAppLog

powinieneś zobaczyć podobne wyjście, jak na zrzucie ekranu poniżej.

pobieranie informacji o zaplanowanym zadaniu.

i wreszcie, twoje nowe zaplanowane zadanie powinno działać, aby określić, czy to, co do tej pory zrobiłeś, zakończyło się sukcesem. Aby przetestować zaplanowane zadanie, możesz poczekać na następny harmonogram lub ręcznie uruchomić poniższe polecenie.

Start-ScheduledTask -TaskName ExportAppLog

Po uruchomieniu kodu powinieneś zobaczyć podobny wynik do pokazanego poniżej. Jak widać, uruchomienie kodu utworzyło plik XML, który wskazuje, że zaplanowane zadanie działało zgodnie z oczekiwaniami.

uruchamianie zaplanowanego zadania

aktualizacja istniejącego zaplanowanego zadania

Po utworzeniu zaplanowanego zadania niektóre jego aspekty mogą wymagać aktualizacji w pewnym momencie. Być może chcesz uruchomić go godzinę wcześniej lub zmienić lokalizację pliku skryptu. Są to niektóre zmiany zaplanowanego zadania, które mogą być wymagane.

w kolejnych sekcjach dowiesz się, jak wprowadzać zmiany do istniejących zarejestrowanych zaplanowanych zadań za pomocą PowerShell.

zmiana konta użytkownika, opcji zabezpieczeń i ustawień zgodności

w poprzedniej sekcji zaplanowane zadanie działa w tym samym kontekście konta użytkownika, który je utworzył. Co zrobić, jeśli zadanie musi zostać uruchomione przy użyciu innego konta użytkownika, na przykład konta usługi.

w tym przykładzie zmodyfikujesz opcje zabezpieczeń zaplanowanego zadania do poniższych ustawień.

  • aby uruchomić zaplanowane zadanie, musisz zmienić konto użytkownika.
  • Zezwalaj na uruchamianie zadania niezależnie od tego, czy użytkownik jest zalogowany, czy nie.
  • uruchom program z najwyższymi poziomami uprawnień.
  • Ustaw zgodność zadania z systemem Windows 10.

pierwsza linia w kodzie poniżej utworzy Główny obiekt z nowym kontem użytkownika i ustawi zadanie do uruchomienia z najwyższymi uprawnieniami. Upewnij się, że w razie potrzeby zmienisz wartość parametru -UserID. Druga linia konfiguruje zgodność zadania z systemem Windows 10.

wreszcie, trzecia linia aktualizujeExportAppLog **zaplanowane zadanie przy użyciu wartości przechowywanych wthe $taskPrincipal I$taskSettings zmiennych. Skopiuj poniższy kod i uruchom go w PowerShell.

# Set the task principal's user ID and run level.$taskPrincipal = New-ScheduledTaskPrincipal -UserId 'DEVPC\svcTask' -RunLevel Highest# Set the task compatibility value to Windows 10.$taskSettings = New-ScheduledTaskSettingsSet -Compatibility Win8# Update the task principal settingsSet-ScheduledTask -TaskName 'ExportAppLog' -Principal $taskPrincipal -Settings $taskSettings

zauważysz, że-Compatibility wartość parametru toWin8. Nie pogub się. Wydaje się, że Microsoft nie zaktualizował wyboru „najnowszej” wersji od systemu Windows 8. Niemniej jednak podanie wartościWin8 spowoduje zgodność z systemem Windows 10.

następnie poniższe polecenie używa poleceniaSet-ScheduledTask, aby zaktualizować istniejąceExportAppLog **zaplanowane zadanie. Pamiętaj, aby zmienić wartość hasła w parametrze-Password, aby użyć poprawnego hasła konta użytkownika.

# Update the task user account and passwordSet-ScheduledTask -TaskName 'ExportAppLog' -User $taskPrincipal.UserID -Password 'PASSWORD'

Po uruchomieniu powyższego polecenia zaplanowane zadanie zostanie zaktualizowane. Jeśli zaznaczysz zaplanowane zadanie, możesz potwierdzić, że opcje zabezpieczeń uległy zmianie.

opcja bezpieczeństwa, konto użytkownika i ustawienia kompatybilności

Zmiana wyzwalacza

czasami harmonogram wyzwalania musi być ustawiony na zmienił się. Może z powodu pewnych korekt operacyjnych lub optymalizacji zasobów. W każdym razie możesz również użyć PowerShell, aby zastąpić lub dodać wyzwalacze do zaplanowanego zadania.

obecnie zaplanowane zadanie ExportAppLog jest uruchamiany codziennie o 15: 00. Załóżmy, że musisz zmienić harmonogram wyzwalania na codziennie o 16: 30 i 1: 00. Najpierw musisz utworzyć dwa nowe obiekty wyzwalające zadania dla dwóch harmonogramów.

$taskTrigger1 = New-ScheduledTaskTrigger -Daily -At 4:30PM$taskTrigger2 = New-ScheduledTaskTrigger -Daily -At 1:00AM

następnie, aby zaktualizować WYZWALACZ zaplanowanego zadania, użyj poniższego polecenia. Zauważysz, że-Trigger parametr akceptuje dwa obiekty wyzwalające zadanie, a mianowicie$taskTrigger1 I$taskTrigger2.

dodatkowo, ponieważ aktualizujesz zaplanowane zadanie z hasłem zapisanym dla konta użytkownika, musisz ponownie podać wartości-User I-Password.

Set-ScheduledTask -TaskName 'ExportAppLog' -Trigger $taskTrigger1,$taskTrigger2 -User 'DEVPC\svcTask' -Password 'PASSWORD'

poniżej znajduje się oczekiwany wynik po uruchomieniu kodu.

aktualizacja zaplanowanego zadania za pomocą wielu wyzwalaczy

i jak widać poniżej, w zaplanowanym zadaniu ExportAppLog są teraz dwa wyzwalacze.

zaplanowane zadanie z wieloma wyzwalaczami

usuwanie i przywracanie zaplanowanego zadania

Zaplanowane zadania mogą z czasem stać się przestarzałe. W pewnym momencie może być konieczne wykonanie sprzątania dla zaplanowanych zadań. W tej sekcji dowiesz się, jak zarządzać zaplanowanym usuwaniem zadań w programie PowerShell.

tworzenie kopii zapasowej zaplanowanego zadania

zanim zaczniesz usuwać zaplanowane zadania, warto najpierw wykonać kopię zapasową. Tworzenie kopii zapasowych zaplanowanych zadań daje punkt przywracania, gdy coś pójdzie nie tak.

nie ma wbudowanego cmdletu do tworzenia zaplanowanej kopii zapasowej zadań. Ale wszystko w PowerShell jest obiektem i eksportowanie obiektów do pliku jest możliwe. Jeśli chcesz wykonać kopię zapasową obiektu do pliku, użyj poleceniaImport-Clixml.

poniższy przykładowy kod eksportuje zaplanowane zadanie o nazwie ExportAppLog do pliku. Nazwę pliku i lokalizację można zmienić według własnych preferencji.

poniższy obrazek wyświetla oczekiwany wyjściowy plik XML.

tworzenie kopii zapasowej zaplanowanego zadania

usuwanie zaplanowanego zadania

po zabezpieczeniu kopii zapasowej zaplanowanego zadania, możesz teraz usunąć zaplanowane zadanie. Poniższy kod usuwa zaplanowane zadanie o nazwie ExportAppLog. Skopiuj poniższy kod i uruchom w PowerShell.

# Unregister the scheduled taskUnregister-ScheduledTask -TaskName 'ExportAppLog' -Confirm:$false

chociaż nie jest to wymagane, zawsze dobrze jest potwierdzić wynik zaplanowanego usunięcia zadania. Użyj poniższego polecenia, aby sprawdzić, czy zaplanowane zadanie już nie istnieje.

Get-ScheduledTask -TaskName 'ExportAppLog'

jeśli zaplanowane zadanie już nie istnieje, powinieneś uzyskać wyjście takie jak pokazane poniżej.

sprawdzanie, czy zaplanowane zadanie już nie istnieje

zauważ, że zaplanowana kopia zapasowa zadania nie zawiera haseł.

Przywracanie zaplanowanego zadania

więc usunąłeś zaplanowane zadanie, a potem okazuje się, że nie powinieneś! Co teraz? Tego rodzaju sytuacja sprawia, że jeszcze bardziej doceniasz koncepcję tworzenia kopii zapasowych.

możesz odtworzyć zaplanowane zadanie za pomocą pliku kopii zapasowej XML za pomocą PowerShell. A oto jak można przywrócić.

najpierw zaimportuj kopię zapasową XML do sesji PowerShell. Poniższy kod importuje plik c:\temp\ExportAppLog.xml. W rezultacie zmienna$stBackup będzie przechowywała zaimportowane dane.

# Import the Schedule Task backup$stBackup = Import-Clixml -Path c:\temp\ExportAppLog.xml

następnie użyj poniższego kodu, aby zresetować wartośćLogOnType doInteractive. Resetowanie wartości LogonType ma kluczowe znaczenie dla zapewnienia pomyślnego przywrócenia zaplanowanego zadania.

# Reset the logon type to "Run only when the user is logged on."$stBackup.Principal.LogonType = 'Interactive'

następnym krokiem jest utworzenie nowego zaplanowanego obiektu zadania. Poniższy kod tworzy nowe zaplanowane zadanie. Zmienna$restoreTask przechowuje wynikowy zaplanowany obiekt zadania.

zauważysz, że wartości przekazywane do parametrów są wartościami importowanymi z kopii zapasowej. Zaimportowane wartości znajdują się w zmiennej$restoreTask. Parametry to ActionTriggerSettings I Principal.

Po utworzeniu zaplanowanego obiektu zadania nadszedł czas na zarejestrowanie zaplanowanego zadania. Użyj poniższego kodu, aby zarejestrować przywrócone zaplanowane zadanie.

w tym przykładzie nazwa zadania to 'ExportAppLog_restored.’ParametrInputObject akceptuje zaplanowany obiekt zadania w zmiennej $restoreTask. Upewnij się, że używasz poprawnych wartości user I password.

kod jest już kompletny. Skopiuj i uruchom kod w programie PowerShell, aby przywrócić usunięte zaplanowane zadanie. Poniższy zrzut ekranu pokazuje oczekiwany wynik po uruchomieniu kodu.

Przywracanie usuniętego zaplanowanego zadania z kopii zapasowej XML

teraz zaplanowane zadanie jest zarejestrowane w systemie. Poniższy zrzut ekranu pokazuje przywrócone zaplanowane zadanie.

znalezienie przywróconego zaplanowanego zadania

podsumowanie

funkcja zaplanowanych zadań w systemie Windows jest doskonałym narzędziem do konfigurowania zadań albo praca. Możesz tworzyć najbardziej podstawowe lub bardziej złożone zadania. Ustawienia i opcje są elastyczne.

dzięki modułowi zaplanowanych zadań PowerShell możliwe jest konfigurowanie zaplanowanych zadań za pomocą poleceń PowerShell. Moduł ten zapewnia możliwość i środki do tworzenia i wdrażania zaplanowanych zadań programowo na komputerach lokalnych i zdalnych.

Microsoft nie zaktualizował modułu ScheduledTasks, a niektóre zaawansowane ustawienia nie są jeszcze łatwo ujawnione jako polecenia cmdlet PowerShell. Jednym z przykładów jest utworzenie wyzwalacza dla ” on Workstation unlock.”Możesz jednak osiągnąć te zaawansowane ustawienia, korzystając z istniejącej klasy CIM harmonogramu zadań.

jednak moduł zaplanowanych zadań PowerShell nadal jest doskonałym i zdolnym narzędziem, które możesz dodać do swojego arsenału PowerShell.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.