- Konu sahibi
- #1
İşlemi yönetici yetkili PowerShell oturumunda, Windows’un yerleşik
Sunucudaki görevleri ve durumlarını görmek için PowerShell’i yönetici olarak açın:
İ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:
Görev kök klasördeyse
Örnek olarak
Ö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.
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.
Zaman tabanlı tetikleyiciler için
Sunucu her açıldığında çalışması gereken görevlerde
Mevcut görevin komutunu, zamanını veya hesabını değiştirmek için aynı görevi yeni tanımla yeniden kaydedebilirsiniz.
Bu yöntemde belirtmediğiniz bazı ayarlar korunmayabilir; üretim sunucusunda değiştirmeden önce mevcut görevin tanımını
Görevi tamamen kaldırmak için önce adını ve yolunu doğrulayın, ardından:
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.
Zamanı beklemeden deneme yapmak için görevi başlatın:
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,
Uzak bilgisayarda işlem yapacaksanız komutları doğrudan yerel sunucuda çalıştırmak yerine CIM oturumu kullanabilirsiniz:
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.
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 durum | Anlamı ve sonraki işlem |
|---|---|
| Görev Running durumunda | Gö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 0 | Gö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ıyor | Gö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. |
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.