Görkem

WFN Üye
Konular
1,788
Mesajlar
1,824
Çözüm
1
Ticaret Puanı
0
Üyelik
1 Yıl 7 Ay 9 Gün
Konum
Adıyaman
Web Sitesi
Yok
Alanı
Reklam Al-Sat
1/1
Konu sahibi
İşlemi yönetici yetkili PowerShell oturumunda, Windows’un yerleşik ScheduledTasks modülüyle yapabilirsiniz. Temel akış; çalıştırılacak komutu New-ScheduledTaskAction ile tanımlamak, zamanı New-ScheduledTaskTrigger ile belirlemek, hesabı ve yetki seviyesini seçmek, ardından Register-ScheduledTask ile görevi kaydetmektir. Kayıt sonrasında Get-ScheduledTask, Get-ScheduledTaskInfo ve gerektiğinde Start-ScheduledTask ile görevin durumunu kontrol edebilirsiniz.

Yönetilecek görevi önce görüntüleyin​


Sunucudaki görevleri ve durumlarını görmek için PowerShell’i yönetici olarak açın:

Kod:
Get-ScheduledTask | Select-Object TaskName, TaskPath, State

Get-ScheduledTaskInfo -TaskName "GörevAdı"

İlk komut görev adını, klasör yolunu ve mevcut durumu listeler. İkinci komut son çalıştırma zamanını, bir sonraki çalıştırmayı ve son çalışma sonucunu gösterir. Görevin listede görünmesi, görevin başarıyla çalıştığını kanıtlamaz; bunun için son çalışma zamanı ve son çalışma sonucu ayrıca incelenmelidir.

Belirli bir klasördeki görevi arıyorsanız görev yolunu da yazın:

Kod:
Get-ScheduledTask -TaskPath "\Uygulamalar\" -TaskName "GünlükBakım"

Görev kök klasördeyse -TaskPath vermeniz gerekmez. Aynı ada sahip görevler farklı klasörlerde bulunabileceği için yönetim komutlarında görev yolunu belirtmek karışıklığı önler.

Yeni bir PowerShell görevi oluşturun​


Örnek olarak C:\Scripts\SunucuBakim.ps1 dosyasını her gün saat 02.00’de çalıştıran bir görev oluşturalım. Aşağıdaki örnek varsayımsaldır; dosya yolunu kendi sunucunuzdaki gerçek betik yolu ile değiştirmelisiniz.

Ön koşul: Betik dosyası belirtilen konumda bulunmalı ve görevi çalıştıracak hesabın bu dosyaya, betiğin kullandığı klasörlere ve gerekli kaynaklara erişimi olmalıdır.

Kod:
$action = New-ScheduledTaskAction `
    -Execute "PowerShell.exe" `
    -Argument '-NoProfile -NonInteractive -ExecutionPolicy Bypass -File "C:\Scripts\SunucuBakim.ps1"' `
    -WorkingDirectory "C:\Scripts"

$trigger = New-ScheduledTaskTrigger -Daily -At "02:00"

$principal = New-ScheduledTaskPrincipal `
    -UserId "CONTOSO\svc-bakim" `
    -LogonType Password `
    -RunLevel Highest

$settings = New-ScheduledTaskSettingsSet `
    -StartWhenAvailable `
    -ExecutionTimeLimit (New-TimeSpan -Hours 1)

Register-ScheduledTask `
    -TaskName "Sunucu Bakımı" `
    -TaskPath "\Yönetim\" `
    -Action $action `
    -Trigger $trigger `
    -Principal $principal `
    -Settings $settings `
    -Description "Sunucu bakım betiğini her gün saat 02.00'de çalıştırır."

Bu komut görevi oluşturup kaydeder. Parolayla çalışan bir kullanıcı hesabı seçtiyseniz, kayıt sırasında PowerShell sizden hesabın parolasını isteyebilir. Parolayı betik içine veya komut satırına düz metin olarak yazmayın. Hizmet hesabı kullanıyorsanız hesabın parola süresi, oturum açma hakkı ve dosya/uzak kaynak izinleri kurum politikanıza uygun olmalıdır.

-ExecutionPolicy Bypass yalnızca bu görevin başlatılma biçimini etkiler; betiğin güvenilir olduğunu veya yaptığı işlemlerin güvenli olduğunu kanıtlamaz. Betiği ayrıca inceleyin ve mümkünse geniş yetki yerine yalnızca ihtiyaç duyduğu yetkilerle çalışan bir hesap kullanın.

Tetikleyiciyi ihtiyaca göre değiştirin​


Zaman tabanlı tetikleyiciler için -Daily veya -Weekly kullanabilirsiniz. Örneğin yalnızca pazartesi ve cuma günleri saat 23.30’da çalıştırmak için:

Kod:
$trigger = New-ScheduledTaskTrigger `
    -Weekly `
    -DaysOfWeek Monday,Friday `
    -At "23:30"

Sunucu her açıldığında çalışması gereken görevlerde -AtStartup, belirli bir kullanıcı oturum açtığında çalışması gereken görevlerde -AtLogOn kullanılır. Bir göreve birden fazla tetikleyici de ekleyebilirsiniz; tetikleyicilerden herhangi biri gerçekleştiğinde görev başlatılabilir.

Kaydedilmiş görevi değiştirme, devre dışı bırakma ve silme​


Mevcut görevin komutunu, zamanını veya hesabını değiştirmek için aynı görevi yeni tanımla yeniden kaydedebilirsiniz. -Force kullanmak mevcut kaydın üzerine yazılmasını sağlar:

Kod:
$action = New-ScheduledTaskAction `
    -Execute "PowerShell.exe" `
    -Argument '-NoProfile -NonInteractive -File "C:\Scripts\SunucuBakim.ps1"'

$trigger = New-ScheduledTaskTrigger -Daily -At "03:00"

Register-ScheduledTask `
    -TaskName "Sunucu Bakımı" `
    -TaskPath "\Yönetim\" `
    -Action $action `
    -Trigger $trigger `
    -Force

Bu yöntemde belirtmediğiniz bazı ayarlar korunmayabilir; üretim sunucusunda değiştirmeden önce mevcut görevin tanımını Export-ScheduledTask ile XML olarak yedeklemek daha güvenlidir. Yalnızca geçici olarak durdurmak istiyorsanız görevi silmeyin:

Kod:
Disable-ScheduledTask -TaskName "Sunucu Bakımı" -TaskPath "\Yönetim\"
Enable-ScheduledTask  -TaskName "Sunucu Bakımı" -TaskPath "\Yönetim\"

Görevi tamamen kaldırmak için önce adını ve yolunu doğrulayın, ardından:

Kod:
Unregister-ScheduledTask `
    -TaskName "Sunucu Bakımı" `
    -TaskPath "\Yönetim\" `
    -Confirm:$false

Silme işlemi görevin kaydını kaldırır; betik dosyasını veya betiğin ürettiği günlükleri otomatik olarak silmez. Bu nedenle kaldırmadan önce görev tanımını ve gerekli günlükleri ayrı olarak saklayın.

Görevi hemen çalıştırıp sonucu doğrulayın​


Zamanı beklemeden deneme yapmak için görevi başlatın:

Kod:
Start-ScheduledTask -TaskName "Sunucu Bakımı" -TaskPath "\Yönetim\"

Start-Sleep -Seconds 5
Get-ScheduledTaskInfo -TaskName "Sunucu Bakımı" -TaskPath "\Yönetim\"

Start-ScheduledTask işlemi eşzamanlı olmayan biçimde başlatır; komutun hata vermemesi betiğin tamamlandığı anlamına gelmez. LastRunTime değerinin güncellenmesini, LastTaskResult değerini ve betiğin kendi günlük çıktısını birlikte kontrol edin.
Görülen durumAnlamı ve sonraki işlem
Görev Running durumundaGörev başlatılmıştır; betiğin tamamlandığını kanıtlamaz. Betik günlüğünü ve işlem sonucunu bekleyin.
Son çalışma sonucu 0Görev işlemi başarı koduyla tamamlanmış olabilir. Betiğin yaptığı işin gerçekten tamamlandığını kendi günlük veya çıktı dosyanızdan doğrulayın.
Son çalışma sonucu sıfırdan farklıBetiğin ya da başlatma koşullarının hata verdiğini gösterir. Betik yolu, çalışma klasörü, hesap izinleri, ağ erişimi ve görev geçmişini kontrol edin.
LastRunTime boş kalıyorGörev henüz çalışmamış, devre dışı olabilir veya tetikleyici zamanı gelmemiş olabilir. State, Enabled durumu ve trigger tanımını inceleyin.
PowerShell betiği açılmıyor yolu, -File parametresindeki dosya yolu, çalışma klasörü ve görevi çalıştıran hesabın dosya izinleri birlikte kontrol edilmelidir.
Görev başarısızsa betiği aynı hesapla etkileşimli oturumda çalıştırmak tek başına yeterli bir test değildir; etkileşimli oturumda bulunan ortam değişkenleri, ağ kimlik doğrulaması veya kullanıcı profili görev çalışırken bulunmayabilir. Bu nedenle görevin gerçek hesabını, çalışma klasörünü ve kullandığı tüm mutlak yolları kontrol edin. Sorun sürerse görev adı, görev yolu, Get-ScheduledTaskInfo çıktısı, son çalışma zamanı, hata kodu ve betik günlüğündeki ilgili bölüm birlikte incelenmelidir; parola gibi hassas bilgileri paylaşmayın.

Uzak Windows sunucusunu yönetme​


Uzak bilgisayarda işlem yapacaksanız komutları doğrudan yerel sunucuda çalıştırmak yerine CIM oturumu kullanabilirsiniz:

Kod:
$session = New-CimSession -ComputerName "SRV01"

Get-ScheduledTask -CimSession $session

Start-ScheduledTask `
    -TaskName "Sunucu Bakımı" `
    -TaskPath "\Yönetim\" `
    -CimSession $session

Remove-CimSession $session

Uzak yönetimin çalışması için ağ bağlantısı, kimlik doğrulaması, güvenlik duvarı ve hesabın hedef sunucudaki yetkileri uygun olmalıdır. Görev yerelde görünmüyorsa önce doğru bilgisayara bağlandığınızı ve CIM oturumunun gerçekten oluşturulduğunu doğrulayın; bağlantı başarılı olsa bile hedef hesaba görev üzerinde işlem yapma yetkisi verilmemiş olabilir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic