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_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 ("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
$ 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"
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"