¿Cómo encontrar computadoras y usuarios inactivos en Active Directory con PowerShell?
Una tarea bastante frecuente de un administrador de Active Directory es hacer una lista de cuentas de usuario y/o computadora deshabilitadas o inactivas. Puede usar las consultas LDAP guardadas en la consola de ADUC y los cmdlets de PowerShell para obtener una lista de objetos inactivos en un dominio de Active Directory. En este artículo, le mostraremos cómo usar PowerShell para encontrar cuentas de usuario y de computadora inactivas.
El administrador de Active Directory debe deshabilitar y eliminar periódicamente las computadoras y cuentas de usuario no utilizadas. Esto reducirá el tamaño de la base de datos de AD (archivo ntds.dit) y también reducirá el riesgo de que un atacante o ex empleados utilicen cuentas antiguas para acceder al dominio.
Para poder usar todos los cmdlets de PowerShell que se describen a continuación, al menos la versión 3.0 de PowerShell y el kit de herramientas de administración remota del servidor (RSAT) deben estar instalados en la computadora. Habilite el módulo de Active Directory para Windows PowerShell desde RSAT (Panel de control -> Programas-> Activar y desactivar funciones de Windows-> Herramientas de administración remota del servidor -> Herramientas de administración de funciones -> Herramientas AD DS y AD LDS).
Detalles de la instalación de la función RSAT en las últimas versiones de Windows 10.
Este módulo de PowerShell también se puede habilitar con este comando:
Add-WindowsFeature RSAT-AD-PowerShellInicie la consola de PowerShell e importe Active Directory para el módulo de PowerShell:
Import-Module ActiveDirectory¿Cómo encontrar computadoras inactivas (antiguas) en el dominio de Active Directory?
Puede usar el cmdlet Get-ADComputer para buscar objetos de equipo inactivos en un dominio. El atributo LastLogonTimeStamp se puede utilizar como criterio de búsqueda. Tenga en cuenta que este atributo no se puede usar para recuperar información en tiempo real sobre la última vez que una computadora inició sesión en el dominio. Sin embargo, debido al hecho de que este atributo se replica entre los DC cada 9 a 14 días, puede obtener información sobre la última hora de inicio de sesión de la computadora desde cualquier controlador de dominio (a diferencia del atributo LastLogonDate, que se actualiza solo en el DC a través del cual la computadora inició sesión).
Puede verificar el valor actual del atributo LastLogonTimeStamp en las propiedades de la computadora en la consola ADUC en la pestaña Editor de atributos.
Use los siguientes comandos para buscar todas las computadoras en una unidad organizativa específica que no hayan iniciado sesión durante más de 180 días:
$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADComputer -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } -SearchBase ‘OU=Computers,OU=Mun,DC=a-d,dc=com’| Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize | Export-CSV c:\ps\inactive_computers.csvEste comando generará un archivo CSV con una lista de equipos inactivos que no han sido registrados en el dominio durante más de seis meses.
Puede deshabilitar las cuentas de computadora encontradas:
Get-ADComputer -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } -SearchBase ‘OU=Computers,OU=Mun,dc=a-d,dc=com’| Disable-ADAccountMueva estos objetos de computadora a una unidad organizativa separada:
Get-ADComputer ... | Move-ADObject -TargetPath “OU=Disabled Computers,DC=a-d,DC=com”
O eliminar equipos inactivos:
Get-ADComputer ... | Remove-ADComputerEncuentra cuentas de usuario inactivas en Active Directory
También puede usar el atributo lastLogonTimeStamp para buscar cuentas de usuario inactivas. Para crear una lista de usuarios inactivos, debe usar este atributo y no lastLogon (el atributo lastLogon no se replica entre los controladores de dominio).
El siguiente script permite seleccionar cuentas de usuario habilitadas que no han iniciado sesión en el dominio durante más de seis meses (180 días) mediante el cmdlet Get-ADUser:
$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } -SearchBase ‘OU=Users,OU=Mun,dc=a-d,dc=com’| ?{$_.Enabled -eq $True} | Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize | Export-CSV c:\ps\inactive_users.csvPuede deshabilitar a los usuarios inactivos:
Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } -SearchBase ‘OU=Users,OU=Mun,dc=a-d,dc=com’| Disable-ADAccountSi necesita eliminar cuentas de usuario inactivas de AD, use la canalización con
Remove-ADUserUso de Search-ADAccount para encontrar objetos AD inactivos
Puede usar los cmdlets Get-ADUser, Get-ADComputer o Get-ADObject para buscar objetos inactivos en AD. Sin embargo, crear el filtro correcto para estos comandos puede ser complicado. El módulo ActiveDirectory PowerShell tiene un cmdlet más conveniente para realizar estas tareas: Search-ADAccount. Este cmdlet se utiliza para buscar objetos de cualquier tipo (tanto usuarios como equipos). Veamos ejemplos del uso del cmdlet Search-ADAccount para tareas típicas de búsqueda de objetos deshabilitados, inactivos y bloqueados en AD.
Aquí está la lista de las claves más importantes del cmdlet Search-ADAccount:
- -AccountDisabled
Búsqueda de cuentas inhabilitadas
- -AccountExpired
Búsqueda de cuentas vencidas
- -AccountExpiring [-DateTime DateTime] [-TimeSpan TimeSpan]
-
Búsqueda de las cuentas a vencer en un período de tiempo determinado (-TimeSpan) o en una fecha específica (-DateTime)
- -AccountInactive [-DateTime DateTime] [-TimeSpan TimeSpan]
Búsqueda de las cuentas sin iniciar sesión desde una fecha determinada (-DateTime) o durante un período de tiempo determinado (-TimeSpan)
- -LockedOut
Búsqueda de las cuentas bloqueadas por la política de contraseñas de dominio
- -PasswordExpired
Búsqueda de las cuentas con las contraseñas caducadas
- -PasswordNeverExpires
Cuentas con el conjunto de atributos PasswordNeverExpires (atributo UserAccountControl)
Nota. De forma predeterminada, el cmdlet Search-ADAccount busca cuentas de usuario y de equipo al mismo tiempo. Para buscar solo usuarios o equipos, debe usar una de las siguientes claves: ComputersOnly o UsersOnly.
Por ejemplo, mostremos la lista de cuentas de usuario deshabilitadas en el dominio:
Search-ADAccount -UsersOnly -AccountDisabledPuede limitar el alcance de la búsqueda a un contenedor de Active Directory (OU) específico:
Search-ADAccount -UsersOnly -AccountDisabled -searchbase "OU=Admins,OU=Accounts,DC=a-d,DC=com"Los mismos datos se pueden presentar en una forma de tabla más conveniente usando este comando:
Search-ADAccount -UsersOnly -AccountDisabled -searchbase "OU=Admins,OU=Accounts,DC=a-d,DC=com"|ft -AutoSizeSi necesita obtener la lista de usuarios deshabilitados que contienen ciertos atributos de usuario y presentarla como una tabla gráfica para ordenar, ejecute lo siguiente:
Search-ADAccount -UsersOnly AccountDisabled |sort LastLogonDate | Select Name,LastLogonDate,DistinguishedName |out-gridview -title "Disabled Users"La lista de cuentas de usuario bloqueadas:
Search-ADAccount -UsersOnly -LockedOutLa lista de cuentas de usuario que han estado inactivas en los últimos 60 días:
$timespan = New-Timespan -Days 60
Search-ADAccount -UsersOnly -AccountInactive -TimeSpan $timespan | ?{$_.Enabled -eq $True}Para contar estas cuentas de usuario:
Search-ADAccount -UsersOnly -AccountInactive -TimeSpan $timespan | ?{$_.Enabled -eq $True} | MeasureLa lista de equipos no registrados en la red de dominio durante los últimos 90 días:
Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 90O desde una fecha determinada:
Search-ADAccount -AccountInactive -ComputersOnly -DateTime ‘1/1/2021’|Select Name,LastLogonDate| ftPara exportar la lista de objetos a un CSV, use este comando:
Search-ADAccount -AccountDisabled -UsersOnly| Export-Csv "c:\ps\disabled_users.csv"





