Cómo identificar al usuario que ha iniciado sesión en una computadora remota

Obtener la información del usuario que inició sesión desde máquinas Windows remotas es, a veces, un poco molesto.

Cualquiera que haya tenido que identificar rápidamente quién ha iniciado sesión en una máquina Windows remota sabe que no siempre es sencillo. Especialmente si administra varios servidores o escritorios, simplemente busca una forma rápida de ver quién ha iniciado sesión, ya sea localmente o mediante RDP. Las herramientas de interfaz gráfica de usuario habituales pueden resultar excesivas o no estar disponibles; es entonces cuando las herramientas de scripting y línea de comandos resultan útiles. El objetivo es obtener una forma eficaz y fiable de ver los usuarios conectados, especialmente en sistemas remotos, sin grandes complicaciones. Porque, claro, Windows tiene que complicar todo un poco más de lo debido.

Cómo comprobar los usuarios conectados con herramientas como PSLoggedOn y qwinsta

Uso de PSLoggedOn.exe

Esta práctica herramienta de la suite PSTools de SysInternals te ayuda a ver quién ha iniciado sesión localmente y mediante recursos compartidos SMB en una máquina remota. Es práctica porque accede al registro y a las sesiones de red. La clave está en asegurarse de que el servicio RemoteRegistry se esté ejecutando en la máquina de destino; de lo contrario, no podrá consultar el registro para obtener información del usuario. Puedes iniciarlo o configurarlo en automático con PowerShell:

Set-Service RemoteRegistry -StartType Automatic -PassThru | Start-Service

Una vez que esto esté resuelto, simplemente ejecute:

psloggedon \\RemoteCompName

Esto mostrará el nombre de usuario conectado localmente y cualquier sesión SMB. Si solo desea el usuario local, agregue el parámetro -l :

Psloggedon.exe \\pc1215wks1 -l

A veces, en algunas configuraciones, parece que la herramienta no siempre obtiene la información a la primera. Si no proporciona la información correcta, podría ser necesario reiniciar el PC remoto o el servicio. Pero normalmente funciona una vez que todo está configurado correctamente. Resulta útil para comprobaciones rápidas, especialmente al administrar varios servidores o estaciones de trabajo.

Uso de qwinsta para obtener información de la sesión

El comando qwinsta integrado es un clásico, familiar para cualquiera que administre entornos de Escritorio Remoto. Muestra las sesiones RDP activas y desconectadas en un servidor o equipo de escritorio. Ejecútelo así:

qwinsta /server:be-rdsh01

Esto genera los ID de sesión, los nombres de usuario y los estados de la sesión. Sin embargo, si se produce el «Error 5: Acceso denegado», significa que su cuenta probablemente no tiene los permisos adecuados o que el host de destino no está configurado para permitir la administración remota de RPC. Para solucionarlo, puede que tenga que modificar el registro ( o usar este comando):

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v "AllowRemoteRPC" /t REG_DWORD /d 1 /f

Esto permite la administración remota de RPC, de la que depende qwinsta. Nuevamente, podría ser necesario reiniciar o implementar una política para que surta efecto.

Cómo obtener el usuario actual en una máquina remota usando PowerShell

Otra forma es mediante las clases WMI de PowerShell, especialmente Win32_ComputerSystem. Es un poco extraño, pero en algunas configuraciones solo muestra el usuario que ha iniciado sesión en la consola, no a través de RDP. Para ello, abra PowerShell y ejecute:

Get-WmiObject -Class Win32_ComputerSystem | Format-List UserName

Esto devuelve el nombre de usuario, pero, nuevamente, solo de la sesión de consola física. Para apuntar a un equipo remoto, agregue el parámetro -ComputerName :

(Get-WmiObject -Class Win32_ComputerSystem -ComputerName pc1215wks1).UserName

Nota: A veces, esto solo muestra sesiones interactivas locales, no sesiones RDP. Para solucionarlo, puede usar la comunicación remota de PowerShell. Use Invoke-Command con un bloque de script si es necesario. Y si usa PowerShell Core (a través de pwsh), el cmdlet Get-CimInstance reemplaza a Get-WmiObject y usa WinRM para conectarse a sistemas remotos:

Get-CimInstance -ComputerName pc1215wks1 -ClassName Win32_ComputerSystem | Select-Object UserName

Asegúrate de que WinRM esté habilitado en todos los hosts remotos (ejecuta WinRM quickconfig); de lo contrario, no funcionará. No sé por qué, pero a veces es necesario verificar las reglas del firewall o la configuración de GPO.

Obtener una lista de usuarios conectados en varias computadoras

Si se administra un dominio completo, es molesto revisar cada máquina manualmente. Se puede crear un script con PowerShell para analizar varios sistemas. Por ejemplo, una función simple que hace ping y consulta una lista de computadoras:

function Get-LoggedUser { param([string[]]$ComputerName) foreach ($comp in $ComputerName) { if ((Test-NetConnection $comp -WarningAction SilentlyContinue).PingSucceeded) { try { $user = (Get-WmiObject -Class Win32_ComputerSystem -ComputerName $comp).UserName [PSCustomObject]@{ Computer = $comp UserName = $user } } catch { [PSCustomObject]@{ Computer = $comp UserName = "Error or no data" } } } else { [PSCustomObject]@{ Computer = $comp UserName = "Offline" } } } } # Usage: $computers = (Get-ADComputer -Filter * -SearchBase "OU=Berlin, DC=woshub, DC=com").Name Get-LoggedUser -ComputerName $computers | Format-Table -AutoSize 

De esta forma, puedes ver quién ha iniciado sesión en cada lugar sin tener que revisar cada máquina manualmente. No garantizamos la perfección: algunas máquinas podrían bloquear WMI o tener firewalls, pero es un buen comienzo. Además, puedes ampliar el script para incluir otra información o ejecutarlo en una tarea programada.

Resumen

Todas estas opciones no son perfectas, pero combinarlas proporciona un conjunto de herramientas adecuado para averiguar quién ha iniciado sesión en sistemas Windows remotos. Tanto si prefiere herramientas integradas como qwinsta, PSLoggedOn como scripts con WMI/CIM, puede adaptar su enfoque según los permisos, el entorno y la cantidad de información que realmente necesite. Recuerde que podría ser necesario habilitar el registro remoto o la administración de RPC, por lo que suele ser necesaria una configuración inicial.

Resumen

  • Utilice PSLoggedOn para verificar las sesiones locales y de red; asegúrese de que el servicio RemoteRegistry esté habilitado.
  • Obtenga información de la sesión a través de qwinsta, pero tenga cuidado con los permisos y la configuración del registro.
  • Aproveche los comandos WMI y CIM de PowerShell para obtener información de usuarios remotos: habilite WinRM.
  • Para varias máquinas, la creación de scripts con Test-NetConnection, Get-AdComputer y WMI ayuda a automatizar las comprobaciones.

Reflexiones finales

Con suerte, esto te ahorrará algunas horas cuando necesites información rápida sobre los inicios de sesión de los usuarios. Administrar varias máquinas remotas siempre es un poco complicado, pero estos métodos te ayudarán a mantenerte a la vanguardia.