Comment vérifier qui est actuellement connecté au poste de travail Windows à partir de la ligne de commande?

37

L'environnement est dans le domaine, le serveur est Windows Server 2003, Vista et XP sont installés sur les postes de travail.
J'ai besoin de savoir comment vérifier à distance qui est actuellement connecté au poste de travail, de préférence à partir d'une simple ligne de commande et sans programmes sysinternals ou tiers.

Merci

Andrija
la source

Réponses:

47

C’était la source originale, mais c’est maintenant le 404:

Ils ont suggéré d'utiliser le WMIC (Windows Management Interface Command) disponible sur Windows:

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

Renverra le nom d'utilisateur actuellement connecté à xxx.xxx.xxx.xxx, ou

WMIC /NODE: "workstation_name" COMPUTERSYSTEM GET USERNAME 

renverra le nom d'utilisateur actuellement connecté dans "workstation_name"

UPDATE: Cela devrait également fonctionner sous Windows 10 - si vous êtes un administrateur de la machine distante.

Preet Sangha
la source
Lorsque j'exécute cette commande à distance ou localement, je ne reçois qu'une seule ligne de sortie " UserName" sans autre élément répertorié, même si je suis connecté à cette machine.
Dai
@Dai Utilisez-vous XP, Vista ou 2003? Cette question était pour ceux os
Preet Sangha
17

Désolé, vous n'avez pas remarqué que vous ne voulez pas utiliser Sysinternals.
C’est maintenant un outil Microsoft technet, une raison spécifique pour ne pas l’utiliser?
J'ai préféré Sysinternals aux outils tiers avant que Mark Russinovich ne s'installe dans Microsoft.


Le Microsoft Sysinternals Suite a un outil appelé PsLoggedOn ,

psloggedon.exe -l

Il y a aussi NBTSTAT ,

nbtstat -a NetBIOS-Computer-NAme
nik
la source
3
sysinternals n'est que le métier. J'espère qu'ils ont payé à Mark une tonne d'argent pour y aller. Pour le moment, ils ne l'ont pas empêché de faire le bon travail qu'il faisait auparavant et cela peut continuer longtemps.
gbjbaanb
@ gbjbaanb, je suis heureux de cela. J'espère qu'il continue à mettre à jour et à ajouter à la suite.
nik
1
Cela a fonctionné à merveille pour moi, alors que WMICdans la réponse acceptée s'est plaint que RPC ne fonctionnait pas. C'est une nouvelle boîte de Pandore que je n'ai pas envie d'ouvrir en ce moment, alors j'ai vérifié sur psloggedon et j'en suis plutôt content.
Mike S
12

J'ai utilisé win32_loggedonuser, mais j'ai rencontré un problème où plus d'un utilisateur de domaine a été renvoyé. Cela n'a donc pas fonctionné à mes fins. Au lieu de cela, j'ai utilisé (dans 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
}

le if est parce que parfois le propriétaire indique plus d'un utilisateur pour une raison quelconque, je ne sais pas pourquoi, mais dans mon cas, c'était le même utilisateur, donc ce n'était pas un problème.

MDMoore313
la source
2
La raison en est que plusieurs utilisateurs peuvent être connectés. Le changement rapide d'utilisateur, etc. a été introduit il y a des années. I) t garde l’autre utilisateur connecté.
TomTom
Good Point @TomTom, j'ai oublié ça, je pense que [win32_loggedonuser] renverrait également tous ceux qui sont psexec'd ou powershell'd in.
MDMoore313
6

Vous pouvez obtenir ces informations auprès de win32_loggedonuser.

De cette page :

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_
la source