¿Cómo verificar quién está actualmente conectado a la estación de trabajo de Windows desde la línea de comandos?

37

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

Gracias

Andrija
fuente

Respuestas:

47

Esta fue la fuente original, pero ahora es 404:

Sugirieron usar el (Comando de interfaz de administración de Windows) 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 "workstation_name"

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

Sangha Preet
fuente
Cuando ejecuto este comando de forma remota o local, obtengo " UserName" una sola línea de salida con nada más en la lista, aunque haya iniciado sesión en esa máquina.
Dai
@Dai ¿Estás usando XP o Vista o 2003? Esta pregunta fue para aquellos os
Preet Sangha
17

Lo sentimos, no noté que no desea utilizar Sysinternals.
Esa es ahora una herramienta technet de Microsoft, ¿alguna razón específica para no usarla?
Prefiero Sysinternals a otras herramientas de terceros antes de que Mark Russinovich se mudara a Microsoft.


El Microsoft Sysinternals Suite tiene una herramienta llamada PsLoggedOn ,

psloggedon.exe -l

También hay NBTSTAT ,

nbtstat -a NetBIOS-Computer-NAme
nik
fuente
3
sysinternals es solo el negocio. Espero que le hayan pagado a Mark una tonelada de dinero para ir allí, actualmente no le han impedido que haga el buen trabajo que hacía antes y que eso continúe por mucho tiempo.
gbjbaanb
@gbjbaanb, estoy feliz por eso. Espero que siga actualizando y agregando a la suite.
nik
1
Esto funcionó de maravilla para mí, mientras que WMICen la respuesta aceptada se quejó de que RPC no estaba funcionando. Esa es una nueva lata de gusanos que no tengo ganas de abrir en este momento, así que me registré en psloggedon y estoy muy feliz.
Mike S
12

Utilicé win32_loggedonuser, pero encontré un problema en el que se devolvió más de un usuario de dominio , por lo que no funcionó para mis propósitos. En cambio, usé (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 if es porque a veces getowner informará a más de un usuario por alguna razón, no sé por qué, pero en mi caso era el mismo usuario, por lo que no fue un problema.

MDMoore313
fuente
2
La razón es que más de un usuario puede iniciar sesión. El cambio rápido de usuario, etc., se introdujo hace años. I) t mantiene al otro usuario conectado.
TomTom
Good Point @TomTom, me olvidé de eso, creo que [win32_loggedonuser] también devolvería a cualquiera que esté psexec'd o powershell'd también.
MDMoore313
6

Puede 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
HK_
fuente