Cómo configurar notificaciones de expiración de contraseña para usuarios de Active Directory

Bueno, a menos que vivas en un lugar remoto, probablemente hayas notado que, aunque Microsoft ha relajado algunas políticas de contraseñas, la mayoría de las configuraciones locales de AD aún imponen la caducidad de las contraseñas. Y más de una vez, los usuarios olvidan actualizar sus contraseñas a tiempo, lo que provoca esas molestas llamadas a TI, algo que nadie quiere. Este artículo explica cómo comprobar cuándo va a caducar la contraseña de un usuario y encontrar maneras de avisarle con antelación.

Algunas cosas son sencillas, pero Windows puede ser un poco engañoso con la gestión de las notificaciones de caducidad. Así que, si quieres evitar el caos de «contraseña caducada ayer», saber cómo obtener las fechas de caducidad y configurar alertas puede ahorrarte muchos dolores de cabeza. Aprenderás a ver la información de caducidad de las contraseñas con PowerShell, a activar las notificaciones integradas e incluso a crear ventanas emergentes o alertas por correo electrónico personalizadas. Porque, sinceramente, un aviso es mejor que un bloqueo.

Cómo solucionar las notificaciones de caducidad de contraseñas para usuarios de Active Directory

Cómo obtener la fecha de vencimiento de la contraseña de usuario en Active Directory

Primero, debes saber cuándo caducan las contraseñas; de lo contrario, todas las notificaciones son solo conjeturas. La razón principal por la que esto es útil es que te da una fecha límite clara para avisar a los usuarios con antelación, quizás unos días antes, para que puedan cambiarlas sin problemas. En ocasiones, los avisos integrados no son suficientes; aparecen como pequeñas notificaciones emergentes y la mayoría de la gente las ignora, hasta que es demasiado tarde. Ver la fecha de caducidad exacta ayuda a crear mejores recordatorios.

Para ello, ejecute este comando de PowerShell (necesita tener instalado el módulo Active Directory):

Get-ADUser -Identity jsmith -Properties msDS-UserPasswordExpiryTimeComputed, PasswordLastSet, PasswordNeverExpires, PasswordExpired | Select-Object -Property Name, PasswordLastSet, PasswordNeverExpires, PasswordExpired, @{Name="ExpiryDate"; Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

Esto muestra información como la última vez que cambiaron su contraseña y la fecha de vencimiento calculada. Si desea listar todos los usuarios de una unidad organizativa (UO) que están a punto de vencer, puede hacer lo siguiente:

$Users = Get-ADUser -SearchBase "OU=Users, OU=NewYork, DC=woshub, DC=com" -Filter {Enabled -eq $true -and PasswordNeverExpires -eq $false} -Properties msDS-UserPasswordExpiryTimeComputed $Users | Where-Object { ([datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")) -lt (Get-Date).AddDays(7) } | Select-Object Name, @{Name="ExpirationDate"; Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

Nota: Si msDS-UserPasswordExpiryTimeComputed devuelve 0, generalmente significa que la contraseña nunca caduca o no se ha configurado. Es útil tenerlo en cuenta si la cuenta del usuario parece bloqueada.

Habilitar notificaciones de expiración de contraseña mediante la política de grupo

Si los usuarios siguen ignorando la pequeña ventana emergente que Windows muestra por defecto (lo cual ocurre con frecuencia), puede activar la política «Inicio de sesión interactivo: Solicitar al usuario que cambie la contraseña antes de que caduque».Encuentre esta política en:

Configuración del equipo > Políticas > Configuración de Windows > Configuración de seguridad > Políticas locales > Opciones de seguridad.

Esto suele estar habilitado por defecto, con un aviso de unos 5 días. Pero muchas veces, el mensaje parpadea tan brevemente que nadie lo nota. Puedes aumentar los días de aviso (por ejemplo, 14) para avisar a los usuarios con más antelación.

Mostrar ventanas emergentes personalizadas mediante PowerShell

Aquí es donde la cosa se pone un poco más práctica. Puedes configurar un script de PowerShell que muestre un mensaje si una contraseña está a punto de caducar en menos de, digamos, 5 días. Es un poco raro, pero este pequeño script comprueba si tu contraseña caducará pronto y te pregunta si quieres cambiarla ahora.

$DaysLeft = 5 try { Add-Type -AssemblyName PresentationCore, PresentationFramework, WindowsBase, System. Windows. Forms } catch { Throw "Failed to load necessary assemblies." } $curruser = Get-ADUser -Identity $env:USERNAME -Properties 'msDS-UserPasswordExpiryTimeComputed', 'PasswordNeverExpires' if (-not $curruser. PasswordNeverExpires) { $expiry = [datetime]::FromFileTime($curruser."msDS-UserPasswordExpiryTimeComputed") $timediff = ($expiry - (Get-Date)).Days if ($timediff -lt $DaysLeft) { $result = [System. Windows. MessageBox]::Show($"Your password expires in { $timediff } days.`nChange now?", "Password Expiry Alert", "YesNo", "Warning") if ($result -eq "Yes") { # This part tries to open the standard Windows change password UI Start-Process "C:\Windows\System32\CredUIPackagesNotSupported.dll" # Placeholder for actual password change trigger } } } 

Este script necesita que el módulo Active Directory esté disponible. Prográmelo para que se ejecute al iniciar sesión o como parte del script de inicio de sesión de un usuario mediante el Programador de tareas o la directiva de grupo. En algunos equipos, podría no funcionar inmediatamente y requerir un reinicio o una ejecución manual. Es un poco extraño, pero es útil si desea recibir alertas proactivas.

Recuerda que esto solo funciona en equipos conectados a tu dominio de AD. Si los usuarios se conectan remotamente mediante VPN o acceso web (como Outlook Web Access), probablemente los omitirá. En estos casos, puede ser mejor enviar un correo electrónico a los usuarios con antelación.

Automatizar el envío de correos electrónicos de vencimiento con PowerShell

Si prefieres los recordatorios por correo electrónico, puedes obtener la información de vencimiento y enviar un recordatorio por correo electrónico a los usuarios antes de que su contraseña desaparezca. La idea es simple: ejecuta un script que compruebe a quién le queda menos de una semana y envíale un correo electrónico amable informándole.

$Sender = "[email protected]" $Subject = "Important! Your password is about to expire!" $BodyTxt1 = "Your password for " $BodyTxt2 = " expires in " $BodyTxt3 = " days. Please change it before it gets locked." $smtpServer = "smtp.woshub.com" $warnDays = (Get-Date).AddDays(7) $users = Get-ADUser -SearchBase "OU=Users, OU=NewYork, DC=woshub, DC=com" -Filter {Enabled -eq $true -and PasswordNeverExpires -eq $false} -Properties msDS-UserPasswordExpiryTimeComputed, EmailAddress | ForEach-Object { [PSCustomObject]@{ Name = $_. Name ExpirationDate = [datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed") Email = $_. EmailAddress } } foreach ($user in $users) { if ($user. ExpirationDate -lt $warnDays) { $daysLeft = ($user. ExpirationDate - (Get-Date)).Days $body = "$($BodyTxt1)$($user. Name)$($BodyTxt2)$daysLeft$($BodyTxt3)" Send-MailMessage -To $user. Email -From $Sender -SmtpServer $smtpServer -Subject $Subject -Body $body } } 

Necesitarás configurar este script para que se ejecute periódicamente, probablemente una tarea programada que se active a diario aproximadamente. Además, incluye la información de tu servidor SMTP. No necesitas ninguna configuración especial, pero recuerda que si tu SMTP requiere autenticación, deberás añadir el parámetro «-Credential».El script incluso se puede ajustar para enviar mensajes a través de Teams o Slack si lo prefieres. Solo es cuestión de cambiar cómo se envían las notificaciones.

De todos modos, estos métodos no harán que las contraseñas sean mágicas, pero darán suficiente aviso para que los usuarios no se queden con una cuenta inactiva. Con suerte, esto le ahorrará a alguien unas horas de llamadas de «¿Quién olvidó decirle a Bob que su contraseña expiró?».

Resumen

  • Utilice PowerShell con `Get-ADUser` para comprobar las fechas de vencimiento de las contraseñas.
  • Habilite la configuración de seguridad de Windows para que aparezcan avisos antes del vencimiento, si los usuarios realmente prestan atención.
  • Configure ventanas emergentes personalizadas con un pequeño script que verifique la caducidad y solicite cambios.
  • Automatice recordatorios por correo electrónico para los usuarios que están a punto de quedarse sin tiempo.

Resumen

Descubrí una forma de mantener a los usuarios al tanto de las fechas límite de sus contraseñas sin tener que estar pendiente de ellos constantemente. No es infalible, pero es suficiente para evitar algunas llamadas de «contraseña caducada ayer».En una máquina, el script emergente tardó varios intentos en funcionar correctamente, pero después de algunas pruebas, ha sido fiable. Solo hay que recordar programarlo y mantener los scripts actualizados.¡Crucemos los dedos para que esto ayude a evitar un caos de contraseñas de última hora!