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_EVENT | 0 |
TASK_TRIGGER_TIME | 1 |
TASK_TRIGGER_DAILY | 2 |
TASK_TRIGGER_WEEKLY | 3 |
TASK_TRIGGER_MONTHLY | 4 |
TASK_TRIGGER_MONTHLYDOW | 5 |
TASK_TRIGGER_IDLE | 6 |
TASK_TRIGGER_REGISTRATION | 7 |
TASK_TRIGGER_BOOT | 8 |
TASK_TRIGGER_LOGON | 9 |
TASK_TRIGGER_SESSION_STATE_CHANGE | 11 |
$ 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
$ 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"
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"