PowerShell ile Zamanlanmış Görevler Nasıl Oluşturulur ve Yönetilir?
Çoğu kullanıcı ve yönetici,
taskschd.mscWindows'ta zamanlanmış görevleri oluşturmak ve yönetmek için grafik arayüz konsolu. Ancak, çeşitli betiklerde ve otomatikleştirilmiş akışlarda, zamanlanmış görevler oluşturmak için PowerShell özelliklerini kullanmak çok daha uygundur. Bu makalede, PowerShell kullanarak Windows Zamanlayıcı görevlerinin nasıl oluşturulacağını ve yönetileceğini göstereceğiz.
PowerShell aracılığıyla Windows'ta Zamanlanmış Görevleri Yönetme
ScheduledTasks PowerShell modülü, Windows 10/Windows Server 2016'da zamanlanmış görevleri yönetmek için kullanılır. Bir modüldeki cmdlet'leri aşağıdaki gibi listeleyebilirsiniz:
Get-Command -Module ScheduledTasks- Disable-ScheduledTask
- Enable-ScheduledTask
- Export-ScheduledTask
- Get-ClusteredScheduledTask
- Get-ScheduledTask
- Get-ScheduledTaskInfo
- New-ScheduledTask
- New-ScheduledTaskAction
- New-ScheduledTaskPrincipal
- New-ScheduledTaskSettingsSet
- New-ScheduledTaskTrigger
- Register-ClusteredScheduledTask
- Register-ScheduledTask
- Set-ClusteredScheduledTask
- Set-ScheduledTask
- Start-ScheduledTask
- Stop-ScheduledTask
- Unregister-ClusteredScheduledTask
- Unregister-ScheduledTask
İpucu. Önceden, yerleşik konsol aracı
schtasks.exe
Windows'ta zamanlayıcı işleri oluşturmak ve yönetmek için kullanıldı.
Windows PowerShell ile Zamanlanmış Görev Oluşturma
PowerShell'in modern sürümlerinde (Windows Server 2012/Windows 8'de PowerShell 3.0 ile başlayarak), zamanlanmış görevler oluşturmak için New-ScheduledTaskTrigger ve Register-ScheduledTask cmdlet'lerini kullanabilirsiniz.
Başlatma sırasında (veya belirli bir zamanda) çalışması gereken zamanlanmış bir görev oluşturmamız ve bazı PowerShell betiğini veya komutunu yürütmemiz gerektiğini varsayalım. StartupScript1 adlı zamanlanmış bir görev oluşturalım. Bu görev, her gün saat 10:00'da PowerShell betik dosyası C:\PS\StartupScript.ps1'i çalıştırmalıdır. Görev, SYSTEM hesabı altında yükseltilmiş ayrıcalıklarla ("En yüksek ayrıcalıklarla çalıştır" onay kutusu) yürütülecektir.
$Trigger= New-ScheduledTaskTrigger -At 10:00am -Daily
$User= "NT AUTHORITY\SYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\StartupScript1.ps1"
Register-ScheduledTask -TaskName "StartupScript1" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest -ForceGörev başarıyla oluşturulduysa "Hazır" durumu görünür.
PowerShell betiğiniz belirtilen zamanlamaya göre çalışacaktır. Bilgisayarınızda PS1 komut dosyalarının yürütülmesini engelleyen etkin bir PowerShell Yürütme İlkesi varsa, zamanlanmış bir görevden bir PowerShell komut dosyasını çalıştırabilirsiniz.
-Bypassparametre.
Yeni bir görev oluştururken bu kodu kullanın:
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument “-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:\PS\StartupScript.ps1"İpucu. Görevin bilgisayar başlatılırken her seferinde çalışmasını istiyorsanız, ilk komutun aşağıdaki gibi olması gerekir:
$Trigger= New-ScheduledTaskTrigger -AtStartupBir kullanıcı oturum açtığında bir görevi çalıştırmak istiyorsanız:
$Trigger= New-ScheduledTaskTrigger -AtLogonAç
taskschd.msckonsola gidin ve Görev Zamanlayıcı Kitaplığı'nda yeni bir zamanlayıcı göreviniz olduğundan emin olun.
Powershell 2.0'da (Windows 7, Windows Server 2008 R2), PowerShell'den zamanlanmış bir görev oluşturmak için Schedule.Service COM arayüzünü kullanabilirsiniz (veya PowerShell sürümünü güncelleyebilirsiniz). Bu örnekte, başlatma sırasında PowerShell betiğini içeren belirli dosyayı yürütecek zamanlanmış bir görev oluşturuyoruz. Görev ile gerçekleştirilir
NT AUTHORITY\SYSTEMayrıcalıklar.
$TaskName = "NewPsTask"
$TaskDescription = "Running PowerShell script from Task Scheduler"
$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)PowerShell ile Zamanlanmış Görevler Nasıl Görüntülenir ve Çalıştırılır?
Windows'ta tüm etkin zamanlanmış görevleri şu komutla listeleyebilirsiniz:
Get-ScheduledTask -TaskPath | ? state -ne DisabledBelirli bir görev hakkında bilgi almak için:
Get-ScheduledTask CheckServiceState| Get-ScheduledTaskInfoLastRunTime : 4/7/2021 10:00:00 AM
LastTaskResult : 267011
NextRunTime : 4/8/2021 10:00:00 AM
NumberOfMissedRuns : 0
TaskName : CheckServiceState
TaskPath : \
PSComputerName :
Bu görevi devre dışı bırakabilirsiniz:
Get-ScheduledTask CheckServiceState | Disable-ScheduledTaskBir görevi etkinleştirmek için:
Get-ScheduledTask CheckServiceState | Enable-ScheduledTask
Görevi hemen çalıştırmak için (zamanlamayı beklemeden) şunu çalıştırın:
Start-ScheduledTask CheckServiceStateGörev Zamanlayıcı kitaplığından bir görevi tamamen kaldırmak için:
Unregister-ScheduledTask -TaskName CheckServiceStateGörevin başlatıldığı kullanıcı adını ve örneğin uyumluluk modunu değiştirmeniz gerekirse, Set-ScheduledTask cmdlet'i kullanın:
$task_user = New-ScheduledTaskPrincipal -UserId a-d\j.abrams' -RunLevel Highest
$task_settings = New-ScheduledTaskSettingsSet -Compatibility 'Win8'
Set-ScheduledTask -TaskName CheckServiceState_PS -Principal $task_user -Settings $task_settings" hatasını alırsanız
Set-ScheduledTask: No mapping between account names and security IDs was done” doğru kullanıcı adını verdiğinizi kontrol edin.
Zamanlanmış Görevler XML Dosyaları Yoluyla Nasıl Dışa Aktarılır ve İçe Aktarılır?
PowerShell, herhangi bir zamanlanmış görevin geçerli ayarlarını bir metin XML dosyasına aktarmanıza olanak tanır. Böylece, herhangi bir görevin parametrelerini dışa aktarabilir ve bir görevi diğer bilgisayarlara dağıtabilirsiniz. Görev, hem Görev Zamanlayıcı GUI'sinden hem de PowerShell konsolundan dışa aktarılabilir.
StartupScript adlı görevi StartupScript.xml dosyasına aktarma komutu şöyledir:
Export-ScheduledTask StartupScript | out-file c:\tmp\StartupScript.xmlExport-ScheduledTask cmdlet'i PowerShell 2.0'da mevcut değildir, bu nedenle Windows 7/Windows Server 2008 R2'de görev ayarlarını dışa aktarmak ve sonucu bir metne yönlendirmek için yerleşik schtasks aracını kullanmak daha iyidir dosya:
schtasks /query /tn "NewPsTask" /xml >> "c:\tmp\NewPsTask.xml"Zamanlanmış görev ayarları XML dosyasına aktarıldıktan sonra GUI, SchTasks.exe veya PowerShell kullanılarak herhangi bir ağ bilgisayarına alınabilir.
Register-ScheduledTask cmdlet'i, görev ayarlarını bir XML dosyasından içe aktarmanıza ve kaydetmenize yardımcı olabilir:
Register-ScheduledTask -Xml (Get-Content “\\mun-fs01\public\NewPsTask.xml” | out-string) -TaskName "NewPsTask"PowerShell 2.0'da (Windows 7/Server 2008 R2), schtasks aracını kullanarak bir görevi içe aktarmak daha kolaydır. İlk komut yeni bir görev oluşturur. İkincisi onu hemen çalıştıracaktır (olay tetikleyicinin onu etkinleştirmesini beklemeden).
schtasks /create /tn "NewPsTask" /xml "\\Srv1\public\NewPsTask.xml" /ru corp\skrutapal /rp Pa$$w0rd
schtasks /Run /TN "NewPsTask"Lütfen bu örneğin, görevi çalıştırmak için kullanılan hesabın kimlik bilgilerini kullandığını unutmayın. Kimlik bilgileri işte saklanmadıkları için belirtilmezse, içe aktarma sırasında istenecektir.






