Enviar notificaciones por correo electrónico sobre el vencimiento de contraseñas de Active Directory con un script de PowerShell
Hello EveryOne!! Querido y estimado lector de Obss, hoy os traigo una actualización clave sobre la seguridad de contraseñas en Active Directory.
Las contraseñas son un dolor de cabeza constante, ¿cómo podemos hacerlo más fácil y seguro para tus usuarios?
Con más de 25 años de experiencia en la administración de sistemas y ciberseguridad, he visto cómo los cambios de políticas impactan la productividad y seguridad en empresas de todo tamaño
Ya no se recomienda aplicar una política de cambios de contraseñas periódicos, ya que puede generar más solicitudes de asistencia técnica debido a contraseñas vencidas, especialmente para usuarios de VPN, y puede socavar la seguridad. Sin embargo, un buen sistema de oportunas notificaciones puede ayudar a mitigar problemas cuando es necesario cambiar las contraseñas. Vamos a ver cómo podemos notificar a los usuarios con la Política de grupo o un script de PowerShell, esta necesidad.
Microsoft ha eliminado la política de cambios periódicos de contraseñas de la línea base de seguridad de Windows. Sin embargo, se recomienda encarecidamente cambiar las contraseñas si pueden haberse visto comprometidas.
Imaginenos la siguiente situación de un día cualquiera:
Una mañana, el equipo de TI comienza a recibir una avalancha de llamadas. Decenas de usuarios, trabajando de forma remota, no pueden acceder a sus sistemas a través de la VPN. Las contraseñas hab expirado sin previo aviso, y al estar desconectados del Active Directory (AD), no tenían forma de restablecerlas. El resultado: horas de frustración, productividad perdida y un equipo de TI saturado con solicitudes de restablecimiento.
Esta situación es más común de lo que parece, especialmente en entornos con políticas de cambio de contraseña forzadas, donde los usuarios de VPN no siempre reciben las alertas a tiempo.
Pero aquí es donde una simple solución hizo la diferencia: un sistema automatizado de notificaciones de expiración de contraseñas.
Implementamos un script de PowerShell que envió correos electrónicos automáticos a los usuarios 5 días antes de la expiración de su contraseña. Desde entonces, el equipo de TI ha reducido las solicitudes de restablecimiento en un 80%, y los usuarios pueden cambiar sus contraseñas de forma proactiva, sin interrupciones.
¿Por qué Microsoft ha eliminado la política de cambios periódicos de contraseñas?
Microsoft eliminó esta política debido a estudios que muestran que los cambios constantes no mejoran la seguridad. De hecho, a menudo conduce a:
- Contraseñas más débiles: Los usuarios tienden a crear contraseñas más fáciles de recordar, pero menos seguras, como combinaciones de palabras relacionadas o números secuenciales.
- Mayor riesgo de errores: Cambiar las contraseñas constantemente aumenta la probabilidad de errores al escribirlas, lo que puede llevar a bloqueos de cuentas.
¿Qué opciones ha deshabilitado Microsoft?
Al eliminar esta política, Microsoft ha desactivado la capacidad de configurar:
- Un número mínimo de días entre cambios de contraseña: Ya no podrás establecer que un usuario deba cambiar su contraseña cada X días.
- Restricciones en la complejidad de las nuevas contraseñas: No podrás exigir que las nuevas contraseñas incluyan una cantidad mínima de caracteres, números, mayúsculas, minúsculas o símbolos específicos.
- Listas de palabras prohibidas: Ya no podrás crear una lista de palabras que los usuarios no puedan utilizar en sus contraseñas.
¿Dónde puedo verlo en el tenant?
La ubicación exacta de estas configuraciones dependerá del tipo de tenant que tengas (Azure AD, Microsoft 365, etc.) y de las herramientas que estés utilizando para administrarlo (Azure Portal, PowerShell, Intune, etc.).
Generalmente, puedes encontrar estas configuraciones en:
- Azure AD: En el Azure Portal, dentro de la sección de usuarios, busca las “Políticas de contraseña”.
- Microsoft 365 Admin Center: En la sección de seguridad y cumplimiento, encontrarás opciones para configurar las políticas de contraseña.
- Intune: Si utilizas Intune, busca las políticas de contraseña en la configuración de dispositivos.
- Active Directory Domain Services (AD DS): En la consola de administración de Active Directory (ADAC) o utilizando PowerShell, puedes encontrar estas opciones en las propiedades del dominio o de los objetos de usuario.
¿Qué debes tener en cuenta?
- Cambios recientes: Microsoft actualiza sus servicios con frecuencia, por lo que la ubicación exacta de estas configuraciones puede variar.
- Políticas heredadas: Puede haber políticas locales o de grupo que afecten el comportamiento de las contraseñas.
- Herramientas: Utiliza las herramientas adecuadas para tu entorno. PowerShell es una opción poderosa para realizar cambios a gran escala.
¿Qué significa esto para ti?
- Mayor flexibilidad: Tendrás más libertad para crear contraseñas seguras y fáciles de recordar.
- Menor riesgo de errores: Al eliminar la necesidad de cambios frecuentes, reducirás la probabilidad de errores al escribir las contraseñas.
- Énfasis en la autenticación multifactor: Microsoft recomienda utilizar la autenticación multifactor como una medida de seguridad adicional.
Microsoft ha tomado una decisión basada en las evidencias para mejorar la seguridad de las cuentas de usuario. Al eliminar la política de cambios periódicos de contraseñas, fomenta la creación de contraseñas más fuertes y reduce la frustración de los usuarios.
Notificación a los usuarios de VPN
Independientemente del motivo por el que se requiera un cambio de contraseña, es beneficioso para los usuarios recibir una notificación previa. Esto es especialmente importante para los usuarios que trabajan de forma remota o desde casa y se conectan a través de una VPN.
Cuando una contraseña ha expirado, pueden surgir problemas durante el inicio de sesión con credenciales almacenadas en caché, especialmente si el software VPN no permite cambiar la contraseña de AD. Lo ideal sería que los usuarios pudieran restablecer sus contraseñas a través de un portal de autoservicio. Si no existe una solución de este tipo, puede notificar a los usuarios mediante una directiva de grupo.
Una otra opción es enviar un correo electrónico a los usuarios con un script de PowerShell sobre la expiración de su contraseña.
Recordatorio a los usuarios con la Política de grupo
La política de grupo ofrece las siguientes configuraciones para notificar a los usuarios de un próximo cambio de contraseña:
- Inicio de sesión interactivo: solicita al usuario que cambie la contraseña antes de que caduque
Se puede encontrar en Configuración del equipo > Políticas > Configuración de Windows > Configuración de seguridad > Políticas locales > Opciones de seguridad

Podemos establecer un período de notificación de entre 1 y 999 días, durante el cual los usuarios recibirán un mensaje sobre el vencimiento de su contraseña. Este mensaje aparecerá como una notificación solo después de que los usuarios inicien sesión.

Sin embargo, los usuarios que no se han conectado a Active Directory (AD) durante algún tiempo podrían perderse estas notificaciones.
Envío de notificaciones por correo electrónico con PowerShell
Podemos utilizar un script de PowerShell para identificar a los usuarios cuyas contraseñas caducan dentro de un período de tiempo específico y notificarles por correo electrónico. Este método permite a los usuarios conectarse al dominio y cambiar sus contraseñas antes de que caduquen.
Get-ADUser filtra las cuentas que no requieren contraseña o que tienen contraseñas que nunca vencen. A continuación, el script lee el atributo msDS-UserPasswordExpiryTimeComputed, este valor representa la fecha de vencimiento de la contraseña como la cantidad de intervalos de 100 nanosegundos desde el 1 de enero de 1601. Para determinar la fecha de notificación, convertimos este valor en un objeto de fecha y restaremos la cantidad de días deseada
Notify x days before expiration date
$DaysBefore = 5
Get-ADUser -Filter ‘PasswordNeverExpires -eq $false -and PasswordNotRequired -eq $false’ -Properties msDS-UserPasswordExpiryTimeComputed, Mail, PasswordLastSet | Where-Object { $_."msDS-UserPasswordExpiryTimeComputed" -ne $null -and (([datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")).Date -eq (Get-Date).addDays($DaysBefore).Date) } | foreach{ Send-MailMessage -to $_.mail -from "Admin <admin@acme.com>" -Subject "Your password is expiring"
-body “Your password will expire in $DaysBefore days. Please change your password as soon as possible!” -SmtpServer smtp.acme.com
}
A continuación, el script envía un correo electrónico a cada cuenta con una contraseña que caduca dentro del período especificado.
Para ejecutar el script automáticamente una vez al día, configúrelo como una tarea programada.
Resumen
Si bien ya no se recomiendan los cambios regulares de contraseña, notificar a los usuarios con anticipación sobre las expiraciones necesarias de las contraseñas puede ayudar a reducir las solicitudes de soporte.
La política de grupo ofrece una solución sencilla, que permite a los administradores especificar la cantidad de días antes del vencimiento cuando se muestra un mensaje de advertencia a los usuarios que iniciaron sesión.
Sin embargo, un script de PowerShell ofrece una mayor flexibilidad, enviando notificaciones por correo electrónico a los usuarios incluso si sus computadoras no están conectadas a un controlador de dominio.
¿Cómo gestionas el vencimiento de contraseñas en tu organización?
Me encantaría saber cómo estás abordando este desafío, especialmente si tienes usuarios remotos o que dependen de la VPN.
¿Usas alguna automatización como PowerShell para notificar a tus usuarios? Comparte tus experiencias o desafíos en los comentarios.
Nos vemos en las Redes!!