如何解决我可以以编程方式检查远程计算机以查看是否有人已通过远程桌面连接到这台计算机吗?
我们有几台启用了远程桌面的 Windows 10 Pro 计算机。有运行 Windows 10 专业版和 Windows 10 家庭版的“客户端”计算机。
是否可以从客户端计算机以编程方式检查远程计算机是否已被某人占用?也就是说,如果另一个远程客户端已经连接到它?如果是这样,我可以在不中断现有远程连接的情况下执行此操作吗?
解决方法
当用户登录到启用远程桌面服务的计算机时, 会话为用户启动。每个会话由一个标识 唯一的会话 ID。因为每次登录到远程桌面连接 (RDC) 客户端收到一个单独的会话 ID。
您可以使用 WTSEnumerateSessions 函数检索指定 RD 会话主机服务器上所有会话的标识符。
WTSEnumerateSessions:检索远程桌面会话主机 (RD 会话主机)服务器。
注意:
- 要枚举会话,必须启用查询信息 允许。如需更多信息,请参阅Remote Desktop Services Permissions。
- 要更改会话权限,请使用远程桌面服务 配置管理工具。
- 枚举在 RD 上托管的虚拟机上运行的会话 虚拟化主机服务器,您必须是 RD 虚拟化主机服务器上的管理员组。
如果要检索远程桌面服务正在运行的当前会话的会话 ID,可以调用 WTSQuerySessionInformation 并为 WTS_CURRENT_SESSION
参数和 {{1} 指定 SessionId
}} 用于 WTSSessionId
参数。
您可以从命令行使用 query session
命令。
如果你和远程计算机在同一个本地网络,那么你可以直接使用查询会话:
使用命令 query session /SERVER:<remote pc name,or IP address>
如果有人主动登录控制台,则返回 console <username> Active
作为状态。但是,这也可能意味着有人登录,会话被锁定,然后他们走开喝咖啡。这实际上并不意味着他们在会话中做某事;他们只是登录到控制台。如果您使用其他远程登录软件(例如 TeamViewer)也会出现此状态,因为它作为活动控制台登录。
C:\Users\Myself>query session /server:LabServerPC
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
console LabUser 1 Active
rdp-tcp 65536 Listen
如果计算机已被远程桌面会话使用,它会将其作为会话作为活动状态返回。在本例中为 rdp-tcp#1 <username> Active
。
C:\Users\Myself>query session /server:LabServerPC
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
rdp-tcp#1 LabUser 1 Active
console 3 Conn
rdp-tcp 65536 Listen
如果您通过 VPN 或本地网络运行,使用 SSH 远程登录 PC 然后直接查询会话可能更容易。在这种情况下,您将仅使用 query session
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。