我正在寻找一种工具来了解用户是否正在远程访问本地网络上的给定计算机,理想情况下我想知道该用户是谁。在我的公司,我们共享虚拟机,如果他们使用任何远程计算机,我们必须要求团队成员。我想有一些仪表板可以告诉我正在使用什么电脑,以及什么电脑是免费的。
我很高兴使用任何需要在每台需要监控的机器上安装服务的商业解决方案或类似的东西。
答案 0 :(得分:25)
如果您从加入与您查询的系统相同的域的Windows客户端查询,并且可能需要标准域用户之外的某些权限,则以下内容会变得更加容易。如果您遇到身份验证/权限问题,那将是我要检查的第一件事。
有一种工具至少可以追溯到Windows XP,称为“qwinsta”。更高版本的Windows同时具有qwinsta和“查询会话”。
qwinsta /server:computer01
SESSIONNAME USERNAME ID STATE TYPE DEVICE
console 0 Conn wdcon
rdp-tcp 65536 Listen rdpwd
administrator 2 Disc rdpwd
这表示用户“管理员”已登录但已断开连接。由于在此示例中,computer01是具有默认“管理”RDP许可证的Windows Server 2003系统,因此会有第二个会话监听某人进行连接。
连接到先前断开连接的会话后再次运行相同的命令如下所示:
SESSIONNAME USERNAME ID STATE TYPE DEVICE
[unchanged output removed]
rdp-tcp#25 administrator 2 Active rdpwd
这足以回答“当前通过RDP活动的人”,如果您使用的是个人用户名,它也应该回答“谁”。如果你们都使用“testuser”或“管理员”或其他东西,你可能想知道“来自哪个客户”的答案,而上面没有给出。
上面提供了一个快速的基本答案,无需其他工具。有关详细信息,您可以查看cassia library或PSTerminalServices(基于决明子)。有关更多详细信息,请参阅this question中的一些答案。
我首先想到的是使用诸如PsLoggedOn或LogonSessions之类的Sysinternals工具。然后我在this blog post from 2003找到了对以前未知的qwinsta和rwinsta工具的引用。
答案 1 :(得分:0)
您可以使用名为PSRdSessions的PSModule,此模块为provide some simple funtions
使用样本
Get-RdSession -ComputerName Server01.domain.xyz # return [Cassia.Impl.TerminalServicesSession]
返回[哈希表]
Get-RdSession -ComputerName Server01.domain.xyz | Convert-RdSession # return
返回[pscustomobject]
Get-RdSession -ComputerName Server01.domain.xyz | Convert-RdSession | %{[pscustomobject]$_}