¿Cómo obtener el historial de inicio de sesión de usuario de Windows 10 usando PowerShell? – TrucosInformaticos

Powershell

Las políticas de auditoría de Windows permiten almacenar eventos de inicio y cierre de sesión en los registros de eventos. Cuando está habilitado, todos los eventos de inicio y cierre de sesión exitosos (y no exitosos) se pueden encontrar dentro de los registros de eventos de seguridad.

Este artículo le mostrará cómo obtener el historial de inicio/cierre de sesión del usuario de los registros de eventos en la computadora local y remota mediante comandos de PowerShell y un script.

Requisito previo: habilitar la auditoría de inicio de sesión en la directiva de grupo

Antes de recuperar el historial de inicio de sesión del usuario mediante PowerShell, debe habilitar la auditoría de inicio de sesión en la directiva de grupo en todas las computadoras unidas al dominio. Aquí está cómo hacerlo:

  1. Inicie sesión en su controlador de dominio.
  2. Presione WIN + R para abrir el cuadro de diálogo Ejecutar.
  3. Escribe gpmc.msc y presiona Ingresar. Este comando abre la Consola de administración de directivas de grupo.
  4. En el panel izquierdo, navegue hasta Bosque: nombre del bosque > Dominios > Tu dominio.
  5. Haga clic derecho en el Política de dominio predeterminada y haga clic Editar.
    powershell obtiene el historial de inicio de sesión del usuario en la computadora
  6. En el panel izquierdo, navegue hasta Configuracion de Computadora > Políticas > Configuración de Windows > Configuraciones de seguridad > Configuración avanzada de políticas de auditoría > Políticas de auditoría > Iniciar/Cerrar sesión.
    historial de inicio de sesión de usuario de powershell
  7. Abre el Cierre de sesión de auditoría y Inicio de sesión de auditoría políticas Habilitar la selección Éxito y Falla casillas de verificación y, a continuación, haga clic en DE ACUERDO.
    powershell obtener historial de inicio de sesión
  8. Cierre el Editor de políticas de grupo local y espere a que la política se replique en todo el dominio.

Ahora, cuando los usuarios inicien sesión de forma local o remota en las computadoras unidas al dominio, cada evento se registrará como ID de evento. 4624 y 4634 para eventos de inicio y cierre de sesión.

powershell obtener el historial de inicio de sesión del usuario

Obtenga el historial de inicio de sesión de usuario de Windows usando PowerShell

Intentemos realizar algunos comandos de PowerShell para obtener el historial de inicio de sesión del usuario. Para estos ejemplos, usaremos el cmdlet Get-WinEvent, la estrella principal de este programa.

Nota. Todos los eventos de auditoría de inicio y cierre de sesión se encuentran dentro de los registros de eventos de seguridad.

Para obtener todos los eventos de inicio y cierre de sesión del registro de seguridad para todos los usuarios

El siguiente comando obtiene todo el historial de inicio y cierre de sesión de todos los usuarios que iniciaron sesión en la computadora.

Get-WinEvent -FilterHashtable @{ 
Logname="Security" 
ID = 4624,4634 
}

Para obtener eventos de inicio y cierre de sesión del registro de seguridad para todos los usuarios dentro de un período de tiempo específico

En este ejemplo, obtendremos los eventos entre (StartTime) 2023-03-10 y (EndTime) 2023-03-12.

Get-WinEvent -FilterHashtable @{ 
Logname="Security" 
ID = 4624, 4634 
StartTime="2023-03-10" 
EndTime="2023-03-12" 
}

Nota. Consulte nuestro tutorial sobre cómo obtener la lista de programas instalados en Windows.

Para obtener todos los eventos de inicio y cierre de sesión del registro de seguridad para un nombre de usuario específico

En este ejemplo, obtengamos los eventos de inicio de sesión para el usuario speed.racer.

En Windows PowerShell, agregue el filtro de datos para especificar un nombre de usuario:

# On Windows PowerShell 
Get-WinEvent -FilterHashtable @{ 
Logname="Security" 
ID = 4624, 4634 
StartTime="2023-03-10" 
EndTime="2023-03-12" 
Data="speed.racer" 
}

En PowerShell Core (7+), use el filtro TargetUsername en su lugar:

# On PowerShell Core (7+) 
Get-WinEvent -FilterHashtable @{ 
Logname="Security" 
ID = 4624, 4634 
StartTime="2023-03-10" 
EndTime="2023-03-12" 
TargetUserName="speed.racer" 
}

Script de PowerShell para obtener el historial de inicio de sesión del usuario

El uso del cmdlet Get-WinEvent para obtener el historial de inicio de sesión del usuario es una forma excelente de realizar consultas manuales. Si ejecuta alguno de los comandos de ejemplo de la sección anterior, verá un resultado similar al siguiente.

script de powershell para obtener el historial de inicio de sesión del usuario

Nota. Consulte nuestro tutorial sobre cómo usar GPO para administrar, agregar, modificar, importar y eliminar claves de registro.

La salida podría ser más fácil de leer. Ahí es donde las secuencias de comandos de PowerShell se vuelven útiles. Podemos filtrar y formatear la salida con un script para producir información más comprensible.

Guarde el siguiente script como Get-LogOnHistory.ps1. También puede descargar este script desde este repositorio GitHub.

# Get-LogOnHistory.ps1 
[CmdletBinding()] 
param ( 
[Parameter()] 
[String] 
$Username 
, 
[Parameter()] 
[datetime] 
$StartTime 
, 
[Parameter()] 
[datetime] 
$EndTime 
, 
[Parameter()] 
[switch] 
$IncludeLogOff 
, 
[Parameter()] 
[string] 
$ComputerName = $env:COMPUTERNAME 
) 

# Base filter 
$filter = @{ 
LogName="Security" 
ID = @('4624') 
ProviderName="Microsoft-Windows-Security-Auditing" 
} 

# If IncludeLogOff is specified, add event 4634 to the filter 
if ($IncludeLogOff) { 
$filter['ID'] += '4634' 
} 

# If StartDate is specified 
if ($StartTime) { 
$filter.Add('StartTime', $StartTime) 
} 

# If EndDate is specified 
if ($EndTime) { 
$filter.Add('EndTime', $EndTime) 
} 

# Add username filter 
if ($Username) { 
## If PowerShell Core 
if ($PSVersionTable.PSEdition -eq 'Core') { 
$filter.Add('TargetUserName', $Username) 
} 
## If Windows PowerShell 
else { 
$filter.Add('Data', $Username) 
} 
} 

# <https://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/basic-audit-logon-events#configure-this-audit-setting> 
$logOnTypeTable = @{ 
'2' = 'Interactive' 
'3' = 'Network' 
'4' = 'Batch' 
'5' = 'Service' 
'6' = 'Unlock' 
'7' = 'NetworkCleartext' 
'8' = 'NewCredentials' 
'9' = 'RemoteInteractive' 
'10' = 'RemoteInteractive' 
'11' = 'CachedInteractive' 
} 

try { 
$events = Get-WinEvent -FilterHashtable $filter -ErrorAction Stop -ComputerName $ComputerName 

foreach ($event in $events) { 
[PSCustomObject]@{ 
TimeStamp = $event.TimeCreated 
EventType = $( 
if ($event.Id -eq '4624') { 
'LogOn' 
} 
else { 
'LogOff' 
} 
) 
User = $( 
if ($Username) { 
$Username 
} 
elseif ($event.Id -eq '4624') { 
$event.Properties[5].Value 
} 
else { 
$event.Properties[1].Value 
} 
) 
SourceIP = $( 
if ($event.Id -eq '4624') { 
$event.Properties[18].Value 
} 
else { 
$null 
} 
) 
ComputerName = $ComputerName 
LogOnType = $logOnTypeTable["$($event.Properties[8].value)"] 
} 
} 
} 
catch { 
$_.Exception.Message | Out-Default 
return $null 
}

Parámetros de secuencia de comandos

Este script tiene cinco parámetros que puede usar para personalizar los resultados. Tenga en cuenta que todos los parámetros son opcionales.

  • -Nombre de usuario — Aquí puede ingresar el nombre de usuario específico para verificar.
  • -Hora de inicio — Ingrese la hora de inicio para limitar el evento más antiguo para regresar.
  • -Hora de finalización — Ingrese la hora de finalización para limitar el regreso del evento más reciente.
  • -IncludeLogOff — Este es un parámetro de interruptor. Use esto si desea incluir los eventos de cierre de sesión. Si no se especifica, solo se devolverán los eventos de inicio de sesión.
  • -Nombre de la computadora — El nombre del equipo de destino para consultar. Si no especifica un nombre de computadora, el valor predeterminado será la computadora local.

Nota. Obtenga información sobre cómo obtener la versión de Windows mediante PowerShell.

Obtener todos los eventos de inicio de sesión

Ejecutar el script sin ningún parámetro devolverá todos los eventos de inicio de sesión en la computadora local:

.\Get-LogOnHistory.ps1

El valor de LogOnType muestra el método de inicio de sesión utilizado por la cuenta.

Referirse a Auditar eventos de inicio de sesión para conocer la definición de cada tipo de inicio de sesión.

obtener el historial de inicio de sesión del usuario powershell

Obtener todos los eventos de inicio y cierre de sesión

Con el modificador -IncludeLogOff, el script devuelve los eventos de cierre de sesión.

.\Get-LogOnHistory.ps1 -IncludeLogOff

Por razones obvias, el valor de LogOnType está vacío para todos los eventos de cierre de sesión.

historial de inicio de sesión de powershell

PowerShell Obtener historial de inicio de sesión de usuario específico

Cuando solo necesite devolver el historial de inicio de sesión de un usuario específico, use el parámetro -Username y proporcione el nombre de usuario (samaccountname).

.\Get-LogOnHistory.ps1 -Username speed.racer

historial de inicio de sesión de usuario powershell

PowerShell Obtenga un historial de inicio de sesión de usuario específico en una computadora remota

Si desea obtener el historial de inicio de sesión del usuario en una computadora remota, use el parámetro -ComputerName y especifique el nombre de la computadora remota o FQDN.

En este ejemplo, la secuencia de comandos recupera el historial de inicio de sesión del usuario superadministrador en la computadora theitbrosdc1.

.\Get-LogOnHistory.ps1 -Username superadmin -ComputerName theitbrosdc1

comando powershell para verificar el historial de inicio de sesión del usuario

Nota. La regla de entrada de Administración remota de registros de eventos (RPC) debe estar habilitada en la computadora remota de destino para que esto funcione.

historial de inicio de sesión del usuario directorio activo powershell

De lo contrario, obtendrá un error similar al siguiente.

cómo verificar el historial de inicio de sesión del usuario en el directorio activo usando powershell

O si especifica una computadora remota inexistente, obtendrá un error como este. La computadora theitbrosdc2 no existe en este entorno.

obtener el historial de inicio de sesión de powershell

Conclusión

¡Eso es todo! Ahora sabe cómo obtener el historial de inicio de sesión de usuario de Windows 10 mediante PowerShell. Puede usar esta información para monitorear la actividad del usuario en su computadora y detectar cualquier intento de acceso no autorizado.

5/5 - (93 votos)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *