İçeriğe geç
Yeni yazı çıkınca e-posta · 4.812 abone 244 rehber · 102 ipucu · 82 komut RSS GitHub LinkedIn İletişim
Ara Ctrl K Bültene katıl
Tüm arşiv · 244 rehber →
Tüm araçlar · 75 üreteç →
PowerShell · Sıfırdan Active Directory · 4. bölüm

Pasif AD hesaplarını 10 satırda raporlayın

90 gündür giriş yapmayan hesapları listeleyin, CSV'ye dökün ve güvenle devre dışı bırakın. Bu rehber, tek başına LastLogonDate'e güvenmenin neden hataya açık olduğunu da gösteriyor.

Mustafa Çelik 28 Temmuz 2026 · 14 dk okuma Son güncelleme: 29 gün önce

Her Active Directory ortamında, işten ayrılmış ama hesabı hâlâ açık duran kullanıcılar birikir. Bunlar yalnızca lisans israfı değil; saldırı yüzeyinin en sessiz parçasıdır. Aşağıdaki tek komut zinciri, 90 gündür giriş yapmamış aktif hesapları bulup denetlenebilir bir CSV’ye döker.

Neden LastLogonDate tek başına yetmez

LastLogonDate, lastLogonTimestamp özniteliğinden türetilir ve bu öznitelik domain controller’lar arasında 9 ila 14 günlük bir gecikmeyle eşitlenir. Yani dün giriş yapmış bir kullanıcı, raporda iki hafta önce girmiş gibi görünebilir. Sınırı 90 gün seçmemizin sebebi tam olarak budur: eşitleme gecikmesi bu aralıkta gürültü yaratmaz.

Gerçek zamanlı doğruluk gerekiyorsa lastLogon özniteliğine bakmanız gerekir — ama o da eşitlenmez, her DC kendi değerini tutar. Yani tüm DC’leri tek tek sorgulayıp en büyüğünü almanız gerekir. Çoğu senaryoda buna gerek yoktur.

Komut

# 90 gündür giriş yapmayan, hâlâ etkin hesaplar
$sinir = (Get-Date).AddDays(-90)

Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly |
  Get-ADUser -Properties LastLogonDate, whenCreated, Enabled |
  Where-Object { $_.Enabled -and $_.whenCreated -lt $sinir } |
  Select-Object Name, SamAccountName, LastLogonDate, whenCreated |
  Sort-Object LastLogonDate |
  Export-Csv '.\pasif-hesaplar.csv' -NoTypeInformation -Encoding UTF8

whenCreated kontrolü kritik: yeni açılmış ama henüz hiç giriş yapılmamış hesaplar aksi hâlde listeye düşer ve stajyerin ilk gününde hesabını kapatmış olursunuz.

-Encoding UTF8 de öyle: Türkçe adları olan hesaplar aksi hâlde Excel’de bozuk görünür.

Devre dışı bırakmadan önce doğrulama

Listeyi doğrudan uygulamayın. Üç adımlık şu kontrol, geri dönüşü olmayan hataları engelliyor:

  1. Hizmet hesaplarını ayıklayın. svc-, sa- gibi öneklerle başlayan hesaplar interaktif giriş yapmaz; pasif görünmeleri normaldir.
  2. İK listesiyle çapraz kontrol edin. Uzun süreli izin, doğum izni ve askerlik durumundaki kullanıcılar bu raporda çıkar.
  3. Silmeden önce devre dışı bırakın ve 30 gün “Karantina” OU’sunda bekletin. Silme işlemi geri alınamaz; devre dışı bırakma tek tıkla geri alınır.

Karantinaya taşıma da tek satır:

Import-Csv '.\pasif-hesaplar.csv' | ForEach-Object {
  Disable-ADAccount -Identity $_.SamAccountName
  Move-ADObject -Identity (Get-ADUser $_.SamAccountName).DistinguishedName `
    -TargetPath 'OU=Karantina,DC=sirket,DC=local'
}

Doğrulama adımı

Komutu çalıştırdıktan sonra (Import-Csv .\pasif-hesaplar.csv).Count ile satır sayısını kontrol edin. Toplam kullanıcı sayınızın %20’sinden fazlaysa filtre yanlış kurulmuştur — büyük olasılıkla -UsersOnly parametresi atlanmış ve bilgisayar hesapları da listeye girmiştir.

Sayı makulse raporu İK ile paylaşın ve onay bekleyin. Bu adımı atlayıp doğrudan uygulamak, bu işin bilinen tek geri dönülemez hatasıdır.

Mustafa Çelik

Altyapı ve Operasyon Müdürü, İstanbul. 25 yıldır BT altyapısı, sistem yönetimi ve ağ altyapısıyla uğraşıyor; öğrendiklerini bu blogda üretim ortamında denenmiş rehberlere çeviriyor.

Hakkımda

Bu rehber işinize yaradıysa, sonrakini kaçırmayın.

Yeni yazı yayınlandığında tek e-posta. Takvim yok, dilediğiniz an çıkabilirsiniz.

Bülten sağlayıcısı henüz bağlanmadı. Bağlanana kadar e-posta ile yazabilirsiniz ya da RSS akışını takip edebilirsiniz.