Bir AD Kullanıcı Parolasının Süresi Dolmak Üzere Olduğunda Parola Değiştirme Bildirimi


Bu yazıda, bir Active Directory kullanıcı hesabının parolasının PowerShell kullanılarak ne zaman sona ereceğini nasıl öğreneceğimizi, bir parolanın asla sona ermeyecek şekilde nasıl ayarlanacağını göstereceğiz (

PasswordNeverExpires = True

) ve şifrelerini değiştirmeleri için kullanıcıları önceden bilgilendirin.

Bir etki alanındaki kullanıcı parolasının süresi dolmuşsa, hesap kilitli değildir, ancak kullanıcı süresi dolan parolayı yenisiyle değiştirene kadar etki alanı kaynaklarına erişmek için kullanılamaz. Çoğu zaman, uzak kullanıcılar parolalarını standart araçları kullanarak değiştiremedikleri için süresi dolmuş parolalarla ilgili sorunlarla karşılaşırlar.

Bir etki alanındaki kullanıcı parolasının geçerlilik süresi sınırı, ne sıklıkta değiştirilmesi gerektiği (maksimum parola yaşı) ve karmaşıklık gereksinimleri AD etki alanı parola ilkesinde belirlenir. Bu parametreler, Varsayılan Etki Alanı İlkesi veya Ayrıntılı Parola İlkesi'nde ayarlanır.

Bu PowerShell komutunu kullanarak bir etki alanındaki geçerli parola süre sonu ilkesi ayarlarını alabilirsiniz:

Get-ADDefaultDomainPasswordPolicy|select MaxPasswordAge

Örneğimizde, etki alanındaki maksimum kullanıcı şifresi yaşı 60 gündür.

Active Directory'de Kullanıcı Parolası Son Kullanma Tarihi Nasıl Alınır?

Net user komutunu kullanarak parola yaşını ve en son değiştirildiği tarihi komut isteminde görüntüleyebilirsiniz:

net user jsmith /domain

İhtiyacınız olan bilgileri şu satırlarda bulabilirsiniz:

  • Son parola ayarı — 9/9/2020 09:23:59

  • Parolanın süresi doluyor — 7/1/2021 09:23:59

  • Şifre değiştirilebilir — 10.09.2020 09:23:59

Herhangi bir kullanıcı için şifre son kullanma tarihini alabilirsiniz. Bunu yapmak için, kullanıcı hesaplarına sahip AD kapsayıcısında yönetici ayrıcalıklarına veya yetki verilmiş ayrıcalıklara ihtiyacınız yoktur.

AD hesaplarının ayarlarını görüntülemek için, farklı AD nesne özniteliklerinin değerlerini almanıza izin veren Active Directory için özel bir PowerShell modülü kullanacağız (Windows 10 ve Windows Server 2012 R2/2016'da AD PowerShell modülünün nasıl yüklenip içe aktarılacağına bakın. ).

Get-ADUser cmdlet'ini kullanarak, kullanıcının şifresinin en son değiştirildiği tarihi görüntüleyebilir ve PasswordNeverExpires seçeneğinin ayarlanıp ayarlanmadığını kontrol edebilirsiniz:

get-aduser jsmith -properties PasswordLastSet, PasswordNeverExpires, PasswordExpired |ft Name, PasswordLastSet, PasswordNeverExpires,PasswordExpired

  • PasswordLastSet, son şifre değişikliğinin tarihi ve saatidir;

  • PasswordNeverExpires, bir kullanıcı parolasının süresi asla dolmazsa True değerini döndürür;

  • PasswordExpired - bir kullanıcı parolasının süresi dolmuşsa True değerini, parolanın süresi dolmamışsa False değerini döndürür.

Grafik MMC ek bileşeninde son parola değişikliğinin zamanını Active Directory Kullanıcıları ve Bilgisayarları'nda kontrol edebilirsiniz (

dsa.msc

). Bunu yapmak için kullanıcı özelliklerini açın, Öznitelik Düzenleyici sekmesine gidin ve pwdLastSet özniteliğinin değerini kontrol edin.

Ancak gördüğünüz gibi, MMC ek bileşeni yalnızca parolanın değiştirildiği zamanı gösterir. Parolanın süresinin ne zaman dolacağı belli değil.

Parolanın son değiştirilme tarihi yerine son kullanma tarihini almak için özel olarak oluşturulmuş bir AD özelliği kullanın: msDS-UserPasswordExpiryTimeComputed. msDS-UserPasswordExpiryTimeComputed değeri, son parola değişikliği tarihine ve etki alanı parola ilkesine göre otomatik olarak hesaplanır.

UserPasswordExpiryTimeComputed parametresi, tarihi TimeStamp biçiminde döndürür, bu yüzden ben

FromFileTime

insan tarafından okunabilir değere dönüştürme işlevi:

Get-ADUser -Identity jsmith -Properties msDS-UserPasswordExpiryTimeComputed | select-object @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") }}

Böylece, bir kullanıcı şifresi son kullanma tarihi aldık.

msDS-UserPasswordExpiryTimeComputed değeri 0 ise, pwdLastSet'in boş (null) olduğu veya 0'a eşit olduğu (şifre hiç değiştirilmemiştir) anlamına gelir.

AD'deki belirli kapsayıcıdan (OU) tüm kullanıcılar için parola son kullanma tarihlerini almak için aşağıdaki PowerShell betiğini kullanabilirsiniz:

$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=a-d,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword
$Users | select Name, @{Name="ExpirationDate";Expression= {[datetime]::FromFileTime ($_."msDS-UserPasswordExpiryTimeComputed")}}, PasswordLastSet

Etkin kullanıcıların listesini, son parola değişikliğinin son kullanma tarihini ve saatini içeren bir tabloyla sonuçlanır.

Yalnızca süresi dolmuş parolaları olan kullanıcıların listesini görüntüleyebilirsiniz:

$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=a-d,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, CannotChangePassword
foreach($user in $Users){
if( [datetime]::FromFileTime($user."msDS-UserPasswordExpiryTimeComputed") -lt (Get-Date)) {
$user.Name
}
}

AD Kullanıcı Parolasının Süresi Asla Geçmeyecek Şekilde Nasıl Ayarlanır?

Bir hesap için kalıcı bir parola ayarlamak istiyorsanız, AD'deki kullanıcı özelliklerinde Password Never Expires seçeneğini işaretleyin (UserAcoutControl özniteliğinin bit değerlerinden biridir).

Veya kullanıcı özniteliğini ayarlayarak bu seçeneği PowerShell ile etkinleştirebilirsiniz:

Get-ADUser jsmith | Set-ADUser -PasswordNeverExpires:$True

Bir metin dosyasındaki bir listeden birden çok kullanıcı için Parola Asla Süresi Dolmaz seçeneğini aynı anda ayarlayabilirsiniz:

$users=Get-Content "C:\PS\users_password_never_expire.txt"
Foreach ($user in $users) {
Set-ADUser $user -PasswordNeverExpires:$True
}

Tüm kullanıcıların listesini devre dışı bırakılmış normal parola değiştirme seçeneğiyle görüntüleyebilirsiniz:

Get-ADUser -filter * -properties Name, PasswordNeverExpires | where {$_.passwordNeverExpires -eq "true" } |  Select-Object DistinguishedName,Name,Enabled |ft

Active Directory Parola Süre Sonu Bildirim Politikası

Windows, kullanıcılara parolalarını değiştirmeleri gerektiğini bildirmeye izin veren özel bir Grup İlkesi parametresine sahiptir.

İlkenin adı Etkileşimli oturum açma: Kullanıcıdan süre dolmadan önce parolayı değiştirmesini iste ve GPO bölümünde yer alır: Bilgisayar Yapılandırması -> İlkeler -> Windows Ayarları -> Güvenlik Ayarları -> Yerel İlkeler -> Güvenlik Seçenekleri .

İlke varsayılan olarak yerel Windows ayarlarında etkindir ve bildirimler, parolanın süresi dolmadan 5 gün önce görünmeye başlar. Kullanıcıların parola değişikliği bildirimi göreceği gün sayısını değiştirebilirsiniz.

Bu politikayı etkinleştirdikten sonra, kullanıcının parolasının süresi dolarsa, kullanıcı her oturum açtığında tepside parola değiştirme bildirimi görünür.

Consider changing your password
Your password will expire in xx days.

Ayrıca, 5 günden daha kısa bir süre içinde sona ererse parolayı değiştirme istemini içeren bir iletişim penceresini otomatik olarak gösteren basit bir PowerShell komut dosyası da kullanabilirsiniz:

Add-Type -AssemblyName PresentationFramework
$curruser= Get-ADUser -Identity $env:username -Properties 'msDS-UserPasswordExpiryTimeComputed','PasswordNeverExpires'
if ( -not $curruser.'PasswordNeverExpires') {
$timediff=(new-timespan -start (get-date) -end ([datetime]::FromFileTime($curruser."msDS-UserPasswordExpiryTimeComputed"))).Days
if ($timediff -lt 5) {
$msgBoxInput = [System.Windows.MessageBox]::Show("Your password expires in "+ $timediff + " days!`nDo you want to change it now?","Important!","YesNo","Warning")
switch ($msgBoxInput) {
'Yes' {
cmd /c "explorer shell:::{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}"
}
'No' { }
}
}
}

Bir kullanıcı EVET'i tıklarsa, düğmesine bastıktan sonra gördüğünüz bir Windows Güvenliği penceresi görünür.

Ctrl+Alt+Del

veya

Ctrl+Alt+End

(bir RDP/RDS bağlantısı olması durumunda).

Betik, AD modülü için PowerShell'in kullanıcıların bilgisayarlarına kurulu olduğunu ima eder. RSAT kurulu olmasa bile kullanılabilir. “RSAT kurmadan AD modülünü kullanma” makalesine bakın.

PS komut dosyası için otomatik başlatmayı etkinleştirin veya onu bir GPO oturum açma komut dosyası olarak çalıştırın.

Powershell Aracılığıyla Parola Sona Erme E-posta Bildirimi

Kullanıcıları parolalarının sona erme tarihi hakkında e-posta ile bilgilendirmek istiyorsanız, bu PowerShell betiğini kullanabilirsiniz:

$Sender = "info@a-d.site"
$Subject = 'Important! Your password expires soon!'
$BodyTxt1 = 'Your password for'
$BodyTxt2 = 'expires in '
$BodyTxt3 = 'days. Remember to change your password in advance. If you have other questions, contact the HelpDesk.'
$smtpserver ="smtp.a-d.site"
$warnDays = (get-date).adddays(7)
$2Day = get-date
$Users = Get-ADUser -SearchBase 'OU=Users,OU=NewYork,DC=a-d,DC=com' -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, EmailAddress, Name | select Name, @{Name ="ExpirationDate";Expression= {[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, EmailAddress
foreach ($user in $users) {
if (($user.ExpirationDate -lt $warnDays) -and ($2Day -lt $user.ExpirationDate) ) {
$lastdays = ( $user.ExpirationDate -$2Day).days
$EmailBody = $BodyTxt1, $user.name, $BodyTxt2, $lastdays, $BodyTxt3 -join ' '
Send-MailMessage -To $user.EmailAddress -From $Sender -SmtpServer $smtpserver -Subject $Subject -Body $EmailBody
}
}

Komut dosyası, parolalarının süresi dolmak üzere olan tüm etkin etki alanı kullanıcılarını kontrol eder. Parolanın süresinin dolmasından 7 gün önce, bir kullanıcı AD'de belirtilen adrese gönderilen e-postaları almaya başlar. E-postalar, parola değiştirilene veya süresi dolana kadar gönderilir.

Bir yönetici, Set-ADAccountPassword cmdlet'ini kullanarak kullanıcı parolasını değiştirmeye zorlayabilir.

Bu PowerShell betiğini, etki alanınızdaki herhangi bir bilgisayarda/sunucuda düzenli olarak çalıştırın (bunu Görev Zamanlayıcı ile yapmak daha kolaydır). Elbette, SMTP sunucunuzdaki izin verilen gönderenler listesine (kimlik doğrulaması olmadan e-posta gönderebilir) e-posta gönderen ana bilgisayarın IP adresini eklemeniz gerekecektir.

İlgili makaleler