AD Diagnostic Tests: Active Directory Sağlık Kontrolü ve Raporlama

   Active Directory (AD), Windows tabanlı ağların merkezi yönetim altyapısını oluşturur. Kullanıcı hesapları, bilgisayarlar, gruplar ve ağ kaynakları DC’ler (Domain Controller) aracılığıyla yönetilir. AD altyapısının sağlığı, organizasyonun tüm bilgi işlem süreçleri için kritik öneme sahiptir. Bu nedenle AD ortamlarının düzenli olarak denetlenmesi ve sorunların erken tespiti gerekir.

AD Diagnostic Tests Nedir?

AD Diagnostic Tests, Microsoft’un sağladığı dcdiag aracına dayanan bir test setidir. Bu testler, DC’lerin sağlık durumunu, replikasyon süreçlerini, DNS çözümlemesini, SYSVOL ve NetLogon paylaşımlarını, RID havuzlarını ve genel AD fonksiyonlarını kontrol eder. 

Bu testler kısaca aşağıdaki gibidir.

  • Connectivity: DC’nin diğer domain controller’larla ve istemcilerle iletişim kurup kuramadığını test eder.
  • Advertising: DC’nin LDAP ve Global Catalog hizmetlerini doğru şekilde network’e ilan edip etmediğini kontrol eder.
  • SysVolCheck: SYSVOL klasörünün paylaşımının ve içerik replikasyonunun doğru çalışıp çalışmadığını doğrular.
  • KccEvent: Knowledge Consistency Checker (KCC) ile ilgili olayları kontrol eder. KCC, AD replikasyon topolojisini yönetir.
  • RidManager: RID havuzlarının (Relative Identifier) düzgün çalışıp çalışmadığını ve DC’nin yeterli RID atayabildiğini denetler.
  • MachineAccount: Bilgisayar hesaplarının doğru şekilde oluşturulduğunu ve replikasyonun sorunsuz olduğunu test eder.
  • LocatorCheck: DC Locator servisi ve SRV kayıtlarının sağlıklı olup olmadığını kontrol eder.
  • FrsEvent: File Replication Service (FRS) ile ilgili kritik olayları kontrol eder. (Genellikle SYSVOL için kullanılır)
  • DFSREvent: Distributed File System Replication (DFS-R) ile ilgili olayları denetler. SYSVOL replikasyonu DFSR kullanıyorsa bu test önemlidir.
  • NetLogons: NetLogon paylaşımının ve logon işlemlerinin düzgün çalışıp çalışmadığını kontrol eder.
  • ObjectsReplicated: AD objelerinin diğer DC’lere doğru şekilde replikasyonunu doğrular.
  • VerifyReferences: AD içindeki nesne referanslarının geçerliliğini kontrol eder (ör. grup üyelikleri, SID referansları).
  • Intersite: AD siteleri arası replikasyon topolojisinin ve bağlantılarının düzgün çalışıp çalışmadığını test eder.
  • CrossRefValidation: DNS ve domain cross-reference kayıtlarını doğrular. Yanlış yapılandırılmış cross-ref’ler replikasyon sorunlarına yol açabilir.
  • CheckSDRefDom: Security Descriptor (SD) ve domain referanslarının tutarlılığını kontrol eder; güvenlik replikasyonu sorunlarını tespit eder.

Modern yönetim süreçlerinde, AD Diagnostic Tests scriptleri kullanılarak sonuçlar otomatik olarak toplanabilir ve görselleştirilebilir. Bunun için Manage Engine Application Manager gibi araçlar kullanılabilir veya aşağıdaki scripti çalıştırabilirsiniz. Aşağıdaki script ADDiagnosticTests.ps1 olarak kayıt ediniz.

# ===============================================
# Self-Elevate: Yönetici olarak çalıştır
# ===============================================
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
    Write-Host "Yönetici hakları gerekli. Script yeniden başlatılıyor..." -ForegroundColor Yellow
    Start-Process powershell "-ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
    exit
}

# ===============================================
# AD Diagnostic Tests - Interactive + Auto Open HTML + Tarih/Saat
# ===============================================

# Domain adı sorulsun
$DomainName = Read-Host "Lütfen domain adını girin (örn: example.local)"

# Credential penceresi aç
$cred = Get-Credential

# Domain Controllerları bul
$dcList = (Resolve-DnsName -Name "_ldap._tcp.$DomainName" -Type SRV).NameTarget

Write-Host "Bulunan DC'ler:" $dcList

# Test listesi
$tests = "Connectivity,Advertising,SysVolCheck,KccEvent,RidManager,MachineAccount,LocatorCheck,FrsEvent,DFSREvent,NetLogons,ObjectsReplicated,VerifyReferences,Intersite,CrossRefValidation,CheckSDRefDom"
$testlist = $tests -split ","

# HTML dosyasını temizle veya oluştur
$htmFile = "C:\diagtest.html"
$now = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"<html><body><h1>AD Diagnostic Report - $DomainName</h1><p>Rapor Tarih/Saat: $now</p></body></html>" | Out-File $htmFile -Encoding UTF8

# Her DC için test çalıştır
foreach ($dc in $dcList) {
    Write-Host "`n===== DC: $dc ====="
    
    $command = "dcdiag"
    foreach ($test in $testlist) {
        $command += " /test:$test"
    }

    # Uzak DC’de çalıştır
    $result = Invoke-Command -ComputerName $dc -Credential $cred -ScriptBlock { param($com) Invoke-Expression $com } -ArgumentList $command

    # Tarih/Saat
    $ts = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

    # HTML hazırlama
    $html = "<h2>AD Diagnostic Test Results - $dc</h2><p>Test Tarih/Saat: $ts</p><table border='1' style='border-collapse: collapse;'><tr><th>Test</th><th>Status</th></tr>"
    foreach ($test in $testlist) {
        $line = $result | Select-String -Pattern $test
        if ($line -match "failed|error") {
            $status = "<td style='background-color:#ffc7ce;color:#9c0006'>Failed</td>"
        } else {
            $status = "<td style='background-color:#c6efce;color:#006100'>Success</td>"
        }
        $html += "<tr><td>$test</td>$status</tr>`n"
    }
    $html += "</table><br>"

    # HTML dosyasına ekle
    Add-Content -Path $htmFile -Value $html
}

Write-Host "`n[+] HTML rapor hazır: $htmFile"

# HTML raporu otomatik aç
Start-Process $htmFile

Scripti sağ tıklayın ve Run with Powershell seçeneği ile çalıştırın. Powershell ekranında domain adı girin ve Enter tuşuna basın. Açılan pencerede domain admin kullanıcı adı ve parola GUI credential penceresine giriniz.

Her DC için tüm testler çalıştırılır ve sonuçlar HTML raporu olarak oluşturularak otomatik olarak açılır. Başarılı testler yeşil (Success), hatalı testler kırmızı (Failed) olarak işaretlenir. Bu yaklaşım sayesinde yöneticiler, hem anlık sağlık durumu hem de tarihsel referans için kapsamlı bir rapor elde eder. Böylece olası hatalar hızlıca tespit edilir ve proaktif önlemler alınabilir.

Sonuç

AD Diagnostic Tests, Active Directory altyapısının sürdürülebilirliğini sağlamak için kritik bir araçtır. Script tabanlı otomasyon ve HTML raporlama ile, yöneticiler hem zaman kazanır hem de tüm DC’lerdeki sağlık durumunu merkezi olarak izleyebilir. Düzenli testler, performansın ve güvenliğin sürdürülebilir olmasına katkıda bulunur.

Blog'a Dön