Encuentre usuarios de Active Directory con contraseña caducada (PowerShell). ¿Es usted responsable de administrar contraseñas en su entorno de Active Directory (AD)? Una tarea crucial es identificar usuarios cuyas contraseñas han caducado, ya que estos usuarios ya no podrán iniciar sesión en sus cuentas hasta que restablezcan sus contraseñas. Este artículo le muestra cómo utilizar eficientemente PowerShell para encontrar usuarios de Active Directory con contraseñas caducadas.
¿Empezamos nuestro blog sobre cómo encontrar usuarios de Active Directory con contraseña caducada (PowerShell)?
Encuentre Usuarios de AD con Contraseñas Caducadas Usando PowerShell
Seguir este artículo ahorra tiempo y esfuerzo, ya que rápidamente podemos dirigirnos a usuarios específicos para notificaciones de restablecimiento de contraseña o expiración. Ya sea que seas un administrador de red o simplemente estés buscando mejorar la seguridad de tu entorno de Active Directory, esta guía proporciona la información que necesitas para comenzar.
Prerrequisitos
Si planeamos seguir este artículo, necesitaremos lo siguiente:
- A Windows computer joined to an Active Directory domain.
- Módulo ActiveDirectory instalado en la computadora.
- La computadora también debe tener al menos Windows PowerShell 5.1 o superior.
Encontrar Usuarios en Active Directory
Antes de restablecer una contraseña de usuario, primero debemos localizar la cuenta. Como resultado, nuestro primer paso debería ser determinar si existe una reserva. Para hacerlo, ejecute el cmdlet Get-ADUser con el parámetro Identity establecido en el nombre de la cuenta.
El parámetro Identity acepta uno de cuatro identificadores: nombre distinguido (DN), GUID (objectGUID), ID de seguridad (objectSID), o nombre de cuenta SAM (SAMAccountName).
Por ejemplo, si solicitamos restablecer la contraseña para un usuario específico, primero debemos verificar que el usuario exista antes de emitir un restablecimiento de cuenta. Para hacerlo, copie el siguiente comando y péguelo en nuestra consola de PowerShell. Asegúrese primero de cambiar el nombre de usuario al correcto:
Get-ADUser -Identity
El comando devolvió las propiedades del usuario, como se muestra en la captura de pantalla a continuación, confirmando que la cuenta existe y el nombre de usuario es correcto:
Buscar Usuarios con Contraseña Caducada en AD
Podemos obtener rápidamente la fecha de vencimiento de la contraseña para un único usuario añadiendo y utilizando el atributo msDS-UserPasswordExpiryTimeComputed con el comando Get-ADUser:
Get-ADUser -Identity USERNAME -Properties 'msDS-UserPasswordExpiryTimeComputed'
Pero esta línea de código producirá una salida ilegible para los humanos, así que necesitamos agregar la siguiente línea para convertir los resultados en un formato legible. Para agregar la línea siguiente, usaremos el comando Select-Object -Property en una nueva tubería de PowerShell:
Select-Object -Property {[datetime]::FromFileTime($_.”msDS-UserPasswordExpiryTimeComputed”)}
Ejecutando el mismo atributo, msDS-UserPasswordExpiryTimeComputed, con el filtro correcto, obtenemos una lista de cuentas de Active Directory y sus tiempos de vencimiento de contraseña:
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "Displayname",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

Mejoramos el script anterior exportando la lista de usuarios a un archivo de texto que podríamos usar más tarde. Para hacer esto, podemos usar el comando Out-File que enviará la salida a un archivo de texto:
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "GivenName" |
Out-File -FilePath .\userslist.txt
El script anterior genera un archivo llamado userslist.txt que podemos usar más tarde. También hemos omitido la propiedad ExpiryDate del resultado ya que solo necesitamos los IDs de usuario de las cuentas que han caducado. Utilizamos esta lista para la remediación masiva, que se discute más adelante en el artículo.
Restablecimiento de la contraseña de usuario de Active Directory
Ahora que hemos aprendido cómo usar Get-ADUser para verificar una cuenta de usuario, sabemos que el resultado es válido y que el ID de usuario existe. Ahora debemos usar el cmdlet Set-ADAccountPassword para restablecer la contraseña del usuario.
El comando Set-ADAccountPassword cambia la contraseña de un usuario si proporcionamos la contraseña anterior. Si no tenemos la contraseña anterior, el cmdlet la restablece con el parámetro Reset.
La nueva contraseña generada aleatoriamente es una contraseña aleatoria de 14 caracteres con cinco caracteres no alfanuméricos. Para ejecutarla, abre una ventana de PowerShell, copia el código, pégalo en PowerShell y presiona Enter:
$username = USERNAME
Add-Type -AssemblyName 'System.Web'
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset |
Set-ADUser -ChangePasswordAtLogon true
$randomPassword
- Línea 1: Especifica el nombre de usuario cuya contraseña se va a restablecer. Asegúrate de reemplazar la cadena USERNAME con el ID de usuario real.
- Línea 2: Importa la clase de objeto de ensamblado .NET System.Web.
- Línea 3: Genera una contraseña aleatoria de 14 caracteres con cinco caracteres no alfanuméricos.
- Línea 4: Convierte la contraseña de texto plano en un objeto de contraseña de cadena segura.
- Línea 5: Facilita el restablecimiento de la contraseña.
- Línea 6: Obliga a la cuenta de AD a cambiar la contraseña en el próximo inicio de sesión.
- Línea 7: Muestra la nueva contraseña en la consola. Sin embargo, no recomendamos esto por motivos de seguridad. La línea 6 se encarga del cambio de contraseña según la preferencia del usuario y se considera la mejor práctica para este procedimiento.
Mejora la seguridad de tu Active Directory y Azure AD
Pruébanos gratis, acceso a todas las funciones. – Más de 200 plantillas de informes de AD disponibles. Personaliza fácilmente tus propios informes de AD.
También lea Pruebe los Informes de Contraseñas de Office 365
Escribiendo la Herramienta de Reinicio de Contraseña de Active Directory
Ahora tenemos un script que utilizamos para reiniciar la contraseña de un usuario. El siguiente paso es convertir nuestro script en una herramienta. Una herramienta reutilizable ejecuta las mismas acciones con un mínimo de acciones manuales del usuario.
Al construir una herramienta, un aspecto crucial es que quien ejecute la herramienta no tenga que editar el código cada vez. Pero desafortunadamente, nuestro código todavía requiere que el usuario edite la variable $username.
En lugar de permitir que los usuarios de nuestra herramienta cambien los valores manualmente, ¿por qué no escribir un script que acepte parámetros? Para hacerlo, siga los siguientes pasos:
- Abra Windows PowerShell ISE.
- Cree un archivo de PowerShell nuevo y guarde el archivo con el nombre Reset-ADPassword.ps1. Guarde el script en nuestra ubicación preferida. Este artículo guarda el archivo en la carpeta C:\PS\scripts.
- Por favor, copie y pegue el código a continuación en nuestro editor de scripts antes de guardar el script.
param (
$username
)
if (-not($username)) {
Write-Host "Username not found. Exiting script"
return $null
}
try {
$null = Get-ADUser -Identity $username -ErrorAction Stop
} catch {
Write-Host $_.Exception.Message
return $null
}
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
try {
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset -ErrorAction Stop
Set-ADuser -Identity $username -ChangePasswordAtLogon $true
[pscustomobject]@{
Username = $username
NewPassword = $randomPassword
}
} catch {
Write-Host "There was an error performing the password reset. Please find additional information below."
Write-host $_.Exception.Message
return $null
}
- Línea 1: Agrega un parámetro llamado nombre de usuario.
- Línea 5: Verifica si el usuario proporcionó un valor para el nombre de usuario. El bloque if también muestra un mensaje y sale del script si se cumple la condición.
- Línea 10: Verifica si el nombre de usuario es válido o no.
- Línea 12: Valida si el nombre de usuario es inválido. Muestra un mensaje y detiene la ejecución del script.
- Línea 17: Genera una contraseña aleatoria que tiene 14 caracteres de longitud con cinco caracteres no alfanuméricos.
- Línea 18: Convierte la contraseña de texto plano en un objeto de contraseña segura.
- Línea 20: Facilita la reinicialización de la contraseña.
- Línea 22: Obliga a la cuenta de AD a cambiar la contraseña la próxima vez que inicie sesión.
- Línea 24: Muestra la nueva contraseña en la consola. Sin embargo, no recomendamos esto por razones de seguridad. La línea 6 se encargará del cambio de contraseña a gusto del usuario y se considera la mejor práctica para este procedimiento.
- Línea 28: Muestra un mensaje de error si la reinicialización ha fallado.
Ejecuciones de ejemplo de la herramienta de restablecimiento de contraseña de AD
A PowerShell console pane is already available if we use Windows PowerShell ISE. If not, we should launch a separate PowerShell session. Change the current working directory to the destination folder where the script was saved, such as Set-Location C:\PS\Scripts.
Restablecer la contraseña de un solo usuario
Supongamos que necesitamos restablecer la contraseña de un usuario. Primero, ejecute la herramienta de restablecimiento de contraseña de Active Directory y especifique qué nombre de usuario desea atacar. Por ejemplo, para restablecer la contraseña de un solo usuario, ejecute el script como se muestra a continuación:
.\Reset-ADPassword.ps1 -username USERNAME
Como resultado, el script restablece la contraseña y la muestra en la pantalla. Por ejemplo, este resultado envía la nueva contraseña al usuario afectado:
Restablecer la contraseña de varios usuarios
Afortunadamente, podemos recorrer una lista en PowerShell utilizando matrices y el bucle foreach. Además, el cmdlet ForEach-Object en PowerShell nos permite procesar varios elementos simultáneamente. Este cmdlet nos permite pasar varios elementos por la tubería.
Para restablecer las contraseñas de varios usuarios, cree una matriz con dos o más nombres de usuario. Los elementos de la matriz se pasan por la tubería, donde el comando de PowerShell ForEach-Object ejecuta la herramienta de restablecimiento de contraseña en cada nombre de usuario.
@('user1', 'user2') | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}
Sin embargo, si mejoramos esto, podemos remediar más de dos cuentas de usuario. ¿Recuerdas el archivo de texto que generamos antes? Lo utilizamos en esta sección.
Debemos leer el archivo de texto que contiene las cuentas de usuario y ejecutar la herramienta de restablecimiento de contraseña de AD en cada una. Para hacerlo, utiliza el cmdlet Get-Content para importar el contenido del archivo de texto en PowerShell. Después de eso, el script envía los datos al canal y ejecuta el script de restablecimiento de contraseña de AD en cada cuenta.
Get-Content .\userslist.txt | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}
Después de ejecutar el fragmento anterior, habremos restablecido múltiples contraseñas de usuario en una sola ejecución.
Gracias por leer el artículo del blog Encuentre Usuarios de Active Directory con Contraseña Expirada (PowerShell). Lo concluiremos ahora.
Conclusión de PowerShell para Encontrar Usuarios de AD con Contraseñas Expiradas
En conclusión, encontrar usuarios de Active Directory usuarios con contraseñas contraseñas expiradas utilizando PowerShell es un proceso sencillo que nos ahorra tiempo y esfuerzo. Utilizando el cmdlet Get-ADUser y filtrando a los usuarios con contraseñas expiradas, puedes identificar rápidamente y dirigirte a usuarios específicos para el restablecimiento de contraseña o notificaciones de expiración. Este comando es útil para organizaciones con un gran número de usuarios, ya que te permite gestionar de manera proactiva la expiración de contraseñas y reducir el riesgo de brechas de seguridad.
Source:
https://infrasos.com/find-active-directory-users-with-expired-password-powershell/