web-dev-qa-db-fra.com

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

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

Merci

37
Andrija

C'était le source d'origine 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é à "workstation_name"

MISE À JOUR: Cela devrait également fonctionner sur Windows 10 - si vous êtes administrateur sur la machine distante.

47
Preet Sangha

Désolé, vous n'avez pas remarqué que vous ne souhaitez pas utiliser Sysinternals.
C'est maintenant un outil Microsoft Technet, une raison spécifique pour ne pas l'utiliser?
J'ai déjà préféré Sysinternals à d'autres outils tiers Mark Russinovich déménagé dans Microsoft.


Microsoft Sysinternals Suite dispose d'un outil appelé Psloggedon ,

psloggedon.exe -l

Il y a aussi NBTSTAT ,

nbtstat -a NetBIOS-Computer-NAme
17
nik

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

le if est parce que parfois getowner signalera 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.

12
MDMoore313

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
6
HK_