Helpdesk’in en sık karşılaştığı “Şifrem çalışmıyor, süresi dolmamıştı?” türü taleplerde, çoğu zaman pwdLastSet’e bakmak yanlış yönlendirir. Çünkü pwdLastSet sadece son değişim zamanını söyler; şifrenin tam olarak ne zaman biteceğini söylemez. Bunun doğru ve tartışmayı bitiren yolu, AD’nin hesaplayıp sunduğu msDS-UserPasswordExpiryTimeComputed attribute’udur.
Neden pwdLastSet Yetmez?
pwdLastSet: Şifrenin en son ne zaman değiştirildiğini gösterir.Şifre politikasının (domain policy veya Fine-Grained Password Policy) parametreleri (maksimum şifre yaşı, minimum yaş vb.) bu tarih üzerinde hesaplanır.Gerçek bitiş tarihini hesaplamak için tüm bu kurallar ve olası DC farkları dikkate alınmalıdır.Doğru yanıt: msDS-UserPasswordExpiryTimeComputed — AD’nin kendisinin hesapladığı net bitiş tarihi.
msDS-UserPasswordExpiryTimeComputed Kullanım örnekleri
1- Tüm kullanıcıları şifre bitiş tarihine göre sırala
Get-ADUser -Filter * -Properties msDS-UserPasswordExpiryTimeComputed, PasswordNeverExpires |
Select-Object SamAccountName,
@{Name="PasswordExpiryDate"; Expression={
if ($_.PasswordNeverExpires) { $null }
elseif ($_. 'msDS-UserPasswordExpiryTimeComputed') {
[datetime]::FromFileTime($_. 'msDS-UserPasswordExpiryTimeComputed')
} else { $null }
}} |
Sort-Object PasswordExpiryDate
2- Belirli bir kullanıcı için şifre bitiş tarihini öğrenme
Get-ADUser kullanıcıAdı -Properties msDS-UserPasswordExpiryTimeComputed, PasswordNeverExpires |
Select-Object Name, PasswordNeverExpires,
@{Name="PasswordExpiryDate"; Expression={
if ($_.PasswordNeverExpires) { "Never" }
elseif ($_. 'msDS-UserPasswordExpiryTimeComputed') {
[datetime]::FromFileTime($_. 'msDS-UserPasswordExpiryTimeComputed')
} else { $null }
}}
3- Şifresi 7 gün içinde bitecek kullanıcılar
$limit = (Get-Date).AddDays(7)
Get-ADUser -Filter * -Properties msDS-UserPasswordExpiryTimeComputed, PasswordNeverExpires |
Where-Object {
-not $_.PasswordNeverExpires -and
$_. 'msDS-UserPasswordExpiryTimeComputed' -ne $null -and
[datetime]::FromFileTime($_. 'msDS-UserPasswordExpiryTimeComputed') -lt $limit
} |
Select-Object SamAccountName,
@{Name="PasswordExpiryDate"; Expression={[datetime]::FromFileTime($_. 'msDS-UserPasswordExpiryTimeComputed')}} |
Sort-Object PasswordExpiryDate
``