Vytvoření úlohy plánovače pomocí prostředí PowerShell

Většina uživatelů a správců je zvyklá používat grafické rozhraní konzoly k vytvoření naplánované úlohy plánovače (Windows Plánovač). Taskschd.msc. V různých skriptech a automatizovaných úlohách je však mnohem pohodlnější používat schopnosti PowerShell k vytváření plánovacích úloh. V tomto článku si ukážeme, jak pomocí PowerShell (verze 2.0 a 4.0) vytvořit nové úkoly plánovače Windows, exportovat úlohy do souboru xml a importovat je do jiných počítačů..

Předpokládejme, že naším úkolem je vytvořit plánovací úlohu, která by se spustila při spuštění systému (nebo v určitou dobu), měla by úloha provést nějaký skript nebo příkaz PowerShell.

Obsah:

  • Jak vytvořit plánovací úlohu v PowerShell 2.0
  • Jak vytvořit plánovací úlohu v PowerShell 4.0 (Windows Server 2012 R2)
  • Export úlohy plánovače do souboru XML
  • Importujte úlohu plánovače ze souboru XML

Jak vytvořit plánovací úlohu v PowerShell 2.0

Chcete-li v aplikaci Powershell 2.0 (Windows 7, Windows Server 2008 R2) vytvořit opakovanou úlohu (ScheduledJob) z prostředí PowerShell, musíte použít rozhraní COM Plán.Služba.  V tomto příkladu vytvoříme úlohu plánovače, která by v době spuštění měla provést určitý soubor pomocí skriptu PowerShell. Úloha se provádí se systémovými právy (systém).

$ TaskName = "NewPsTask"
$ TaskDescription = "Spuštění skriptu PowerShell z plánovače"
$ TaskCommand = "c: \ windows \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe"
$ TaskScript = "C: \ PS \ StartupScript.ps1"
$ TaskArg = "-WindowStyle Hidden -NonInteractive -Executionpolicy unrestricted -file $ TaskScript"
$ TaskStartTime = [datetime] :: Now.AddMinutes (1)
$ service = new-object -ComObject ("Schedule.Service")
$ service.Connect ()
$ rootFolder = $ service.GetFolder ("\")
$ TaskDefinition = $ service.NewTask (0)
$ TaskDefinition.RegistrationInfo.Description = "$ TaskDescription"
$ TaskDefinition.Settings.Enabled = $ true
$ TaskDefinition.Settings.AllowDemandStart = $ true
$ triggers = $ TaskDefinition.Triggers
#http: //msdn.microsoft.com/en-us/library/windows/desktop/aa383915 (v = vs.85) .aspx
$ trigger = $ triggers.Create (8)

Poznámka:. V tomto případě se vytvoří spouštěč, který funguje, když se systém zavede - kód 8. Úplný seznam kódů:

TASK_TRIGGER_EVENT0
TASK_TRIGGER_TIME1
TASK_TRIGGER_DAILY2
TASK_TRIGGER_WEEKLY3
TASK_TRIGGER_MONTHLY4
TASK_TRIGGER_MONTHLYDOW5
TASK_TRIGGER_IDLE6
TASK_TRIGGER_REGISTRATION7
TASK_TRIGGER_BOOT8
TASK_TRIGGER_LOGON9
TASK_TRIGGER_SESSION_STATE_CHANGE11

$ trigger.StartBoundary = $ TaskStartTime.ToString ("yyyy-MM-dd'T'HH: mm: ss")
$ trigger.Enabled = $ true
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa381841(v=vs.85).aspx
$ Action = $ TaskDefinition.Actions.Create (0)
$ action.Path = "$ TaskCommand"
$ action.Arguments = "$ TaskArg"
#http: //msdn.microsoft.com/en-us/library/windows/desktop/aa381365 (v = vs.85) .aspx
$ rootFolder.RegisterTaskDefinition ("$ TaskName", $ TaskDefinition, 6, "System", $ null, 5)

Po provedení příkazu se v plánovači objeví nová úloha NewPsTask.

Syntaxe příkazu je poměrně komplikovaná, takže vývojáři přidali samostatný modul do sady PowerShell Pack (součást sady Windows 7 Resource Kit) Plánovač úloh, což výrazně zjednodušuje proces vytváření plánovacích úloh z PowerShell 2.0. Po instalaci modulu můžete vytvořit úlohu pomocí následujících příkazů:

Import-Module TaskScheduler $ task = New-Task
$ task.Settings.Hidden = $ true
Add-TaskAction -Task $ task -Path C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe -Arguments "-Soubor C: \ MyScript.ps1"
Add-TaskTrigger -Task $ task -Daily -At “10:00”
Register-ScheduledJob - Název ”ShTaskPs” -Task $ task

Jak vytvořit plánovací úlohu v PowerShell 4.0 (Windows Server 2012 R2)

V systémech Windows Server 2012 R2 a Windows 8.1 zavedly PowerShell 3.0 a 4.0 nové rutiny cmdlet pro vytváření úloh plánovače: Nové-ScheduledTaskTrigger, Zaregistrujte se-ScheduledTask. Vytvoření úlohy plánovače je nyní mnohem jednodušší a pohodlnější..

Vytvořme úkol nazvaný StartupScript_PS, který každý den v 10:00 zpod systémovým účtem (SYSTEM) spustí skript PoSh uložený v souboru C: \ PS \ StartupScript.ps1. Úkol bude spuštěn se zvýšenými oprávněními (daw "Run with nejvyšší privileges").

$ Trigger = New-ScheduledTaskTrigger -At 10:00 - Denně
$ User = "NT AUTHORITY \ SYSTEM"
$ Action = New-ScheduledTaskAction - Execute "PowerShell.exe" -Argument "C: \ PS \ StartupScript.ps1"
Register-ScheduledTask -TaskName "StartupScript_PS" -Trigger $ Trigger --User $ User -Action $ Action -RunLevel Highest -Force

Tip. Pokud chcete, aby se úloha spouštěla ​​pokaždé, když se systém spustí, první příkaz by měl být následující:
$ Trigger = New-ScheduledTaskTrigger -AtStartup
Pokud při přihlášení uživatele:
$Trigger = New-ScheduledTaskTrigger -AtLogon

Zkontrolujte, zda se v plánovači objevil nový úkol.

Export úlohy plánovače do souboru XML

PowerShell poskytuje možnost exportovat aktuální nastavení jakékoli úlohy plánovače do textového souboru XML. Můžete tedy nahrát parametry libovolné úlohy a distribuovat úlohu jakékoli složitosti do dalších počítačů v síti. Úlohu lze exportovat jak z GUI Plánovače úloh, tak z příkazového řádku PowerShell.

Příkaz k exportu úlohy s názvem StartupScript_PS do souboru StartupScript_PS.xml:

Export-ScheduledTask "StartupScript_PS" | out-file c: \ tmp \ StartupScript_PS.xml

Export-ScheduledTask cmdlet nebude fungovat v PowerShell 2.0, takže v systému Windows 7/2008 R2 je lepší použít vestavěný obslužný program k exportu nastavení úlohy do souboru XML schtasks, jehož výstup musí být přesměrován do textového souboru:

schtasks / query / tn "NewPsTask" / xml >> "c: \ tmp \ NewPsTask.xml"

Tip. Připomeňme, že dříve byly pro vytváření a správu plánovacích úloh využívány hlavně funkce vestavěného obslužného programu konzoly schtasks.exe..

Importujte úlohu plánovače ze souboru XML

Po exportu nastavení úlohy plánovače do souboru XML může být importován do jakéhokoli jiného počítače v síti pomocí grafické konzoly, SchTasks.exe nebo PowerShell..

Rutina vám pomůže importovat parametry úlohy a zaregistrovat je. Register-ScheduledTask.

Register-ScheduledTask -Xml (Get-Content “\\ Server1 \ public \ NewPsTask.xml” | out-string) -TaskName "NewPsTask"

V prostředí PowerShell 2.0 (Windows 7 / Server 2008 R2) je import úlohy pomocí nástroje schtasks také snadnější. První tým vytvoří nový úkol. Druhý ji okamžitě spustí (bez čekání na spuštění spouště).

schtasks / create / tn "NewPsTask" / xml "\\ Server1 \ public \ NewPsTask.xml" / ru corp \ aaivanov / rp Pa $$ w0rd
schtasks / Run / TN "NewPsTask"

Poznámka:. Vezměte prosím na vědomí, že tento příklad zobrazuje informace o účtu, pod kterým bude úloha spuštěna. Pokud informace o účtu nejsou zadány, pak protože nejsou uloženy v úloze, budou vyžadovány při importu.