Script ps1 en PowerShell que muestra listado (nombre de usuario y email) de los usuarios a los que les va a caducar la contraseña próximamente en un dominio LDAP de Microsoft Active Directory (Directorio Activo). Ejemplos de algunos filtros como usuarios con contraseña caducada, usuarios inactivos (deshabilitados), usuarios cuya contraseña nunca expira, etc.

Requisitos para ejecutar script ps1 PowerShell que muestra usuarios con contraseña próxima a caducar

Necesitaremos tener instalado el módulo de Active Directory para PowerShell en el equipo, como indicamos en el siguiente artículo:

También necesitaremos disponer de un dominio en nuestra organización, con Windows Server 2008 en adelante (2012, 2016, 2019), un Directorio Activo (Active Directory), el LDAP de Microsoft. En los siguientes enlaces explicamos cómo montar un servidor de Directorio Activo:

Script ps1 PowerShell que muestra listado de usuarios que tienen la contraseña a punto de caducar

A continuación mostramos el código fuente ps1 PowerShell que muestra los usuarios (nombre de usuario y email) del dominio LDAP Active Directory del equipo en el que se ejecuta, que tienen la contraseña a punto de caducar. Se puede establecer el número de días máximo que le queda a la contraseña por caducar cambiando la variable

Cambiaremos los datos variables del script anterior para adaptarlo a nuestra organización:

  • $diasMaximo: número máximo de días de caducidad de contraseña a partir del cual se mostrarán los usuarios.
  • uo=Facturacion: filtrar solo los usuarios de la unidad organizativa «Facturacion». Podremos cambiar el nombre, como es lógico, por otra unidad organizativa de nuestro dominio, o bien quitar «uo=Facturacion» para obtener todos los usuarios del dominio.
  • dc=proyectoa,dc=com: el nombre del dominio, cambiaremos «proyectoa» y «com» por el nombre de nuestro dominio.

Podremos cambiar, en general, todo el filtro de la línea $usuariosLDAP = para mostrar los usuarios que queramos. En nuestro caso hemos filtrado por unidad organizativa y, además, que estén activos, que no les haya caducado la contraseña ya y que tengan desmarcada la opción de «La contraseña nunca expira».

Guardaremos el código PowerShell anterior en un fichero, con extensión .ps1:

Script ps1 PowerShell que muestra listado de usuarios que tienen la contraseña a punto de caducar

Antes de ejecutar el scritp ps1 nos aseguraremos de que tenemos permisos, como indicamos aquí.

Para ejecutarlo será suficiente con añadir un punto y una contrabarra delante del nombre del fichero, en PowerShell. Puede que necesitemos ejecutar la consola PowerShell con un usuario con privilegios suficientes del dominio, al menos, para obtener usuarios:

Script ps1 PowerShell que muestra listado de usuarios que tienen la contraseña a punto de caducar

Otros filtros para mostrar usuarios de LDAP Active Directory en PowerShell

Por supuesto, podemos hacer cualquier otro filtro que nos muestre la información que deseemos. Por ejemplo, para mostrar los usuarios que tienen marcada la opción de que la contraseña nunca expira, los usuarios que tienen la contraseña caducada, los usuarios inactivos (deshabilitados), etc.

Usuarios del dominio Active Directory cuya contraseña nunca expira

Para mostrar los usuarios del dominio Active Directory que tienen marcada la opción de que la contraseña nunca expira, podemos usar:

Y, por supuesto, podemos mostrar los campos que queramos del objeto filtrado, en este caso de los usuarios, como el Nombre Distinguido (DistinguishedName):

Usuarios del dominio Active Directory que tienen la contraseña caducada

Otro ejemplo, para mostrar los usuarios que tienen la contraseña caducada, mostrando por consola el nombre de usuario, el nombre distinguido (DN o Distinguished Name) y la fecha en la que se cambió por última vez la contraseña:

Usuarios del dominio Active Directory inactivo (deshabilitados)

Para mostrar los usuarios del dominio Directorio Activo (LDAP Active Directory) que están deshabilitados (inactivos), podremos usar el script ps1 PowerShell:

Activar ejecución de script ps1 en PowerShell

Si al ejecutar el script ps1 en PowerShell aparece este error:

.\caducidad_contraseña.ps1 : File C:\Users\alonso\Desktop\script\caducidad_contraseña.ps1
cannot be loaded because running scripts is disabled on this system. For more information, see
about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1.\usuarios_contraseña_nunca_expira.ps1
CategoryInfo : SecurityError: (:) [], PSSecurityException
FullyQualifiedErrorId : UnauthorizedAccess

Es debido a que tenemos restringido, por directiva de seguridad, la ejecución de scripts PowerShell, para activarla ejecutaremos en la propia consola de PowerShell (accediendo como administradores):

En el caso anterior, habilitaremos la ejecución de scripts ps1 PowerShell para el usuario actual. A partir de este momento podremos ejecutar script ps1.

Consultar desde PowerShell la política de caducidad de contraseñas del dominio Active Directoy

Para obtener información de las políticas de seguridad aplicadas a las contraseñas (caducidad, tamaño mínimo, caché de guardado de contraseñas, etc.) podemos usar el comando PowerShell:

Consultar desde PowerShell la política de caducidad de contraseñas del dominio Active Directoy

Nos devolverá datos tan interesantes como:

  • ComplexityEnabled : True
  • DistinguishedName : DC=proyectoa,DC=com
  • LockoutDuration : 00:30:00
  • LockoutObservationWindow : 00:30:00
  • LockoutThreshold : 0
  • MaxPasswordAge : 180.00:00:00
  • MinPasswordAge : 00:00:00
  • MinPasswordLength : 4
  • objectClass : {domainDNS}
  • objectGuid : a123456-abcd-abcd-1234-aaddffggh
  • PasswordHistoryCount : 1
  • ReversibleEncryptionEnabled : False

Por ejemplo, la propieadad MaxPasswordAge la usamos en el script anterior porque devuelve el número de días (180 en ese caso) de caducidad de las contraseñas.