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.
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.
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.
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.
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.
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.
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.
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.
i jak widać poniżej, w zaplanowanym zadaniu ExportAppLog są teraz dwa wyzwalacze.
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.
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.
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 Action
Trigger
Settings
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.
teraz zaplanowane zadanie jest zarejestrowane w systemie. Poniższy zrzut ekranu pokazuje przywrócone zaplanowane zadanie.
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.