Görev Zamanlayıcı (Task Scheduler) üzerinden çalışan PowerShell scriptlerinde, özellikle uzak sunuculardaki servis durumlarını kontrol eden bölümlerde sık karşılaşılan bir sorun vardır. PowerShell konsolunda sorunsuz çalışan bir script, Görev Zamanlayıcı’dan çalıştığında:
-
“Access is denied (0x80070005)”
-
“Cannot find service ‘Netlogon’”
gibi hatalar verebilir. Bunun temel nedeni, Task Scheduler’daki belirli bir ayardır.
Bu yazıda, özellikle Domain Controller servislerini (Netlogon, NTDS, DNS vb.) raporlayan PowerShell scriptlerinde görülen bu hatanın nedenini ve çözümünü adım adım ele alıyoruz.
1. “Do not store password” Seçeneği ve Uzak Sunucu Hataları
Görev ayarlarında bulunan:
“Do not store password. The task will only have access to local computer resources.” seçeneği işaretli olduğunda görev, kullanıcı şifresini saklamaz. Bu durumda görev yalnızca yerel bilgisayarda ilgili kullanıcı kimliğiyle çalışır. Uzak bir sunucuya bağlanıldığında kullanıcı kimliği iletilmediği için:
-
WMI sorguları
-
RPC bağlantıları
-
Servis durum sorguları başarısız olur.
Bu seçenek aktifken ortaya çıkan tipik hatalar
Bu ayar açıkken aşağıdaki türde hatalar ve yanlış sonuçlar sık görülür:
-
Access is denied (0x80070005)
-
Cannot find service ‘Netlogon’
-
Uzak sunucudan servis durumu alınamaması
-
Hata yerine “servis yok” veya “hizmet bulunamadı” gibi yanlış sonuçların dönmesi
Özellikle Domain Controller’ların Netlogon, NTDS, DNS gibi kritik servislerini raporlayan scriptlerde bu sorun belirgin şekilde ortaya çıkar.
Çözüm: “Do not store password” kutusunu kaldırın
Bu sorunu çözmek için:
-
İlgili görevin (task) özelliklerine girin.
-
“Do not store password…” kutusunun işaretini kaldırın.
-
Görevi kaydederken sizden bir kez şifre istenecektir.
-
Parolayı girdiğinizde görev, kullanıcı kimliğini uzak sunucular üzerinde de kullanabilir hale gelir.
Böylece WMI, RPC ve servis sorguları için gerekli kimlik delegasyonu sağlanır ve hata almadan uzak sunuculara erişebilirsiniz.
2. “Run with highest privileges” Gerekliliği
Uzak servis okuma, WMI sorguları ve Active Directory testleri gibi işlemler çoğu zaman yönetici (admin) yetkisi gerektirir. Bu nedenle Görev Zamanlayıcı’da:
“Run with highest privileges” seçeneğinin aktif olması önemlidir.
Aksi halde bazı WMI veya sistem sorguları:
-
Eksik sonuçlar üretebilir
-
Hata vermeden, yanlış veya boş değer döndürebilir
Bu nedenle görev mutlaka etki alanı (domain) üzerinde yetkili bir kullanıcı hesabı ile ve en yüksek ayrıcalıklarla çalıştırılmalıdır.
PowerShell ve Görev Zamanlayıcı’da Uzak Sunucu Erişim Hatalarının Ana Sebebi
Görev Zamanlayıcı ile çalışan PowerShell otomasyonlarında, uzak sunucu erişim hatalarının büyük bölümü kimlik delegasyonu ve yetki aktarımı ile ilgilidir.
-
“Do not store password” seçeneğinin işaretli olması, bu delegasyonu engellediği için en sık görülen hata kaynağıdır.
-
Bu ayarın kapatılması ve görevde kullanılan hesabın şifresinin depolanması, servis kontrollerinin ve WMI sorgularının sorunsuz şekilde çalışmasını sağlar.
-
Ek olarak, “Run with highest privileges” seçeneğinin aktif edilmesi, yönetici yetkisi gerektiren tüm WMI ve sistem kontrolleri için kritik öneme sahiptir.
Bu ayarlar doğru yapılandırıldığında:
-
Active Directory sağlık kontrolü
-
Uzak servis raporlaması
-
Domain Controller servis izleme
-
PowerShell ile otomatik sunucu denetimleri Görev Zamanlayıcı üzerinden hatasız şekilde çalışır.
