39 votos

¿Cómo comprobar quién ha iniciado la sesión en la estación de trabajo de Windows desde la línea de comandos?

El entorno está en el dominio, el servidor es Windows Server 2003, las estaciones de trabajo tienen instalado Vista y XP.
Necesito la manera de comprobar de forma remota quién está actualmente conectado a la estación de trabajo, preferiblemente desde alguna línea de comandos simple y sin sysinternals o programas de terceros.

Gracias

50voto

Preet Sangha Puntos 2016

Esta fue la fuente original pero eso es ahora 404 :

Sugirieron utilizar el (Windows Management Interface Command) WMIC que está disponible en Windows :

WMIC /NODE: xxx.xxx.xxx.xxx COMPUTERSYSTEM GET USERNAME 

Devolverá el nombre de usuario actualmente conectado a xxx.xxx.xxx.xxx, o

WMIC /NODE: "workstation_name" COMPUTERSYSTEM GET USERNAME 

devolverá el nombre de usuario actualmente conectado a "nombre_de_trabajo"

ACTUALIZACIÓN: Esto debería funcionar en Windows 10 también - si usted es un administrador en la máquina remota.

0 votos

Cuando ejecuto este comando, ya sea de forma remota o local, sólo obtengo una única línea de salida " UserName " sin que aparezca nada más, a pesar de que estoy conectado a esa máquina.

1 votos

@Dai ¿Estás usando XP o Vista o 2003? Esta pregunta era para esos sistemas operativos.

17voto

nik Puntos 5456

Lo siento, no me di cuenta de que no quieres usar Sysinternals.
Esa es ahora una herramienta de Microsoft technet, ¿alguna razón específica para no usarla?
Ya he preferido Sysinternals a otras herramientas de terceros Mark Russinovich se trasladó a Microsoft.


El Microsoft Sysinternals Suite tiene una herramienta llamada Psloggedon ,

psloggedon.exe -l

También hay NBTSTAT ,

nbtstat -a NetBIOS-Computer-NAme

3 votos

Sysinternals es sólo el negocio. Espero que le hayan pagado a Mark una tonelada de dinero para que vaya allí, actualmente no le han impedido hacer el buen trabajo que estaba haciendo antes y que siga así.

0 votos

@gbjbaanb, me alegro de ello. Espero que siga actualizando y añadiendo a la suite.

1 votos

Esto me funcionó de maravilla, mientras que el WMIC en la respuesta aceptada se quejaba de que el RPC no estaba funcionando. Esa es una nueva lata de gusanos que no me apetece abrir ahora mismo, así que he comprobado en psloggedon y estoy bastante contento.

12voto

BigHomie Puntos 3983

He utilizado win32_loggedonuser, pero me encontré con un problema en el que más de un usuario del dominio fue devuelto, por lo que no funcionó para mis propósitos. En su lugar utilicé (En powershell)

#Get Currently logged in user
$ExplorerProcess = gwmi win32_process | where name -Match explorer

if($ExplorerProcess.getowner().user.count -gt 1){
    $LoggedOnUser = $ExplorerProcess.getowner().user[0]
}

else{
    $LoggedOnUser = $ExplorerProcess.getowner().user
}

el si es porque a veces getowner reporta más de un usuario por alguna razón, no sé por qué pero en mi caso era el mismo usuario así que no fue un problema.

3 votos

La razón es que puede haber más de un usuario conectado. El cambio rápido de usuario, etc., se introdujo hace años. I)t mantiene el otro usuario conectado.

0 votos

Buen punto @TomTom, me olvidé de eso, creo que [win32_loggedonuser] también devolvería a cualquiera que sea psexec'd o powershell'd en también.

6voto

Sergey Stadnik Puntos 1193

Puedes obtener esta información de win32_loggedonuser.

Desde esta página :

strComputer = "."   ' " use "." for local computer

Set objWMI = GetObject("winmgmts:" _
              & "{impersonationLevel=impersonate}!\\" _
              & strComputer & "\root\cimv2")

Set colSessions = objWMI.ExecQuery _
    ("Select * from Win32_LogonSession Where LogonType = 2 OR LogonType = 10")

If colSessions.Count = 0 Then
   Wscript.Echo "No interactive users found"
Else
   For Each objSession in colSessions
     If objSession.LogonType = 2 Then
       WScript.Echo "Logon type: Console"
     Else
       WScript.Echo "Logon type: RDP/Terminal Server"
     End If
     Set colList = objWMI.ExecQuery("Associators of " _
         & "{Win32_LogonSession.LogonId=" & objSession.LogonId & "} " _
         & "Where AssocClass=Win32_LoggedOnUser Role=Dependent" )

     For Each objItem in colList
       WScript.Echo "User: " & objItem.Name
       WScript.Echo "FullName: " & objItem.FullName
       WScript.Echo "Domain: " & objItem.Domain
     Next
     Wscript.Echo "Session start time: " & objSession.StartTime
     WScript.Echo
   Next
End If

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X