Görev Zamanlayıcıyı Kullanarak PowerShell Komut Dosyasını Zamanlama


PowerShell betiği, tekrarlanan görevlerin manuel olarak yapılmasını azaltır. Komut dosyalarını önceden tanımlanmış zamanlarda veya belirli zaman aralıklarında sık sık çalıştırıyorsanız, komut dosyalarını tekrar tekrar çalıştırmaktan yorulmuş olabilirsiniz. Ardından, komut dosyası yürütmeyi sizin için otomatikleştirmek için Windows'un Görev Zamanlayıcısını kullanabilirsiniz. Günlük/haftalık olarak komut dosyasını çalıştırırken zaman ve emekten tasarruf etmenizi sağlar. PowerShell betiğini Görev zamanlayıcı aracılığıyla nasıl zamanlayacağımızı görelim.

İki şekilde yapılabilir.

1.Görev Zamanlayıcı GUI'sini kullanarak PowerShell betiğini planlayın

2.PowerShell kullanarak Görev Zamanlayıcı'dan PowerShell betiğini zamanlayın

1. Yöntem: Görev Zamanlayıcı'yı kullanarak PowerShell Komut Dosyasını Zamanlama

Görev Zamanlayıcı'yı açın ('Yönetimsel araçlar'da veya 'Windows+R' tuşlarına basarak çalıştır'ı açın ve ardından “taskschd.msc” yazın.)

Görev Zamanlayıcı'dan bir komut dosyası çalıştırmak için aşağıdaki adımları izleyin.

1.Görev zamanlayıcıyı açın -> Görev Zamanlayıcı Kitaplığı -> Görev Oluştur

2.Genel sekmesinde, görevin hangi amaçla oluşturulduğu gibi zamanlayıcı adını ve görevle ilgili açıklamayı ayarlayabilirsiniz.

Mevcut güvenlik seçenekleri aşağıda açıklanmıştır.

  • Görevin adına çalıştırılacağı kullanıcıyı belirtin.
  • Bir görevin çalışması gerektiğini belirtebilirsiniz. Bu, 'Kullanıcının oturum açmış olup olmadığını çalıştır' etiketli bir radyo düğmesi seçilerek yapılabilir. Bu radyo düğmesi seçilirse görev etkileşimli olarak çalışmaz. Bir görevin etkileşimli olarak çalışmasını sağlamak için 'Yalnızca kullanıcı oturum açtığında çalıştır' radyo düğmesini seçin.
  • 'Kullanıcının oturum açıp açmadığını çalıştır' seçildiğinde, 'Şifreyi saklama onay kutusunu işaretleyip seçmemenize bakılmaksızın, hesabın kimlik bilgilerini girmenizi isteyebilirsiniz. güçlü>' ya da değil. Görevin yürütülmesi sırasında hesapta oturum açılmazsa kayıtlı kimlik bilgileri kullanılacaktır.
  • Görev yükseltilmiş ayrıcalıklar gerektiriyorsa 'En yüksek ayrıcalıklarla çalıştır seçeneğini seçin.

3.Tetikleyici sekmesine geçin ve Yeni düğmesini tıklayın. Burada bir görevi tetikleyen koşulları ayarlayabilirsiniz.

  • Görevin ne zaman başlatılacağını belirtebilirsiniz. Örneğin, 'Görevi başlat' açılır menüsünü seçerek bunun bir programa göre, başlangıçta, oturum açma sırasında veya belirli bir olay meydana geldiğinde yürütülmesini sağlayabilirsiniz.

  • Senaryonuza göre bu görevi bir kez mi yoksa günlük mü, haftalık mı yoksa aylık mı çalıştırmak istediğinizi yapılandırabilirsiniz.
  • “Gelişmiş ayarlar”da, görevi geciktirmeyi, görevi tekrarlamayı, belirtilen süre ve son kullanma tarihinden daha uzun sürerse görevi durdurmayı seçebilirsiniz.

    • Görevi şu ana kadar geciktir: Bu, rastgele bir gecikme ekler, böylece görev günün tam saatinde istatistiklenmez.
    • Görevi her defasında tekrarla - Bir tetikleyici tetiklendikten sonra bir görevin kaç kez çalıştırılması gerektiğini gösterir.

      • Görevi her tekrarla - Her görev tekrarı arasındaki zaman aralığı
      • Bir görevin ne kadar süreyle tekrarlanmaya devam etmesi gerektiği
    • Görevi, beklenen süreden uzun sürerse durdurun - Görev beklenen süreden uzun sürerse veya hiç sonlandırılmazsa, görev belirtilen süre sınırına ulaştığında otomatik olarak durdurulur.
    • Sona Erme - Belirtilen süre sonunda program tetiklenmeyecektir.

4.Ardından bir sonraki 'İşlemler' sekmesini açın ve 'Yeni' düğmesini tıklayın.

  • Eylem açılır menüsünde, varsayılan olarak "Bir program başlat" ayarlıdır. Gerekirse değiştirebilirsiniz.
  • Gözat'ı kullanarak program/kod alanını seçin. Bir betiği planlamak için powershell.exe'yi seçmemiz gerekiyor.
    Powershell.exe dosyasını system32\WindowsPowerShell\v1.0 klasörünüzde bulabilirsiniz.
  • 'Argüman ekle'de, -File parametresi varsayılan parametredir; bu nedenle komut dosyası yolunu belirtmeniz yeterlidir. Örneğin, Office 365 kullanıcılarının MFA durum raporunu dışa aktaran bir komut dosyası planlayacağım.
c:\GetMFAStatus.ps1

Yolda herhangi bir boşluk varsa, tırnak içine alınmalıdır.

5. Yapılandırıldıktan sonra görevin çalışıp çalışmayacağını belirlemek için koşulları belirleyebilirsiniz. Burada belirtilen herhangi bir koşul doğru değilse görev çalışmayacaktır.

6.Ayarlar sekmesinde, görevin yürütülmesini kontrol etmek için ek gelişmiş ayarlar belirleyebilirsiniz.

Son olarak, zamanlanmış bir komut dosyası oluşturmak için Tamam'ı tıklayın.

Zamanlanmış komut dosyası, zamanlamanıza göre herhangi bir sorun olmadan beklendiği gibi çalışacaktır. Komut dosyasının yürütülmesini kontrol etmek istiyorsanız görev adına sağ tıklayarak Çalıştır'a tıklayabilirsiniz.

Parametrelerle Görev Zamanlayıcı'dan PowerShell Komut Dosyasını Otomatikleştirin

PowerShell betiğini parametrelerle planlamak istiyorsanız aşağıdaki biçimi kullanın.

Script path -Param 1 Value1 -Param2 “Value 2”

Örneğin, PowerShell betiğimizden birini otomatikleştireceğim: Office 365 Kullanıcılarını Dışa Aktarma MFA durum raporu

Planlama sırasında, kimlik bilgilerini aşağıda gösterildiği gibi açıkça parametre olarak iletebilirsiniz:

C:\GetMFAStatus.ps1 -UserName "XXX XX" -Password ****

Parametre değerinde boşluk varsa değerler tırnak içine alınmalıdır.

Not: Parolaları düz metin olarak iletmeye daha güvenli bir alternatif istiyorsanız sertifikaları kullanmayı düşünün. Yöneticiler, pahalı üçüncü taraf CA sertifikalarına olan ihtiyacı ortadan kaldırarak dahili amaçlar için kolaylıkla kendinden imzalı sertifikalar oluşturabilir.

Bir switch parametresini iletmek istiyorsanız aşağıdaki sözdizimini kullanabilirsiniz.

 C:\GetMFAStatus.ps1 -EnabledOnly

Yukarıdaki komut dosyası, MFA durumu etkin olan Office 365 kullanıcılarının MFA durumunu dışa aktarır. Burada -EnabledOnly bir anahtar parametresidir.

Office 365 ile ilgili daha fazla PowerShell komut dosyası için O365Reports.com bloguna başvurabilirsiniz.

2. Yöntem: PowerShell Kullanarak Görev Zamanlayıcı'dan PowerShell Komut Dosyasını Zamanlama

PowerShell betiğini otomatikleştiren zamanlama görevi oluşturmak için GUI yerine PowerShell cmdlet'lerini kullanabilirsiniz. Aşağıdaki adımları içerir,

1. Zamanlayıcı için zamanı tanımlayın

2. Yürütme sırasında gerçekleştirilecek eylemleri ayarlayın

3. Zamanlayıcıyı kaydet

Zamanlayıcı için Zamanı Tanımlayın:

New-SchdeuledTaskTrigger zamanlanmış bir görev tetikleyici nesnesi oluşturur. Bu cmdlet'i kullanarak bir görevin başlangıç zamanını veya bir görevin günlük veya haftalık olarak birden çok kez başlatılmasını belirtebilirsiniz.

 $Time=New-ScheduledTaskTrigger -At 4.00PM -Once

Yukarıdaki cmd, saat 16:00'da başlayan ve bir kez çalıştırılan zamanlanmış bir görev tetikleyicisi oluşturur.

   $Time=New-ScheduledTaskTrigger -At 4.00PM -Daily -DaysInterval 2

Yukarıdaki cmd, her 2 günde bir saat 16:00'da başlayan zamanlanmış bir görev tetikleyicisi oluşturur

Yürütme Sırasında Gerçekleştirilecek Eylemleri Ayarlayın:

New-SchdeuledTaskAction, Görev Zamanlayıcı görevi çalıştırdığında yürütülen eylemleri temsil eder. Bir görevin tek bir eylemi veya en fazla 32 eylemi olabilir. Birden fazla eylem belirttiğinizde, Görev Zamanlayıcı bir görevi sırayla yürütür.

 $Action=New-ScheduledTaskAction -Execute PowerShell.exe -WorkingDirectory C:/Scripts -Argument “C:\Scripts\MFAStatus.ps1 -UserName XXXX -Password YYYY”

Bu komut bir PowerShell açar ve dizini C:/Scripts olarak değiştirir ve ardından MFAStatus.ps1 betiğini çağırır.

Zamanlayıcıyı Kaydet:

Register-ScheduledTask, zamanlanmış görevi yerel bir bilgisayara kaydeder.

 Register-ScheduledTask -TaskName "Schedule MFA Status Report" -Trigger $Time -Action $Action -RunLevel Highest

Yukarıdaki cmd, zamanlanmış bir görevi kök klasöre “Schedule MFA Status Report” adı ile kaydeder. Kaydedilen görev, $Action ve $Time değişkenleri tarafından belirtilen önceden oluşturulmuş eylem ve tetikleme değerlerini kullanır.

Kullanım Durumları:

Görev Zamanlayıcı'yı kullanarak bir PowerShell betiğini düzenli aralıklarla çalışacak şekilde zamanlayabilirsiniz. Böylece günlük/Haftalık/aylık olarak manuel olarak bir komut dosyası çalıştırmanıza gerek kalmaz. İnternette zamanlayıcı dostu daha fazla komut dosyası mevcuttur (Kimlik bilgileri komut dosyasının içine kaydetmek yerine parametre olarak iletilebilir). Burada bazı örnekler verdim.

  • Office 365 kullanıcılarının oturum açma geçmişini izleyin - Denetim günlüğünü 90 günden fazla tutun
  • Office 365 kullanıcılarının MFA durumuna ilişkin periyodik rapor
  • Office 365 kullanıcılarının son oturum açma zamanı raporunu planlama
  • Office 365 Posta Kutusu İzni raporunu planlayın
  • Office 365 kullanıcılarının lisans raporunu planlama
  • Dağıtım Grubu üyeliğini planlayın PowerShell betiği
  • Dinamik Dağıtım Grubu Üyeliğini Zamanlama PowerShell betiği
  • Office 365 kullanıcılarının son etkinlik raporuna ilişkin periyodik rapor
  • Office 365 kullanıcılarının oturum açma geçmişi PowerShell raporunu planlama
  • Paylaşılan posta kutusu izin raporunu düzenli aralıklarla dışa aktarın
  • Sahibi olmayan posta kutusu erişim raporunu planlama
  • Office 365 kullanıcılarının parola geçerlilik süresi raporu

Bu blogda, Görev Zamanlayıcı'yı kullanarak bir PowerShell betiğini nasıl otomatikleştireceğimizi gördük. Zamanlama söz konusu olduğunda tercih ettiğiniz yaklaşım nedir - GUI mi yoksa PowerShell mi? Yorumlar bölümünde bize bildirin.

İlgili makaleler