Vytvorenie úlohy plánovača pomocou PowerShell

Väčšina používateľov a správcov je zvyknutá používať rozhranie grafickej konzoly na vytvorenie naplánovanej úlohy plánovača (Windows Plánovač). Taskschd.msc. V rôznych skriptoch a automatizovaných úlohách je však oveľa pohodlnejšie využívať schopnosti PowerShell na vytváranie úloh plánovača. V tomto článku si ukážeme, ako používať PowerShell (verzie 2.0 a 4.0) na vytváranie nových úloh plánovača systému Windows, exportovanie úloh do súboru xml a ich importovanie do iných počítačov..

Predpokladajme, že našou úlohou je vytvoriť úlohu plánovača, ktorá by sa začala, keď sa systém zavedie (alebo v určitý čas), úlohou by malo byť vykonanie skriptu alebo príkazu PowerShell.

obsah:

  • Ako vytvoriť plánovaciu úlohu v PowerShell 2.0
  • Ako vytvoriť plánovaciu úlohu v PowerShell 4.0 (Windows Server 2012 R2)
  • Export úlohy plánovača do súboru XML
  • Importujte úlohu plánovača zo súboru XML

Ako vytvoriť plánovaciu úlohu v PowerShell 2.0

V prostredí Powershell 2.0 (Windows 7, Windows Server 2008 R2) na vytvorenie opakujúcej sa úlohy (ScheduledJob) z prostredia PowerShell musíte použiť rozhranie COM plán.služba.  V tomto príklade vytvoríme úlohu plánovača, ktorá by v čase spustenia mala spustiť určitý súbor pomocou skriptu PowerShell. Úloha sa vykonáva so systémovými právami (systém).

$ TaskName = "NewPsTask"
$ TaskDescription = "Spustenie skriptu PowerShell z plánovača"
$ 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 prípade sa vytvorí spúšťač, ktorý funguje, keď sa systém zavedie - kód 8. Úplný zoznam kódov:

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 ("rrrr-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 vykonaní príkazu sa v plánovači objaví nová úloha NewPsTask.

Syntax príkazu je dosť komplikovaná, takže vývojári do balíka PowerShell Pack (súčasť súpravy Windows 7 Resource Kit) pridali samostatný modul. TaskScheduler, čo výrazne zjednodušuje proces vytvárania plánovacích úloh z PowerShell 2.0. Po inštalácii modulu môžete vytvoriť úlohu pomocou nasledujúcich príkazov:

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

Ako vytvoriť plánovaciu úlohu v PowerShell 4.0 (Windows Server 2012 R2)

V systémoch Windows Server 2012 R2 a Windows 8.1 PowerShell 3.0 a 4.0 predstavili nové rutiny cmdlet pre vytváranie úloh plánovača: nový-ScheduledTaskTrigger, registrovať-ScheduledTask. Vytvorenie úlohy plánovača je teraz omnoho jednoduchšie a pohodlnejšie..

Vytvorme úlohu s názvom StartupScript_PS, ktorá každý deň o 10:00 spred systémového účtu (SYSTEM) spustí skript PoSh uložený v súbore C: \ PS \ StartupScript.ps1. Úloha sa spustí so zvýšenými oprávneniami (daw „Run with najvyššie privilégiá“).

$ Trigger = New-ScheduledTaskTrigger -At 10:00 - Denne
$ 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

rada. Ak chcete, aby sa úloha spustila pri každom zavedení systému, prvý príkaz by mal byť nasledujúci:
$ Trigger = New-ScheduledTaskTrigger -AtStartup
Ak pri prihlásení používateľa:
$Trigger = New-ScheduledTaskTrigger -AtLogon

Skontrolujte, či sa v plánovači objavila nová úloha.

Export úlohy plánovača do súboru XML

PowerShell poskytuje možnosť exportovať aktuálne nastavenia akejkoľvek úlohy plánovača do textového súboru XML. Môžete tak nahrať parametre ľubovoľnej úlohy a distribuovať úlohu akejkoľvek zložitosti do ďalších počítačov v sieti. Úlohu možno exportovať z GUI Plánovača úloh aj z príkazového riadka PowerShell.

Príkaz na export úlohy s názvom StartupScript_PS do súboru StartupScript_PS.xml:

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

Cmdlet Export-ScheduledTask nebude fungovať v PowerShell 2.0, takže v systéme Windows 7/2008 R2 je lepšie použiť zabudovaný pomocný program na exportovanie nastavení úlohy do súboru XML Schtasks, ktorého výstup musí byť presmerovaný do textového súboru:

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

rada. Pripomeňme si, že predtým sa na vytváranie a správu úloh plánovača využívali hlavne schopnosti zabudovaného obslužného programu konzoly schtasks.exe..

Importujte úlohu plánovača zo súboru XML

Po exportovaní nastavení úlohy plánovača do súboru XML ho možno importovať do ľubovoľného iného počítača v sieti pomocou grafickej konzoly, SchTasks.exe alebo PowerShell..

Rutina vám pomôže importovať parametre úlohy a zaregistrovať ich. Register-ScheduledTask.

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

V PowerShell 2.0 (Windows 7 / Server 2008 R2) je import úlohy ľahší aj pomocou nástroja schtasks. Prvý tím vytvorí novú úlohu. Druhá ho okamžite spustí (bez čakania na spustenie spúšťača).

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

poznámka. Upozorňujeme, že tento príklad zobrazuje informácie o účte, pod ktorým bude úloha spustená. Ak nie sú uvedené informácie o účte, potom preto nie sú uložené v úlohe, budú požiadané o import.