Sebagian besar pengguna dan administrator terbiasa menggunakan antarmuka konsol grafis untuk membuat tugas Penjadwal terjadwal (Penjadwal Windows). Taskschd.msc. Namun, dalam berbagai skrip dan tugas otomatis, jauh lebih nyaman untuk menggunakan kemampuan PowerShell untuk membuat tugas penjadwal. Pada artikel ini, kami akan menunjukkan cara menggunakan PowerShell (versi 2.0 dan 4.0) untuk membuat tugas penjadwal Windows baru, mengekspor tugas ke file xml dan mengimpornya ke komputer lain.
Misalkan tugas kita adalah membuat tugas penjadwal yang akan dimulai ketika sistem melakukan boot (atau pada waktu tertentu), tugas tersebut harus menjalankan beberapa skrip atau perintah PowerShell.
Konten:
- Cara membuat pekerjaan scheduler di PowerShell 2.0
- Cara membuat pekerjaan scheduler di PowerShell 4.0 (Windows Server 2012 R2)
- Ekspor Penjadwal Pekerjaan ke File XML
- Impor pekerjaan scheduler dari file XML
Cara membuat pekerjaan scheduler di PowerShell 2.0
Di Powershell 2.0 (Windows 7, Windows Server 2008 R2), untuk membuat pekerjaan berulang (ScheduledJob) dari PowerShell, Anda harus menggunakan antarmuka COM Jadwalkan.Layanan. Dalam contoh ini, kita akan membuat tugas penjadwal, yang pada saat boot harus menjalankan file tertentu dengan skrip PowerShell. Tugas dilakukan dengan hak sistem (Sistem).
$ TaskName = "NewPsTask"
$ TaskDescription = "Menjalankan skrip PowerShell dari penjadwal"
$ TaskCommand = "c: \ windows \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe"
$ TaskScript = "C: \ PS \ StartupScript.ps1"
$ TaskArg = "-WindowStyle Tersembunyi -NonInteraktif -Executionpolicy tidak dibatasi -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
$ trigger = $ TaskDefinition.Triggers
#http: //msdn.microsoft.com/en-us/library/windows/desktop/aa383915 (v = vs.85) .aspx
$ trigger = $ triggers.Create (8)
Catatan. Dalam hal ini, pemicu dibuat yang berfungsi saat sistem dinyalakan - kode 8. Daftar kode lengkap:
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)
Setelah perintah dieksekusi, tugas baru NewPsTask akan muncul di penjadwal.
Sintaks perintahnya cukup rumit, sehingga pengembang menambahkan modul terpisah ke PowerShell Pack (bagian dari Windows 7 Resource Kit) Penjadwal Tugas, yang sangat menyederhanakan proses menciptakan pekerjaan penjadwal dari PowerShell 2.0. Setelah menginstal modul, Anda dapat membuat tugas menggunakan perintah berikut:
Impor-Modul TaskScheduler $ task = Tugas-Baru
$ task.Settings.Hidden = $ true
Add-TaskAction -Task $ task -Path C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe -Argument “-File C: \ MyScript.ps1”
Tambah-TaskTrigger -Task $ task -Daily -Pada "10:00"
Register-ScheduledJob -Name "ShTaskPs" -Task $ task
Cara membuat pekerjaan scheduler di PowerShell 4.0 (Windows Server 2012 R2)
Di Windows Server 2012 R2 dan Windows 8.1, PowerShell 3.0 dan 4.0 memperkenalkan cmdlet baru untuk membuat pekerjaan penjadwal: Baru-ScheduledTaskTrigger, Daftar-ScheduledTask. Membuat tugas penjadwal sekarang jauh lebih mudah dan nyaman..
Mari kita buat tugas yang disebut StartupScript_PS, yang setiap hari pukul 10:00 dari bawah akun sistem (SISTEM) menjalankan skrip PoSh yang disimpan dalam file C: \ PS \ StartupScript.ps1. Tugas akan dijalankan dengan privilege yang ditinggikan (daw "Run with privilege tertinggi").
$ Trigger = New-ScheduledTaskTrigger -At 10:00 am -Daily
$ User = "NT AUTHORITY \ SYSTEM"
$ Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C: \ PS \ StartupScript.ps1"
Registrasi-ScheduledTask -TaskName "StartupScript_PS" -Trigger $ Trigger -User $ User -Action $ Action -RunLevel Tertinggi -Force
$ Trigger = New-ScheduledTaskTrigger -AtStartup
Jika pada saat login pengguna:
$
Trigger = New-ScheduledTaskTrigger -AtLogon
Periksa apakah tugas baru telah muncul di penjadwal.
Ekspor Penjadwal Pekerjaan ke File XML
PowerShell menyediakan kemampuan untuk mengekspor pengaturan saat ini dari setiap tugas penjadwal ke file teks XML. Dengan demikian, Anda dapat mengunggah parameter tugas apa pun dan mendistribusikan tugas kompleksitas apa pun ke komputer lain di jaringan. Tugas dapat diekspor baik dari GUI Tugas Scheduller dan dari baris perintah PowerShell.
Perintah untuk mengekspor pekerjaan bernama StartupScript_PS ke file StartupScript_PS.xml:
Ekspor-ScheduledTask "StartupScript_PS" | keluar file c: \ tmp \ StartupScript_PS.xml
Cmdlet Export-ScheduledTask tidak akan berfungsi di PowerShell 2.0, jadi pada Windows 7/2008 R2 lebih baik menggunakan utilitas bawaan untuk mengekspor pengaturan pekerjaan ke file XML schtasks, output yang perlu diarahkan ke file teks:
schtasks / query / tn "NewPsTask" / xml >> "c: \ tmp \ NewPsTask.xml"
Impor pekerjaan scheduler dari file XML
Setelah pengaturan pekerjaan scheduler diekspor ke file XML, itu dapat diimpor ke komputer lain di jaringan menggunakan konsol grafis, SchTasks.exe atau PowerShell.
Cmdlet akan membantu Anda mengimpor parameter tugas dan mendaftarkannya. Register-ScheduledTask.
Register-ScheduledTask -Xml (Dapatkan-Konten “\\ Server1 \ public \ NewPsTask.xml” | out-string) -TaskName "NewPsTask"
Di PowerShell 2.0 (Windows 7 / Server 2008 R2), mengimpor pekerjaan juga lebih mudah dengan utilitas schtasks. Tim pertama akan membuat tugas baru. Yang kedua akan segera meluncurkannya (tanpa menunggu pemicu bekerja).
schtasks / create / tn "NewPsTask" / xml "\\ Server1 \ public \ NewPsTask.xml" / ru corp \ aaivanov / rp Pa $$ w0rd
schtasks / Run / TN "NewPsTask"