![如何从命令行检查当前谁登录到 Windows 工作站?](https://linux22.com/image/486736/%E5%A6%82%E4%BD%95%E4%BB%8E%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%A3%80%E6%9F%A5%E5%BD%93%E5%89%8D%E8%B0%81%E7%99%BB%E5%BD%95%E5%88%B0%20Windows%20%E5%B7%A5%E4%BD%9C%E7%AB%99%EF%BC%9F.png)
环境在域中,服务器是 Windows Server 2003,工作站安装了 Vista 和 XP。
我需要一种方法来远程检查当前登录工作站的人,最好是通过一些简单的命令行,而不是 sysinternals 或第三方程序。
谢谢
答案1
这是原始来源。
他们建议使用 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。
答案2
抱歉,没有注意到您不想使用 Sysinternals。
它现在是一个 Microsoft Technet 工具,有什么具体原因不使用它吗?
我以前更喜欢 Sysinternals,而不是其他第三方工具马克·鲁西诺维奇进入微软。
psloggedon.exe -l
还有国家生物技术统计中心,
nbtstat -a NetBIOS-Computer-NAme
答案3
我使用过 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 会因为某种原因报告多个用户,不知道为什么,但就我而言是同一个用户,所以这不是问题。
答案4
您可以从 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