Adam Automator

potřebujete vytvořit spoustu naplánovaných úkolů nebo automatizovat vytváření naplánovaných úloh? Pokud ano, máte štěstí. V tomto článku se dozvíte, jak spravovat naplánované úkoly pomocí PowerShell.

naplánované úkoly, které provádějí jednoduché akce, jsou rychlé a pohodlné, aby se opakovaly pomocí rozhraní aplikace Plánovač úloh (GUI). Správci systému nebo vývojáři však možná budou muset nasadit složitější úkoly s více plány, spouštěči nebo argumenty.

naštěstí můžete použít PowerShell k vytváření a správě naplánovaných úkolů. Správa naplánovaných úkolů pomocí PowerShell je umožněna pomocí modulu ScheduledTasks, který je zabudován do systému Windows.

Obsah

Předpoklady

Vzhledem k tomu, je learning-by-doing typ článku, tam jsou některé předpoklady, takže můžete sledovat spolu. Níže jsou uvedeny požadavky na vytvoření naplánovaných úloh PowerShell pomocí PowerShell.

  • příklady v tomto článku používají systém Windows 10. Ale Windows Server 2012 a novější mohou udělat totéž.
  • Windows PowerShell 5.1 nebo PowerShell 7.
  • pomohlo by vám, kdybyste měli editor skriptů, jako je Visual Studio Code, Notepad++ nebo Windows PowerShell ISE.

vytvoření nové naplánované úlohy

naplánovaná úloha vyžaduje, aby fungovaly minimálně dvě komponenty; akce a spoušť. Přidání kontextu zabezpečení a sady souvisejících nastavení je volitelné. Pro lepší pochopení viz stručné vysvětlení pro každou komponentu naplánované úlohy níže:

  • Action-akce, která je prováděna naplánovanou úlohou. Akce je obvykle spustit program nebo skript. Naplánovaná úloha může mít více než jednu akci.
  • Trigger-řídí při spuštění naplánované úlohy. Spouštěče mohou být založeny na čase, jako je nastavení plánu pro denní nebo hodinové opakování. Spouštěče mohou být také založené na aktivitách, které spouštějí úlohu na základě zjištěných činností, jako je spuštění počítače, přihlášení uživatele nebo zaznamenané události.
  • Principal-řídí bezpečnostní kontext použitý ke spuštění naplánované úlohy. Jistina mimo jiné zahrnuje uživatelský účet a požadované oprávnění používané naplánovanou úlohou.
  • nastavení-je sada možností a podmínek, které řídí, jak chování naplánované úlohy. Jako příklad můžete přizpůsobit úkol, který chcete odstranit po několika po sobě jdoucích dnech, kdy je úloha nevyužita.

během naplánovaného vytvoření úlohy nejsou výslovně vyžadovány hlavní a nastavení. Místo toho se použijí výchozí hodnoty.

vytvoření akce úlohy

Pokud chcete, aby naplánovaná úloha něco udělala, vytvořte novou akci úlohy. V tomto příkladu vytvoříte úlohu, která bude volat PowerShell.exe a spusťte skript. Ujistěte se, že máte připravený editor skriptů.

Všimněte si, že níže uvedený skript je pouze náhodným příkladem a nemusíte jej používat. Můžete použít libovolný skript, který chcete. Použití níže uvedeného skriptu však vytvoří snadno ověřitelný výsledek, který může potvrdit, zda plánovaná úloha fungovala.

ukázkový skript níže, když je spuštěn, získá prvních deset nejnovějších událostí z protokolu událostí aplikace. Poté exportujte události do nového souboru XML v c:\temp složka. Zkopírujte níže uvedený kód, vložte jej do editoru skriptů a uložte s názvem souboru Get-LatestAppLog. ps1 do libovolné složky, kterou chcete.

následující kód používá New-ScheduledTaskAction vytvořit nové plánované-hlavní akce objektu uloženy v $taskAction proměnné. Tato akce bude volat powershell.exe spustitelný a předat argument spustit C:\scripts\Get-LatestAppLog.ps1.

Zkopírovat výše uvedený příkaz a spusťte jej v prostředí PowerShell. Výsledný objekt v proměnné $taskAction by měl vypadat jako snímek obrazovky níže.

Vytvoření nové Naplánované Úlohy, Akce

Přidání Trigger

Nyní, že máte úkol, který akci vytvořil, dalším krokem je definovat, kdy se úkol musí běžet. Rutina, kterou chcete použít pro vytvoření spouště ,jeNew-ScheduledTaskTrigger rutina. Níže uvedený příkaz vytvoří spoušť, která bude spuštěna denně v 3 odpoledne. Zkopírujte a spusťte kód v PowerShell.

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

výsledný objekt v proměnné $tasktrigger by měl vypadat stejně jako obrázek níže.

Vytvořit Spouštěč (Denně ve 3 ráno)

Registrace Úkol

zatím, co jste vytvořili základní požadavky pro vytvoření nové naplánované úlohy. Dalším krokem je vytvoření naplánované úlohy a její registrace v systému.

níže uvedený kód používá rutinuRegister-ScheduledTask k registraci naplánované úlohy. -Action parametr je potřeba předat úkol, akce, objekt uložen v proměnné s názvem $taskAction. Parametr -Trigger je nutný pro předání obsahu proměnné $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

zkopírujte výše uvedený kód a spusťte jej v PowerShell. Výsledkem je registrace nové naplánované úlohy, jak je uvedeno níže.

Registrace nové naplánované úlohy

Úkol

Po vytvoření naplánované úlohy byste měli potvrdit, že naplánované úlohy nyní existuje v systému. Otevřete Plánovač úloh a najděte naplánovanou úlohu ze seznamu. Měli byste vidět registrovaný úkol v seznamu.

nové naplánované úlohy, jak je vidět v Plánovač Úloh aplikace

můžete také potvrdit registrované naplánované úlohy existuje spuštěním PowerShell příkaz níže.

Get-ScheduledTaskInfo -TaskName ExportAppLog

měli byste vidět podobný výstup jako snímek obrazovky níže.

získání informací o naplánované úloze.

a konečně, váš nový naplánovaný úkol by měl pracovat, aby zjistil, zda to, co jste dosud udělali, bylo úspěšné. Chcete-li otestovat naplánovanou úlohu, můžete buď počkat na další plán spuštění, nebo použít příkaz níže k ručnímu spuštění.

Start-ScheduledTask -TaskName ExportAppLog

po spuštění kódu byste měli vidět podobný výsledek, jaký je uveden níže. Jak vidíte, spuštění kódu vytvořilo soubor XML, což znamená, že naplánovaná úloha fungovala podle očekávání.

spuštění Naplánované Úlohy,

Aktualizace Existující Naplánované Úlohy

Po vytvoření naplánované úlohy, některé aspekty může potřebovat aktualizaci v určitém okamžiku. Možná budete chtít spustit o hodinu dříve nebo změnit umístění souboru skriptu. To jsou některé ze změn naplánované úlohy, které mohou být vyžadovány.

v dalších částech se dozvíte, jak provádět změny stávajících registrovaných naplánovaných úloh pomocí PowerShell.

Změna uživatelského účtu, možností zabezpečení a nastavení kompatibility

v předchozí části se naplánovaná úloha spustí pod stejným kontextem uživatelského účtu, který ji vytvořil. Co když je třeba úkol spustit pomocí jiného uživatelského účtu,například účtu služby.

v tomto příkladu upravíte možnosti zabezpečení naplánované úlohy na níže uvedená nastavení.

  • Chcete-li spustit naplánovanou úlohu, musíte změnit uživatelský účet.
  • povolte spuštění úlohy bez ohledu na to, zda se uživatel přihlásil nebo ne.
  • spusťte s nejvyššími úrovněmi oprávnění.
  • Nastavte kompatibilitu úlohy na Windows 10.

první řádek v kódu níže vytvoří hlavní objekt s nový uživatelský účet a nastavení úlohy spustit s nejvyššími oprávněními. Nezapomeňte podle potřeby změnit hodnotu parametru -UserID. Druhý řádek konfiguruje kompatibilitu úlohy se systémem Windows 10.

a Konečně, třetí řádek aktualizace ExportAppLog **naplánované úlohy pomocí hodnoty uložené v the $taskPrincipal$taskSettings proměnné. Zkopírujte níže uvedený kód a spusťte jej v 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

všimněte Si, že -Compatibility hodnota parametru Win8. Nenechte se zmást. Zdá se, že společnost Microsoft neaktualizovala výběr „Nejnovější“ verze od systému Windows 8. Zadání hodnoty Win8 však povede k kompatibilitě systému Windows 10.

následující příkaz použijeSet-ScheduledTask rutinu k aktualizaci existující * * naplánovaná úloha. Nezapomeňte změnit hodnotu hesla v parametru -Password, abyste použili správné heslo uživatelského účtu.

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

po spuštění výše uvedeného příkazu se naplánovaná úloha aktualizuje. Pokud zkontrolujete naplánovanou úlohu, můžete potvrdit, že se možnosti zabezpečení změnily.

možnosti zabezpečení, uživatelský účet a nastavení kompatibility

Změna Spoušť

Někdy spoušť plán musí být změněn. Možná kvůli nějakým provozním úpravám nebo optimalizaci zdrojů. V každém případě můžete také použít PowerShell k nahrazení nebo přidání spouštěčů k naplánované úloze.

v současné době je naplánovaná úloha ExportAppLog spuštěna každý den v 3 PM. Předpokládejme, že je třeba změnit spouštěcí plán na denně v 16: 30 a 1: 00. Nejprve musíte vytvořit dva nové objekty spouštění úloh pro tyto dva plány.

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

pro aktualizaci spouště naplánované úlohy použijte níže uvedený příkaz. Všimněte si, že -Trigger parametr přijímá dva hlavní spouštěcí objekty, a to $taskTrigger1$taskTrigger2.

Navíc, protože jsou aktualizace, naplánované úlohy s heslem uloženy na uživatelský účet, budete muset poskytnout -User-Password hodnoty znovu.

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

níže je očekávaný výsledek po spuštění kódu.

Aktualizace naplánované úlohy s více spouštěčů

A jak můžete vidět níže, tam jsou nyní dvě spouští v ExportAppLog naplánované úlohy.

Naplánované úlohy s více spouštěčů

Odstranění a Obnovení Naplánované Úlohy

Naplánované Úlohy se mohou stát zastaralé v průběhu času. V určitém okamžiku možná budete muset provést úklid naplánovaných úkolů. V této části se dozvíte, jak spravovat naplánované odstranění úlohy v PowerShell.

Zálohování Naplánované Úlohy

předtím, Než jdete na odstranění naplánované úlohy, je dobré si udělat zálohu. Zálohování naplánovaných úkolů vám dává bod obnovení, když se něco pokazí.

neexistuje žádná vestavěná rutina pro vytvoření naplánované zálohy úlohy. Ale všechno v PowerShell je objekt a export objektů do souboru je možný. Pokud potřebujete zálohovat objekt do souboru, použijte rutinu Import-Clixml.

níže uvedený příkladový kód exportuje naplánovanou úlohu s názvem ExportAppLog do souboru. Můžete změnit název souboru a umístění podle vašich preferencí.

obrázek níže zobrazuje očekávaný výstupní XML soubor.

Zálohování Naplánované Úlohy

Odstranění Naplánované Úlohy

Jakmile jste zajištěné zálohování, naplánované úlohy, si nyní můžete odstranit naplánované úlohy. Níže uvedený kód odstraní naplánovanou úlohu s názvem ExportAppLog. Zkopírujte níže uvedený kód a spusťte jej v PowerShell.

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

i když to není nutné, je vždy dobré potvrdit výsledek naplánovaného odstranění úlohy. Pomocí níže uvedeného příkazu ověřte, zda plánovaná úloha již neexistuje.

Get-ScheduledTask -TaskName 'ExportAppLog'

pokud plánovaná úloha již neexistuje, měli byste získat výstup, jako je ten, který je uveden níže.

Kontrola naplánovaná úloha již existuje

na Vědomí, že naplánované úlohy zálohování neobsahuje hesla.

Obnovení Naplánované Úlohy

Takže jste smazali naplánované úlohy, a pak se ukáže, že jste neměl! Co teď? Tento druh situace vás ještě více oceňuje koncept záloh.

naplánovanou úlohu můžete znovu vytvořit pomocí záložního souboru XML s PowerShell. A zde je návod, jak můžete obnovit.

nejprve importujte zálohu XML do relace PowerShell. Níže uvedený kód importuje soubor c:\temp\ExportAppLog.datum. V důsledku toho bude proměnná $stBackup obsahovat importovaná data.

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

dále použijte níže uvedený kód pro resetování hodnoty LogOnType na hodnotu Interactive. Resetování hodnoty LogonType je zásadní pro zajištění úspěšného obnovení naplánované úlohy.

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

dalším krokem je vytvoření nového objektu naplánované úlohy. Níže uvedený kód vytvoří novou naplánovanou úlohu. Proměnná $restoreTask ukládá výsledný objekt naplánované úlohy.

všimnete si, že hodnoty předané parametrům jsou hodnoty importované ze zálohy. Importované hodnoty jsou v proměnné $restoreTask. Parametry jsou ActionTriggerSettingsPrincipal.

Po vytvoření naplánované úlohy objekt, je čas se zaregistrovat naplánované úlohy. Pomocí níže uvedeného kódu zaregistrujte obnovenou naplánovanou úlohu.

v tomto příkladu je název úlohy ‚ ExportAppLog_restored.’Parametr InputObject přijímá objekt naplánované úlohy v proměnné $restoreTask. Ujistěte se, že používáte správné hodnoty user a password.

kód je nyní kompletní. Zkopírujte a spusťte kód v PowerShell a obnovte odstraněnou naplánovanou úlohu. Snímek obrazovky níže ukazuje očekávaný výstup po spuštění kódu.

Obnovení odstraněné naplánované úlohy z XML zálohování

naplánované úlohy je registrován v systému. Snímek obrazovky níže ukazuje obnovenou naplánovanou úlohu.

Nalezení obnovena naplánované úlohy

Shrnutí

Naplánované Úlohy funkce v systému Windows je vynikající nástroj pro nastavení úkolů a pracovních míst. Můžete vytvořit nejzákladnější až složitější úkoly. Nastavení a možnosti jsou flexibilní.

s modulem PowerShell naplánované úlohy je možné nastavit naplánované úlohy pomocí příkazů PowerShell. Tento modul poskytuje příležitost a prostředky pro vytváření a nasazení naplánovaných úloh programově na lokálních a vzdálených počítačích.

společnost Microsoft neaktualizovala modul ScheduledTasks a některá pokročilá nastavení ještě nejsou snadno vystavena jako rutiny PowerShell. Jedním příkladem je vytvoření spouště pro “ On workstation unlock.“Tato pokročilá nastavení však můžete dosáhnout pomocí existující třídy CIM Plánovače úloh.

nicméně modul PowerShell naplánované úlohy je stále vynikajícím a schopným nástrojem, který můžete přidat do svého arzenálu PowerShell.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.