Posted in

Active Directory LastLogon – LastLogonTimeStamp – LastLogonDate attribute değerleri

Active Directory’de kullanıcıların “en son ne zaman oturum açtığı” bilgisine ulaşmak her sistem yöneticisinin mutlaka ihtiyaç duyduğu bir konudur. Ancak işin içine girince karşımıza üç farklı alan çıkar:
LastLogon, LastLogonTimeStamp ve LastLogonDate.
Peki bunlar ne demek, ne zaman hangisini kullanmalıyız?

 

1. LastLogonEn Kesin, Ama En Dağınık Olan

  • Bu alan, bir kullanıcının belirli bir Domain Controller (DC) üzerinden en son ne zaman oturum açtığını gösterir. Yani merkezi değildir, sadece o DC’ye özeldir.

  • Replikasyon yapılmaz. Her DC kendi verisini tutar.

  • Diyelim ki 3 DC’niz var; bir kullanıcı DC1 üzerinden oturum açtıysa, sadece DC1 bu bilgiyi bilir. DC2 ve DC3’te hâlâ eski tarih kalır.

Ne zaman kullanılır?
Gerçek zamanlı, doğru veri istiyorsanız bu alanı sorgulamalısınız. Ancak her DC’den tek tek veri çekip en yeni olanı manuel (veya script ile) karşılaştırmanız gerekir.

 

2. LastLogonTimeStampYaklaşık Bilgi, Ama Replike Edilir

  • Bu alan, tüm DC’ler arasında replike edilen tek oturum bilgisi alanıdır.

  • Ancak hemen güncellenmez; 14 gün gecikmeli olarak güncellenir.

  • Microsoft bu gecikmeyi bilinçli yapar, çünkü her girişte anında replikasyon sistemi yavaşlatabilir.

  • Özellikle kullanıcı sık sık oturum açıyorsa, veri daha geç güncellenir.

Ne zaman kullanılır?

Toplu raporlar, inaktif kullanıcı tespiti, lisans optimizasyonu gibi işlemlerde kullanılır. Çok hassas bilgi gerekmezse gayet yeterlidir.

3. LastLogonDatePowerShell’de Kullanıcı Dostu Görünüm

  • Aslında bu alan, LastLogonTimeStamp‘in tarih formatına çevrilmiş halidir.

  • PowerShell komutu Get-ADUser -Properties LastLogonDate dediğinizde, arka planda LastLogonTimeStampalanı okunur ama size daha okunabilir bir formatta gösterilir.

Ne zaman kullanılır?
Hızlıca kullanıcıların son giriş tarihini toplu görmek istediğinizde, özellikle PowerShell raporlarında oldukça işlevseldir.

Peki Hangisini Kullanmalıyız?

İhtiyacınız En Uygun Alan
Gerçek zamanlı, doğru login bilgisi LastLogon (her DC’den çekilmeli)
Raporlama, inaktif kullanıcı temizliği LastLogonTimeStamp
PowerShell ile görsel ve sade çıktı LastLogonDate

 

Biz bu alanları değerlendirirken genelde şöyle ilerliyoruz:

  • Eğer denetim veya şüpheli oturum takibi yapıyorsak: Tüm DC’lerden LastLogon çekiyoruz ve en güncel olanı referans alıyoruz.

  • Eğer amacımız aktif olmayan kullanıcıları bulup temizlemek ya da lisans yükünü azaltmak ise: LastLogonTimeStamp yeterli oluyor.

  • PowerShell ile IT ekibine hızlı rapor çıkarmamız gerekiyorsa: LastLogonDate ile basit ve okunabilir tablolar oluşturuyoruz.

 

LastLogonTimeStamp güncellemesi için olan 14 günlük süreyi kısaltmak isteyebilirsiniz. Active Directory üzerindeki ms-DS-Logon-Time-Sync-Interval özelliğini kısaltmak isterseniz aşağıdaki powershell komutu ile bunu yapabilirsiniz. Örnek komut 7 gün içindir. Bu değişikliğin replikasyon trafiğinde artış yapacağını da tabi ki söylemezsek olmaz.

 

Set-ADObject -Identity “CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=yourdomain,DC=com” -Partition “CN=Configuration,DC=yourdomain,DC=com” -Add @{msDS-LogonTimeSyncInterval=7}

 

Ekteki script de tüm DC ‘lerden rapor çekerek rapor almanız için kullanılabilir.

 

Sorun yaşamanız durumda geri bildirimde bulunabilirsiniz.

 

Diğer active directory konuları için link.

 

# Tüm kullanıcılar için LastLogon, LastLogonTimeStamp ve LastLogonDate bilgilerini alır
# Sonuçları CSV olarak dışa aktarır

Import-Module ActiveDirectory

# Domain’deki tüm Domain Controller’ları al
$DCs = Get-ADDomainController -Filter *

# Raporu tutacak dizi
$results = @()

# Tüm kullanıcıları al (filtrelenebilir)
$users = Get-ADUser -Filter * -Properties LastLogonTimeStamp

foreach ($user in $users) {
$latestLogon = 0
foreach ($dc in $DCs) {
# Her DC’den LastLogon değeri çek
$logon = (Get-ADUser $user.SamAccountName -Server $dc.HostName -Properties LastLogon).LastLogon
if ($logon -gt $latestLogon) {
$latestLogon = $logon
}
}

# LastLogonTimeStamp ve LastLogonDate hesapla
$llts = if ($user.LastLogonTimeStamp) { [DateTime]::FromFileTime($user.LastLogonTimeStamp) } else { $null }
$lld = if ($llts) { $llts.ToString(“yyyy-MM-dd HH:mm”) } else { “Yok” }

# Sonuçları ekle
$results += [PSCustomObject]@{
KullaniciAdi = $user.SamAccountName
AdSoyad = $user.Name
EnGuncelLastLogon = if ($latestLogon) { [DateTime]::FromFileTime($latestLogon).ToString(“yyyy-MM-dd HH:mm”) } else { “Yok” }
LastLogonTimeStamp = if ($llts) { $llts.ToString(“yyyy-MM-dd HH:mm”) } else { “Yok” }
LastLogonDate_PSh = $lld
}
}

# Sonuçları CSV olarak dışa aktar (isteğe bağlı)
$results | Export-Csv -Path “LastLogonReport.csv” -NoTypeInformation -Encoding UTF8

# Ekrana yazdır
$results | Format-Table -AutoSize

Leave a Reply

Your email address will not be published. Required fields are marked *