El administrador de Active Directory debe buscar y deshabilitar periódicamente los objetos inactivos en AD. En este artículo, mostraremos cómo obtener la última hora de inicio de sesión para el usuario de dominio de AD y encontrar cuentas que han estado inactivas durante más de 90 días.
¿Cómo obtener la última hora de inicio de sesión de un usuario usando ADUC?
Puede averiguar la última hora de inicio de sesión del usuario del dominio con la consola gráfica de ADUC (Usuarios y equipos de Active Directory).
- Ejecute la consola dsa.msc;
- En el menú superior, habilite la opción Ver> Funciones avanzadas;
- Busque al usuario en el árbol de AD y abra sus propiedades;
- Haga clic en la pestaña Editor de atributos;
- En la lista de atributos, busque lastLogon. Este atributo contiene la hora en que el usuario inició sesión por última vez en el dominio.
Nota. Puede ver dos atributos similares en la captura de pantalla anterior: lastLogon y lastLogonTimestamp. ¿Cual es la diferencia entre ellos?
- lastLogon El atributo se actualiza cuando el usuario inicia sesión en el dominio. Pero solo cambia en el controlador de dominio que autenticó al usuario, y es no replicado a otros controladores de dominio. Por lo tanto, si hay varios controladores de dominio en diferentes sitios de AD, deberá verificar este atributo en cada uno de ellos y luego comparar los datos resultantes. El valor de este atributo en diferentes DC para el usuario puede ser diferente o incluso cero (si el usuario nunca ha sido autenticado en este DC);
- lastLogonTimeStamp El atributo también se cambia cuando el usuario inicia sesión en el controlador de dominio y se replica en otros controladores de dominio. Sin embargo, la replicación de este atributo lleva mucho tiempo (este atributo se replica solo si su valor es de 14 días o más que el anterior). Por lo tanto, los datos de este atributo en un DC específico pueden no ser relevantes.
Encuentra la última hora de inicio de sesión usando CMD
Puede averiguar la hora en que el usuario inició sesión por última vez en el dominio desde la línea de comandos utilizando las herramientas net o dsquery.
Abra un símbolo del sistema (no necesita privilegios de administrador de dominio para obtener información de usuario de AD) y ejecute el comando:
net user administrator /domain| findstr "Last"
Obtuvo la última hora de inicio de sesión del usuario: 08.08.2019 11:14:13.
También puede obtener la última hora de inicio de sesión mediante dsquery. Por ejemplo:
dsquery * domainroot -filter "(&(objectCategory=Person)(objectClass=User)(sAMAccountName=administrator))" -attr distinguishedName lastLogon lastLogonTimestamp -limit 0
El principal problema es que los atributos lastLogon y lastLogonTimestamp se almacenan en formato de marca de tiempo en AD y, además, debe convertirlo a un formato de hora normal.
También puede utilizar este comando para buscar a todos los usuarios que están inactivos, por ejemplo, durante 10 semanas:
dsquery user domainroot -inactive 10
Buscar la hora del último inicio de sesión con PowerShell
También puede usar PowerShell para obtener la hora de inicio de sesión del último dominio del usuario. Para ello, debe utilizar el módulo de Active Directory para Windows PowerShell. Instale este módulo e impórtelo en su sesión de PowerShell:
Import-Module ActiveDirectory
Para encontrar la última hora de inicio de sesión para la cuenta de administrador de dominio, ejecute el comando:
Get-ADUser -Identity administrator -Properties LastLogon
El cmdlet devolvió la hora en formato de marca de tiempo. Para convertirlo a una hora normal, use el siguiente comando:
Get-ADUser -Filter {Name -eq "administrator"} -Properties * | Select-Object Name, @{N='LastLogon'; E={[DateTime]::FromFileTime($_.LastLogon)}}
Con PowerShell, puede mostrar la última hora de inicio de sesión para todos los usuarios de dominio habilitados:
Get-ADUser -filter {enabled -eq $true} -Properties * | Select-Object Name, @{N='LastLogon'; E={[DateTime]::FromFileTime($_.LastLogon)}}|Sort-Object LastLogon -Descending
O puede encontrar usuarios que estén inactivos durante más de 90 días:
$date1= (Get-Date).AddDays(-90) Get-ADUser -Properties LastLogonDate -Filter {LastLogonDate -lt $date1} | ft
Después de identificar las cuentas inactivas, le recomendamos que desactive las cuentas de esos usuarios, espere unas semanas y luego elimine las cuentas si no se han reportado problemas. Puede deshabilitar a los usuarios inactivos mediante el cmdlet Disable-ADAccount:
Get-ADUser -Properties LastLogonDate -Filter {LastLogonDate -lt $date1} | Disable-ADAccount
De manera similar, puede obtener la última hora de inicio de sesión para objetos de computadora en un dominio. El siguiente comando enumerará todas las computadoras que han estado inactivas durante más de 90 días:
Get-ADComputer -Properties LastLogonDate -Filter {LastLogonDate -lt $date1} | Sort LastLogonDate | FT Name, LastLogonDate -Autosize
Insinuación. Puede obtener el historial de inicio de sesión de usuario detallado solo a partir de los registros de eventos de seguridad de los controladores de dominio.
Obtener el último inicio de sesión para el usuario en todos los controladores de dominio
Como dijimos anteriormente, si hay varios controladores de dominio en su dominio, entonces el valor del último inicio de sesión en ellos puede diferir. Si un usuario ha estado inactivo durante más de 14 días, la forma más sencilla es obtener el valor del atributo lastLogonTimeStamp de cualquier controlador de dominio. Sin embargo, si no sabe en qué sitio o DC se autenticó por última vez al usuario, tendrá que consultar todos los controladores de dominio en el AD para obtener la fecha del último inicio de sesión del usuario.
El siguiente script de PowerShell recorre todos los controladores de dominio del dominio y obtiene el valor del atributo lastLogonTime de cada uno de ellos. El resultado se exporta a un archivo CSV:
$userlogonname="bjackson" $csvoutputfile="c:pslastlogon_from_all_dcs.csv" $resultlogonhistory=@() Import-Module ActiveDirectory $DCs=(Get-ADDomainController -Filter *).Name foreach ($DC in $DCs) { Try { $aduser=Get-ADUser $userlogonname -Server $DC -Properties lastlogon -ErrorAction Stop $resultlogonhistory +=New-Object -TypeName PSObject -Property ([ordered]@{ 'User' = $userlogonname 'DC' = $dc 'LastLogon' = [datetime]::FromFileTime($aduser.'lastLogon') }) } Catch { Write-host "Can’t connect DC $($dc)!" } } $resultlogonhistory|Export-CSV -path $csvoutputfile -NoTypeInformation -Delimiter "," -Encoding UTF8
Si necesita encontrar rápidamente el valor máximo de LastLogon del usuario de todos los DC, utilice la siguiente frase:
[datetime]::FromFileTime((Get-ADDomainController -Filter * | foreach {Get-ADUser 'bjackson' -Properties LastLogon -Server $_.Name | select LastLogon} | Measure-Object -Property LastLogon -Maximum).Maximum)