Cómo ver quién inicia sesión en tu equipo con PowerShell

El visor de eventos es una gran utilidad que nos informa de los acontecimientos que ocurren en los equipos basados en Windows. Pero en muchas ocasiones tenemos la necesidad de buscar y filtrar eventos de forma rápida.

Este script de PowerShell está pensado para desvelar qué usuarios iniciaron y cerraron sesión en tu equipo solo con ejecutarlo. Puedes descargarlo en el enlace a GitHub que te dejo al final de la entrada.

escenario

Este script resulta muy útil en entornos corporativos que usen un dominio de Windows, ya que se puede lanzar como un job en remoto y comprobar, qué administradores han accedido a una máquina de forma más rápida que desde el visor de eventos. También es útil si lo que buscas es automatizarlo como tarea y tener un registro de accesos del sistema.

El funcionamiento es sencillo. Lo primero es obtener y analizar el número de eventos que se le hayan pasado por parámetro. Si no se introducen argumentos por defecto, analizará los últimos 1000 eventos guardados en el sistema.

El objetivo es obtener los eventos con el ID 4634 y 4624, que son los cierres e inicios de sesión respectivamente. Si el evento es de inicio de sesión, se obtendrá también el tipo de inicio de sesión que puede ser:

Tipo de inicio de sesiónTítulo de inicio de sesiónDescripción
2InteractivoUn usuario ha iniciado sesión en este equipo.
3RedUn usuario o equipo ha iniciado sesión en este equipo desde la red.
4LoteEl tipo de inicio de sesión por lotes lo usan los servidores por lotes, donde los procesos pueden ejecutarse en nombre de un usuario sin su intervención directa.
5ServicioEl Administrador de control de servicio inició un servicio.
7Desbloquear
Esta estación de trabajo se ha desbloqueado.
8NetworkCleartextUn usuario ha iniciado sesión en este equipo desde la red. La contraseña del usuario se pasó al paquete de autenticación en su formulario sinhashed. La autenticación integrada empaqueta todas las credenciales hash antes de enviarlas a través de la red. Las credenciales no atraviesan la red con texto sin formato (también denominado cleartext).
9NewCredentialsUn autor de la llamada clonó su token actual y especificó nuevas credenciales para las conexiones salientes. La nueva sesión de inicio de sesión tiene la misma identidad local, pero usa credenciales diferentes para otras conexiones de red.
10RemoteInteractive
Un usuario ha iniciado sesión en este equipo de forma remota con Terminal Services o Escritorio remoto.
11CachedInteractiveUn usuario inició sesión en este equipo con credenciales de red almacenadas localmente en el equipo. No se ha contactado con el controlador de dominio para comprobar las credenciales.
Fuente: Auditar eventos de inicio de sesión

Una vez analizados los eventos se hace un cribado para separar si son cierres o inicios de sesión, y finalmente se añaden los resultados formateados al array que mostrará al final de la ejecución.

ejemplos de uso

Antes de ejecutarlo debes saber que el script requiere de elevación de privilegios para su ejecución, así que ejecútalo con un usuario con permisos de administrador local.

Si ejecutas el script sin argumentos te devolverá los inicios y cierres de sesión de los últimos 1000 eventos generados en el sistema.

.\Get-LastLogonUsers.ps1

Puedes pasar como argumentos el número de eventos que quieres que analice. Por ejemplo, si introduces 500 analizará los últimos 500 eventos de seguridad guardados.

.\Get-LastLogonUsers.ps1 500

Si lo que quieres es analizar todos los eventos que tenga el sistema entonces introduce un 0 como parámetro.

.\Get-LastLogonUsers.ps1 0

filtros

Puedes añadir filtros para evitar mostrar usuarios que no te interesan como SYSTEM, DWM, UMFW o incluso tu propio usuario.

Para ello ve a la línea donde se encuentra el siguiente if (hay comentarios en el código con esta indicación):

if (($usr -ne "")) {

Y pon el filtro que quieras añadiendo la condición -and. Por ejemplo, vamos filtrar en los resultados el usuario SYSTEM. Para ello ponemos el filtro de la siguiente forma:

if (($usr -ne "") -and ($usr -ne "SYSTEM")){

Y ejecutamos el script.

descárgalo en github

Te dejo el enlace al repositorio de GitHub para que puedas descargarlo.