Büyüyen bir organizasyonda, kullanılmayan hesapları ve parolası dolmak üzere olan kullanıcıları elle takip etmek imkânsız hale gelir. PowerShell’in Active Directory modülü, bu tür denetimleri tek satırlık komutlara indirger.
90 Gündür Giriş Yapmayan Hesapları Bulma
Import-Module ActiveDirectory
Get-ADUser -Filter {Enabled -eq $true} -Properties LastLogonDate |
Where-Object {$_.LastLogonDate -lt (Get-Date).AddDays(-90)} |
Select-Object Name, SamAccountName, LastLogonDate |
Sort-Object LastLogonDate
Dikkat: LastLogonDate özelliği, domain controller’lar arası replikasyon nedeniyle küçük gecikmeler gösterebilir. Kritik kararlar için LastLogonTimestamp‘ı da çapraz kontrol etmenizi öneririm.
Parolası Yakında Dolacak Kullanıcıları Tespit Etme
$gün = 7
Get-ADUser -Filter {Enabled -eq $true} -Properties PasswordExpired, PasswordLastSet, msDS-UserPasswordExpiryTimeComputed |
Where-Object {
$_.PasswordExpired -eq $false -and
[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") -lt (Get-Date).AddDays($gün)
} |
Select-Object Name, SamAccountName, @{N='ParolaBitişi';E={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}
Otomatik E-posta Bildirimi ile Birleştirme
Bu tür sorguları tek seferlik çalıştırmak yerine, zamanlanmış bir görev (Scheduled Task) olarak haftalık çalıştırıp sonucu ilgili kişilere otomatik e-posta ile göndermek, gerçek operasyonel değeri ortaya çıkarır:
$kullanicilar = Get-ADUser -Filter {Enabled -eq $true} -Properties LastLogonDate |
Where-Object {$_.LastLogonDate -lt (Get-Date).AddDays(-90)}
if ($kullanicilar) {
$body = $kullanicilar | ConvertTo-Html -Property Name, SamAccountName, LastLogonDate | Out-String
Send-MailMessage -From "[email protected]" -To "[email protected]" `
-Subject "90+ Gün İnaktif Hesap Raporu" -Body $body -BodyAsHtml -SmtpServer "smtp.sirket.com"
}
İnaktif Hesapları Otomatik Devre Dışı Bırakma (Dikkatli Kullanım)
Tespit ile aksiyon arasına her zaman bir onay adımı koymanızı öneririm. Tam otomatik devre dışı bırakma riskli olabilir (örn. uzun izinli bir çalışanın hesabı yanlışlıkla kapatılabilir):
# Önce sadece raporla, WhatIf ile test et
Get-ADUser -Filter {Enabled -eq $true} -Properties LastLogonDate |
Where-Object {$_.LastLogonDate -lt (Get-Date).AddDays(-180)} |
Disable-ADAccount -WhatIf
-WhatIf parametresi, gerçekte hiçbir değişiklik yapmadan “bu komut çalışsaydı neler olurdu” senaryosunu gösterir — production script’lerinde test aşamasında vazgeçilmezdir.
Sonuç
PowerShell + AD modülü kombinasyonu, manuel olarak saatler sürecek denetimleri saniyeler içinde, düzenli ve tutarlı şekilde yapmanızı sağlar. Anahtar, bu scriptleri tek seferlik değil, zamanlanmış ve raporlanan bir sürece dönüştürmektir.