Follow

PowerShell ile Active Directory Yönetimi: Tek Komutla İnaktif Hesapları ve Süresi Dolan Parolaları Tespit Etme

PowerShell ile Active Directory’de inaktif hesapları ve süresi dolmak üzere olan parolaları tek komutla nasıl tespit ettiğimi, örnek scriptlerle anlatıyorum.
PowerShell Active Directory İnaktif Hesaplar makalesi kapak görseli

Bir müdürün hesabı üç ay önce şirketten ayrılmasına rağmen hâlâ etkin durumda mı? Yoksa yarın parolası dolacak ve haberi olmayan on kişi mi var? Bu tür sorulara “muhtemelen” değil kesin bir cevap vermek istiyorsanız, Active Directory’yi elle taramak yerine PowerShell’e sormanız gerekiyor.

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

LastLogonDate özelliği domain controller’lar arası replikasyon nedeniyle küçük gecikmeler gösterebilir; kritik kararlar öncesinde LastLogonTimestamp ile çapraz kontrol yapmak daha güvenli bir tercih.

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 sorguları elle çalıştırmak tek seferlik bir merak gidermekten öteye geçmiyor. Asıl değer, bunları haftalık bir zamanlanmış görev (Scheduled Task) haline getirip sonucu ilgili kişilere otomatik göndermekte ortaya çıkıyor:

$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"
}

Tespit Etmek Yetmez, Dikkatli Aksiyon Almak Gerekir

İnaktif hesapları otomatik olarak devre dışı bırakmak cazip görünse de, tespit ile aksiyon arasına mutlaka bir onay adımı koyuyorum. Uzun izinli bir çalışanın hesabı yanlışlıkla kapatılırsa, kazandığınızdan çok daha fazla zaman kaybedersiniz:

# Ö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 şeyi değiştirmeden “bu komut çalışsaydı ne olurdu” sonucunu gösteriyor — production script’lerinde test aşamasını atlamamak için elimden bırakmadığım bir alışkanlık.

Bu üç sorguyu bir araya getirdiğinizde elinizde artık haftalık olarak kendi kendini güncelleyen, gerçek bir AD hijyen rutini oluyor. İşin özeti şu: script’i bir kez doğru kurun, sonrasında iş sizi değil script sizi bilgilendirsin.

Comments
Join the Discussion and Share Your Opinion
View Comments (1)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


Newsletter
Join Design Community
Get the latest updates, creative tips, and exclusive resources straight to your inbox. Let’s explore the future of design and innovation together.