PowerShell Zamanlanmış Görevi Nasıl Oluşturulur
PowerShell betikleri günlük görevleri otomatikleştirmenin veya haftalık raporlar oluşturmanın harika bir yoludur. Peki PowerShell betikleriniz için zamanlanmış bir görevi nasıl yaparsınız? Bunu bir PowerShell betiği çalıştırmak için görev zamanlayıcıyla veya görevi PowerShell'de oluşturmak için yapabiliriz.
Zamanlanmış görevlerin avantajı, bunları ayarlayıp unutabilmenizdir. Arka planda çalışacaklar ve sistemlerinizi güncelleyecekler veya manuel olarak yapmak zorunda kalacağınız raporları oluşturacaklar.
Bu yazımızda görev zamanlayıcı ile PowerShell scriptinin nasıl çalıştırılacağına ve PowerShell’de zamanlanmış görevin nasıl oluşturulacağına bakacağız.
PowerShell Betiğini Çalıştırmak için Görev Zamanlayıcıyı Kullanma
Bakacağımız ilk seçenek, bir PowerShell Komut Dosyasını çalıştırmak için Windows'taki görev zamanlayıcıyı kullanmaktır. Windows Görev Zamanlayıcı'nın kökeni Windows 95'tir! ve Windows'ta görevleri zamanlamanın harika bir yoludur.
PowerShell betiklerini görev zamanlayıcıyla çalıştırmak için zamanlamak istediğimiz PowerShell dosyasını seçemiyoruz. Yapacağımız şey PowerShell “programını” çalıştırmak ve çalıştırmak istediğimiz dosyayı seçmek için argümanları kullanmak.
Gereken süre: 2 dakika
Görev Zamanlayıcı'yı açın
Başlat'ı tıklayın ve açmak için “Görev zamanlayıcı” yazın. Veya Windows Yönetimsel Araçlar (veya Win 11 kullanırken Windows Araçları) altındaki Başlat Menüsü'nden seçin.
Yeni bir temel görev oluşturun
Sağ taraftaki işlem çubuğunda Temel Görevler Oluştur… seçeneğini tıklayın ve görevinize bir ad verin.
(Görevlerinizi klasörler halinde düzenlemenizi, sol tarafta oluşturmanızı öneririm ilk)Görevi planlayın
Tetikleyici, görevin ne zaman yürütülmesi gerektiğini belirler. Bir tetikleyici seçin (örneğin, Haftalık) ve görevlerin tam olarak ne zaman yürütülmesi gerektiğini yapılandırmak için İleri'yi tıklayın.
Eylemi Ayarlayın
İşte önemli kısım geliyor, eylem için Bir Program Başlatacağız
Bir Program Başlatın - PowerShell
Çalıştırmak istediğimiz program PowerShell'dir. Program/Komut Dosyası alanına PowerShell yazmanız yeterlidir (6. adımdaki ekran görüntüsüne bakın), yürütülebilir dosyanın tam yolunu bulmanız gerekmez.
Argüman Ekle
Argümanlar alanına
-Fileargümanını ve PowerShell betiğinin yolunu ekleyeceğiz. Ayrıca-NoProfilePowerShell anahtarını eklemek ve-ExecutionPolicy'yi ByPass olarak ayarlamak da iyi bir fikirdir.
Komut dosyalarınız herhangi bir parametre gerektiriyorsa o zaman bunları yoldan sonra ekleyebilirsiniz (örneğin -Output parametresi):-NoProfile -ExecutionPolicy Bypass -File "C: \scripts\ADHealth.ps1" -Çıktı "HTML"Başlangıç
Başlangıç konumunu her zaman komut dosyanızın bulunduğu konumla aynı yola ayarlayın. Bu şekilde, komut dosyanızın oluşturduğu tüm dışa aktarımlar, komut dosyanızla aynı konumda depolanacaktır. Aksi takdirde çıktı C:\Windows\System32 dizinine kaydedilecektir.
Bitir
İleri 'yi tıklayın ve bitiş ekranında ayarlarınızı gözden geçirin. Daha fazla ayar yapılandırmamız için Özellikler iletişim kutusunu aç… seçeneğini seçtiğinizden emin olun.
Gelişmiş Ayarlar
Zamanlanmış PowerShell görevimiz için değiştirmemiz gereken iki ayar var. Komut dosyasının biz oturum açmadığımızda bile çalıştığından emin olmamız gerekecek, bunu Genel sekmesinde yapabilirsiniz.
Ayrıca komut dosyasının bir süreden fazla çalışıyorsa durduğundan emin olmak istiyoruz. bir gün. Bu ayarı Ayarlar altında değiştirin ve Daha uzun sürerse görevi durdur seçeneğini 1 gün veya daha az olarak ayarlayın.Görevi kaydedin
Tamam 'ı tıklayın ve şifrenizi girin; böylece görev, oturum açmadığınızda da çalıştırılabilir. Görevinizi test etmek, üzerine sağ tıklayıp ve görevi şimdi çalıştırmak için Çalıştır 'ı seçmek her zaman iyi bir fikirdir.
Zamanlanmış Görev Oluşturmak için PowerShell'i Kullanma
Elbette zamanlanmış görevleri oluşturmak ve yönetmek için PowerShell'i de kullanabiliriz. PowerShell'de zamanlanmış bir görev oluşturmak birkaç adım gerektirir. Her adım için kullanacağımız farklı bir cmdlet var.
Zamanlanmış görevi oluşturmak için aşağıdaki cmdlet'leri kullanacağız:
- New-ScheduledTaskTrigger
Zamanlanmış bir görev için tetikleyici nesne oluşturur
- New-ScheduledTaskAction
Zamanlanmış bir görev için eylem oluşturur
- Register-ScheduledTask
Zamanlanmış bir görevi kaydeder
- Get-ScheduledTask
Zamanlanmış görevleri göster
PowerShell'de zamanlanmış bir görev oluşturmak için en azından görevin Tetikleyicisini ve Eylemini tanımlamamız gerekir. Yani her Cuma çalışan ve bir PowerShell betiğini çalıştıran basit bir görev oluşturmak için aşağıdakileri yapabiliriz:
$taskTrigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Friday -At 3am
$taskAction = New-ScheduledTaskAction -Execute "PowerShell" -Argument "-NoProfile -ExecutionPolicy Bypass -File 'C:\scripts\ADHealth.ps1' -Output 'HTML'" -WorkingDirectory 'c:\scripts'
Register-ScheduledTask 'Lazy PS Tasks' -Action $taskAction -Trigger $taskTriggerBu, görev zamanlayıcıyla oluşturduğumuz görevin aynısını yaratacaktır. Ancak hangi seçeneklere sahip olduğumuzu görmek için cmdlet'lerin her birini açıklayalım.
Tetikleyiciyi Oluşturma - Yeni Zamanlanmış Görev Tetikleyicisi
İlk adım tetikleyiciyi tanımlamaktır. Bu, görevi ne zaman çalıştırmak istediğimizi belirler. Görev zamanlayıcıda olduğu gibi görevimiz için birden fazla tetikleyici tanımlayabiliriz.
New-ScheduledTaskTrigger cmdlet'i, görevin ne zaman çalıştırılmasını istediğinizi tanımlamanıza olanak tanıyan birkaç parametreyle birlikte gelir:
- AtLogOn - Kullanıcı oturum açtığında görevi çalıştırır
- AtStartup - Sistem başlatıldığında
- At - Bir Kez, Günlük veya Haftalık ile kullanılır. Görevi çalıştırmak için belirli zamanı tanımlar
- Günlük - Her gün çalışır. DaysOfWeek ile günleri tanımlayın
- DaysInterval - Her x günde bir çalıştır
- DaysOfWeek - Bu, Günlük veya Haftalık ile kullanılabilir. Görevin hangi günlerde çalıştırılacağını tanımlar
- Haftalık - Görevleri her hafta çalıştırır
- WeeklyInterval - Haftalar arasındaki aralığı belirler.
Yani görevi her hafta Salı ve Perşembe günleri sabah 08:30'da çalıştırmak için aşağıdaki tetikleyiciyi oluşturabiliriz:
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Tuesday,Thursday -At 8:30amEylemi Tanımlama - New-ScheduledTaskAction
PowerShell'de zamanlanmış görev eylemi oluşturmak için hangi programın çalışmasını istediğimizi, herhangi bir bağımsız değişkeni (örneğin PowerShell komut dosyalarının yolu) ve isteğe bağlı olarak çalışma dizinini tanımlamamız gerekir.
Yani PowerShell betiğimizi çalıştırmak için -Execute parametresini PowerShell olarak ayarlayacağız ve dosya yolunu ve diğer parametreleri -Argument parametresinde tanımlayacağız. Komut dosyalarınız gerektiriyorsa -WorkingDirectory parametresini komut dosyanızın yoluna ayarlayabilirsiniz.
$action = New-ScheduledTaskAction -Execute 'PowerShell' -Argument '-NoProfile -ExecutionPolicy Bypass -File "C:\scripts\ADHealth.ps1" -Output "HTML"'
Görev Oluşturma - Register-ScheduledTask
Tetikleyici ve eylem tanımlandığında, zamanlanmış görevi oluşturabilir ve kaydedebiliriz. Görevimize bir isim vermemiz gerekecek ve ayrıca bir GörevPath (klasör) eklemenizi de tavsiye ederim. Bu, daha sonra görevlerinizi geri almanızı kolaylaştıracaktır.
Register-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath 'LazyTasks' -Action $taskAction -Trigger $taskTriggerBelirtildiği gibi göreviniz için birden fazla tetikleyici ve eylem tanımlayabilirsiniz. Bunu yapmak için tetikleyiciyi veya eylemleri bir diziye eklemeniz gerekir. Örneğin, görevi her Salı ve Perşembe günü ve ayın ilk gününde çalıştırmak için şunları yapabiliriz:
# Define the triggers for Tuesday and Thursday at 08:30 AM and when a user logs on
$taskTriggers = @(
New-ScheduledTaskTrigger -Weekly -DaysOfWeek Tuesday,Thursday -At 08:30,
New-ScheduledTaskTrigger -AtLogon
)
Register-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath 'LazyTasks' -Action $taskAction -Trigger $taskTriggersGörevi Farklı Ayrıcalıklarla Çalıştırma
Görev Zamanlanmış ile PowerShell görevini oluşturduğumuzda, kullanıcı oturum açsa da açmasa da görevi çalıştırma seçeneğini etkinleştirdik. Bunun için görevi çalıştırmak için kullanıcı adını ve şifreyi de sağlamamız gerekiyordu. Ayrıca görevin -RunLevel parametresini en yüksek olarak ayarlamamız gerekecek:
Register-ScheduledTask -TaskName "Lazy PowerShell Tasks" -taskPath 'LazyTasks' -Action $taskAction -Trigger $taskTrigger -User "lazyadmin\Administrator" -Password 'yourPass123' -RunLevel Highest
Zamanlanmış Görevi Görüntüle
Oluşturduğunuz görevleri görev zamanlayıcıda görüntüleyebilirsiniz. Ancak zamanlanmış görevi PowerShell ile de alabilirsiniz. Bunun için Get-ScheduledTask cmdlet'ini kullanmamız gerekecek. Cmdlet'i herhangi bir parametre olmadan çalıştırırsanız, bilgisayarınızdaki tüm zamanlanmış görevleri alacaktır.
Ve gördüğünüz gibi bu oldukça fazla. Bu nedenle taskPath parametresini kullanarak görevlerinizi klasörler halinde düzenlemeniz önemlidir. Bu şekilde yalnızca görevlerimizi görüntülemek için TaskPath parametresini kullanabilirsiniz:
Get-ScheduledTask -TaskPath \LazyTasks\Görev yolu her zaman ters eğik çizgi \ ile başlar ve biter. Görevlerinizi görüntülemek için GörevAdı'nı sağlamanız gerekir. Eğer isim benzersiz ise o zaman isim tek başına yeterli olacaktır. Aksi takdirde yolu da sağlamanız gerekecektir:
Get-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath \LazyTasks\ | Select *Yukarıdaki ekran görüntüsünde görebileceğiniz gibi görevin tüm ayrıntılarını göremiyoruz. Eylemleri veya Tetikleyicileri görüntülemek için özellikleri genişletmemiz gerekecek. Bunu ExpandProperty yöntemini kullanarak veya sonuçları bir değişkene kaydederek yapabiliriz:
Get-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath \LazyTasks\ | Select -ExpandProperty Triggers
# Or
$task = Get-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath \LazyTasks\
$task.TriggersGörevleri Güncelleme
Zamanlanmış görevleri PowerShell ile güncellemek için Set-ScheduledTask cmdlet'ini kullanabilirsiniz. Register-ScheduledTask cmdlet'ine benzer şekilde çalışır. Önce yeni bir tetikleyici veya eylem oluşturun ve ardından onu tıpkı oluşturduğunuz gibi ekleyin.
# Define new trigger
$newTrigger= New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At 08:30
# Update the task
Set-ScheduledTask -TaskName "Lazy PowerShell Tasks" -taskPath 'LazyTasks'-Trigger $newTriggerKapanış
PowerShell Görevlerini Zamanlama hem Görev Zamanlayıcı ile hem de PowerShell'de Register-ScheduledTask cmdlet'i ile yapılabilir. Şahsen ben PowerShell kullanarak görev oluşturmayı daha kolay buluyorum, ancak onu değiştirmek için görev zamanlayıcıyı daha kullanışlı buluyorum.
Yine de PowerShell betiklerinizi planlamak için her iki seçeneği de kullanabilirsiniz. Umarım bu makaleyi faydalı bulmuşsunuzdur, herhangi bir sorunuz varsa aşağıya yorum bırakmanız yeterli.






