如何检查谁当前从命令行登录Windows工作站?


37

环境在域中,服务器是Windows Server 2003,工作站已安装Vista和XP。
我需要一种方法来远程检查当前在工作站上登录的用户,最好是通过一些简单的命令行来检查,而无需使用sysinternals或第三方程序。

谢谢

Answers:


47

这是原始来源,但现在是404:

他们建议使用Windows上可用的(Windows管理界面命令)WMIC:

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

将返回当前登录到xxx.xxx.xxx.xxx的用户名,或

WMIC /NODE: "workstation_name" COMPUTERSYSTEM GET USERNAME 

将返回当前登录“ workstation_name”的用户名

更新:如果您是远程计算机上的管理员,这也应该在Windows 10上也可以使用。


当我远程或本地运行此命令时UserName,即使我已登录到该计算机,也仅得到一行输出“ ”,未列出其他任何内容。

@Dai您使用的是XP还是Vista或2003?这个问题对于那些操作系统
普里特僧伽

17

抱歉,没有注意到您不想使用Sysinternals。
那就是现在的Microsoft technet工具,有什么特定原因不使用它吗?
Mark Russinovich进入Microsoft 之前,我比其他第三方工具更喜欢Sysinternals 。


微软的Sysinternals套房有一个叫做工具Psloggedon

psloggedon.exe -l

还有NBTSTAT

nbtstat -a NetBIOS-Computer-NAme

3
sysinternals只是业务。我希望他们付给Mark一大笔钱去那里,目前他们并没有阻止他做他以前所做的出色工作,并且很可能会继续下去。
gbjbaanb 2009年

@gbjbaanb,对此我感到高兴。希望他能不断更新和添加到套件中。
尼克

1
这对我来说是个奇迹,而WMIC被接受的答案抱怨RPC没有运行。那是一盒新的蠕虫,我现在不想打开,所以我检查了psloggedon,我感到非常高兴。
Mike S

12

我使用过win32_loggedonuser,但是遇到了一个问题,即返回了多个域用户,因此该操作不适用于我的目的。相反,我使用(在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
}

如果是因为有时getowner出于某种原因会报告多个用户,不知道为什么,但是在我的情况下,该用户是同一用户,所以这不是问题。


2
原因是可能登录了多个用户。多年前就引入了快速用户切换等。我不会让其他用户登录。
TomTom

好点@TomTom,我忘记了这一点,我认为[win32_loggedonuser]也会返回任何使用psexec或powershell的人。
MDMoore313 2013年

6

您可以从win32_loggedonuser获取此信息。

从此页面

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.