【发布时间】:2012-03-06 14:17:39
【问题描述】:
我正在寻找一种工具来了解本地网络上的给定计算机是否正在被用户远程访问,理想情况下我想知道该用户是谁。在我的公司,我们共享虚拟机,并且我们必须询问团队成员是否使用任何远程计算机。我想要某种仪表板,它可以告诉我正在使用哪台计算机,以及哪台计算机是免费的。
我很乐意使用任何需要在每台需要监控的机器上安装服务的商业解决方案或类似的东西。
【问题讨论】:
我正在寻找一种工具来了解本地网络上的给定计算机是否正在被用户远程访问,理想情况下我想知道该用户是谁。在我的公司,我们共享虚拟机,并且我们必须询问团队成员是否使用任何远程计算机。我想要某种仪表板,它可以告诉我正在使用哪台计算机,以及哪台计算机是免费的。
我很乐意使用任何需要在每台需要监控的机器上安装服务的商业解决方案或类似的东西。
【问题讨论】:
如果您从与您正在查询的系统加入同一域的 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”或“administrator”之类的东西,您可能想知道“来自哪个客户端”的答案,而上面没有给出。
上面给出了一个快速的基本答案,不需要额外的工具。有关更多详细信息,您可以查看 cassia library 或 PSTerminalServices(基于 cassia 构建)。有关详细信息,请参阅this question 中的一些答案。
我对此的第一个想法是使用 Sysinternals 工具,例如 PsLoggedOn 或 LogonSessions。然后我在this blog post from 2003 中找到了对我以前未知的 qwinsta 和 rwinsta 工具的引用。
【讨论】:
你可以使用一个名为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]$_}
【讨论】: