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


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, remote zu überprüfen, wer gerade an einer Arbeitsstation angemeldet ist, vorzugsweise von einer einfachen Befehlszeile und ohne sysinternals oder Programme von Drittanbietern.

Vielen Dank


34
2018-06-27 12:09


Ursprung




Antworten:


siehe hier : https://web.archive.org/web/1/http://techrepublic%2ecom%2ecom/5208-7343-0.html?forumID=101&threadID=307918&messageID=3065346

Sie schlagen den Befehl wmic vor, der unter Windows verfügbar ist:

WMIC / NODE: xxx.xxx.xxx.xxx   COMPUTERSYSTEM BENUTZERNAME ERHALTEN   gib den Benutzernamen zurück, der gerade angemeldet ist   in xxx.xxx.xxx.xxx

oder WMIC / NODE: "Arbeitsstationsname"   COMPUTERSYSTEM GET USERNAME wird   gib den Benutzernamen zurück, der gerade angemeldet ist   in "Arbeitsstationsname"


43
2018-06-27 12:26



Wenn ich diesen Befehl entweder remote oder lokal ausführe, erhalte ich nur eine einzige Ausgabezeile. "UserName"Ich habe nichts anderes aufgelistet, obwohl ich bei dieser Maschine angemeldet bin. - Dai
@Dai Benutzt du XP oder Vista oder 2003? Diese Frage war für jene os - Preet Sangha


Entschuldigung, habe nicht bemerkt, dass du keine Sysinternals benutzen willst.
Das ist jetzt ein Microsoft Technet-Tool, einen bestimmten Grund, es nicht zu verwenden?
Ich habe Sysinternals gegenüber anderen Tools von Drittanbietern bevorzugt Mark Russinowitsch zog in Microsoft ein.


Das Microsoft Sysinternals Suite hat ein Tool namens Psloggedon,

psloggedon.exe -l

Es gibt auch NBTSTAT,

nbtstat -a NetBIOS-Computer-NAme

17
2018-06-27 12:30



sysinternals ist nur das Geschäft. Ich hoffe, sie haben Mark eine Menge Geld dafür bezahlt, dass sie dorthin gegangen sind. Momentan haben sie ihn nicht daran gehindert, die gute Arbeit zu machen, die er zuvor gemacht hat, und das könnte lange dauern. - gbjbaanb
@gbjbaanb, ich bin glücklich darüber. Hoffe, er aktualisiert und ergänzt die Suite. - nik
Das hat Wunder für mich bewirkt, während der WMIC in der angenommenen Antwort beklagte sich, dass RPC nicht lief. Das ist eine neue Dose mit Würmern, die ich gerade nicht öffnen möchte, also habe ich in psloggedon eingecheckt und bin ziemlich glücklich. - Mike S


Ich habe Win32_loggedonuser verwendet, aber lief auf ein Problem, wo mehr als ein Domänenbenutzer wurde zurückgegeben, also hat es nicht für meine Zwecke funktioniert. 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 ist, weil manchmal getowner mehr als einen Benutzer aus irgendeinem Grund meldet, weiß nicht warum, aber in meinem Fall war es derselbe Benutzer, also war es kein Problem.


11
2018-03-28 18:29



Der Grund dafür ist, dass mehr als ein Benutzer angemeldet sein kann. Der schnelle Benutzerwechsel usw. wurde vor Jahren eingeführt. I) t hält den anderen Benutzer angemeldet. - TomTom
Good Point @TomTom, ich habe das vergessen, ich denke [win32_loggedonuser] würde auch jeden zurückgeben, der auch psexec'd oder powershell ist. - MDMoore313


Sie können diese Informationen von win32_loggedonuser erhalten.

Von diese 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

6
2018-06-27 12:28