Membuat Pekerjaan Penjadwal Menggunakan PowerShell

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_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)

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

Kiat. Jika Anda ingin tugas dijalankan setiap kali sistem melakukan boot, perintah pertama harus seperti ini:
$ 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"

Kiat. Ingatlah bahwa sebelumnya, untuk membuat dan mengelola tugas-tugas penjadwal, kemampuan schtasks.exe utilitas konsol bawaan terutama digunakan.

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"

Catatan. Harap perhatikan bahwa contoh ini menunjukkan informasi akun tempat tugas akan diluncurkan. Jika informasi akun tidak ditentukan, maka karena mereka tidak disimpan dalam tugas, mereka akan diminta saat impor.