Wie kann ich überprüfen, wer gerade über die Befehlszeile an der Windows-Arbeitsstation angemeldet ist?

37

Die Umgebung befindet sich in der Domäne, der Server ist Windows Server 2003, auf den Arbeitsstationen sind Vista und XP installiert.
Ich brauche die Möglichkeit, aus der Ferne zu überprüfen, wer gerade auf der Workstation angemeldet ist, vorzugsweise über eine einfache Befehlszeile und ohne Sysinternals oder Programme von Drittanbietern.

Vielen Dank

Andrija
quelle

Antworten:

47

Dies war die ursprüngliche Quelle, aber das ist jetzt 404:

Sie schlugen vor, die (Windows Management Interface Command) WMIC zu verwenden, die unter Windows verfügbar ist:

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

Gibt den Benutzernamen zurück, der aktuell in xxx.xxx.xxx.xxx oder angemeldet ist

WMIC /NODE: "workstation_name" COMPUTERSYSTEM GET USERNAME 

gibt den Benutzernamen zurück, der aktuell in "workstation_name" angemeldet ist

UPDATE: Dies sollte auch unter Windows 10 funktionieren - wenn Sie ein Administrator auf dem Remotecomputer sind.

Preet Sangha
quelle
Wenn ich diesen Befehl entweder remote oder lokal " UserName" ausführe, wird nur eine einzige Ausgabezeile angezeigt, in der nichts anderes aufgelistet ist, obwohl ich bei diesem Computer angemeldet bin.
Dai
@Dai Verwenden Sie XP oder Vista oder 2003? Diese Frage war für die OS
Preet Sangha
17

Entschuldigung, habe nicht bemerkt, dass Sie Sysinternals nicht verwenden möchten.
Das ist jetzt ein Microsoft Technet-Tool, einen bestimmten Grund, es nicht zu verwenden?
Ich habe Sysinternals anderen Tools von Drittanbietern vorgezogen, bevor Mark Russinovich zu Microsoft wechselte.


Die Microsoft Sysinternals Suite verfügt über ein Tool namens Psloggedon .

psloggedon.exe -l

Es gibt auch NBTSTAT ,

nbtstat -a NetBIOS-Computer-NAme
nik
quelle
3
Sysinternals ist nur das Geschäft. Ich hoffe, sie haben Mark eine Menge Geld bezahlt, um dorthin zu gelangen. Derzeit haben sie ihn nicht daran gehindert, die gute Arbeit zu leisten, die er zuvor geleistet hat, und es kann noch lange dauern.
gbjbaanb
@gbjbaanb, darüber freue ich mich. Ich hoffe, er aktualisiert und erweitert die Suite weiter.
Nik
1
Dies wirkte Wunder für mich, während die WMICin der akzeptierten Antwort beklagte, dass RPC nicht lief. Das ist eine neue Dose Würmer, die ich gerade nicht öffnen möchte, also habe ich mich bei psloggedon eingecheckt und bin ziemlich glücklich.
Mike S
12

Ich habe win32_loggedonuser verwendet, bin jedoch auf ein Problem gestoßen, bei dem mehr als ein Domänenbenutzer zurückgegeben wurde, sodass es für meine Zwecke nicht funktioniert hat. Stattdessen habe ich (In 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
}

Das Wenn ist, weil Getowner manchmal aus irgendeinem Grund mehr als einen Benutzer meldet. Ich weiß nicht warum, aber in meinem Fall war es derselbe Benutzer, also war es kein Problem.

MDMoore313
quelle
2
Der Grund dafür ist, dass möglicherweise mehr als ein Benutzer angemeldet ist. Ein schneller Benutzerwechsel usw. wurde vor Jahren eingeführt. I) t hält den anderen Benutzer angemeldet.
TomTom
Guter Punkt @TomTom, das habe ich vergessen. Ich denke, [win32_loggedonuser] würde auch jeden zurückgeben, der Psexec oder Powershell hat.
MDMoore313
6

Sie können diese Informationen von win32_loggedonuser erhalten.

Von dieser Seite :

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_
quelle