确定服务器当前是否通过远程桌面连接访问

例如,我有一个由4人使用的服务器,并且该服务器中只有一个帐户。 我们知道,当某人已经访问了另一个用户访问服务器时,当前用户将被断开连接。

有什么方法可以确定是否通过远程桌面连接访问服务器,以防止活动用户的不必要的中断。

这适用于以下操作系统:Windows Server 2008,Windows Server 2008 R2,Windows Server 2012和Windows Vista尝试此命令

query session [<SessionName> | <UserName> | <SessionID>] [/server:<ServerName>] [/mode] [/flow] [/connect] [/counter] 

这应该产生如下的结果;

 C:\>query session SESSIONNAME USERNAME ID STATE TYPE DEVICE >console Administrator1 0 active wdcon rdp-tcp#1 User1 1 active wdtshare rdp-tcp 2 listen wdtshare 4 idle 5 idle 

资源

希望这可以帮助。

编辑:关于netstat的答案,但是你运行,你明确更好的运行qwinsta。

编辑:qwinsta可以在远程服务器上运行。 我推荐以上PsLoggedOn有几个原因。

你可以使用PsExec(来自PsTools ,就像psexec.exe \\remote -u remote_username -p remote_passwd cmd.exe来获得一个远程shell并运行quser或者qwinsta来枚举活动会话, 你需要admin,我相信文件共享on(它使用默认的C $ / ADMIN $,某些家庭实例没有),这在工作组环境上更麻烦一些。

我可能会错过更简单的事情,比如quser可以在另一台服务器上运行(可能不适合这个用例),或者你可以直接运行quser而不是首先获得一个shell(你可能可以),但是我会添加一旦有人testing了它或者在评论中告诉我。

Windows Server平台支持多个并发RDP会话(通常最多两个会话),并会在用户尝试连接到已达到其最大值的服务器时警告用户。 因此,您所描述的情况可以完全避免,只需为每个人创build单独的用户帐户 – 这是一个安全的最佳做法。

没有个人用户帐户,你当然会遇到像这样的资源共享问题。 但是,您也不能单独pipe理用户权限,也不能在事件日志中告诉另一个人。

即使在非服务器平台上(例如:Windows 7,Windows 8.1,Windows 10等),如果您拥有单独分配的用户帐户,您的scheme也不会成为问题。 这些平台一次只允许一个会话处于活动状态。 当一个RDP用户连接,并且已经有一个活动的会话时,三件事情之一将会发生:

  • 如果用于连接的帐户与活动会话所有者相同,则连接将build立。 该用户的预先存在的RDP连接将被丢弃。 如果用户的预先存在的会话在本地控制台上,控制台将被踢出到“locking屏幕”。
  • 如果用于连接的帐户与活动会话所有者不相同, 并且该帐户没有pipe理员权限,则新会话将被拒绝。 用户将被告知系统已被使用,连接将被终止。
  • 如果用于连接的帐户与活动会话所有者不相同, 并且该帐户具有pipe理员权限,则该会话仍不会立即build立。 用户将被告知系统已经被使用,他们将被赋予强制活动用户离开系统的选项 ,以便他们可以login。根据系统configuration,强制新的会话可能导致活动用户会话被断开/locking(但仍然可以稍后恢复),或者实际上可能会被注销。

这就是说,下面是对现有答案的一些评论以及我自己的build议:

“杰伊剧情”和迈克尔·贝利本质上是一样的。 QWINSTAQUSER都是QUERY实用程序的快捷方式,分别用于SESSIONUSER函数。 这些可以使用/computer:参数在远程计算机上运行,​​因此可以在实际连接之前检查系统。

jas的build议本身并不是对你有用,因为它要求你已经连接到远程系统,并且在你这样做之前你想要检查它。 但是,如果您使用PsExec(由Michael Baileybuild议)运行它,则可以完成您要执行的操作。 有更好的方法来完成你所需要的,使用内置工具以及Microsoft提供的其他工具。

如果你已经有PsTools,我会build议尝试PsLoggedOn而不是用PsExec和Netstat。 PsLoggedOn可以远程运行,并显示RDP会话和远程文件系统或registry连接。 远程运行PsLoggedOn的语法是:

 PsLoggedOn \\servername 

其他有用的资源:

SS64
PsLoggedOn
查询用户/查询者
查询会话/ Qwinsta
PSEXEC
用netstat

的TechNet
PsTools

从命令提示符。

请注意在ESTABLISHED状态的端口3306上侦听的TCP本地地址为外部地址192.168.2.205

 C:\Users\foo>netstat -anp tcp Active Connections Proto Local Address Foreign Address State TCP 0.0.0.0:135 0.0.0.0:0 LISTENING TCP 0.0.0.0:445 0.0.0.0:0 LISTENING TCP 0.0.0.0:554 0.0.0.0:0 LISTENING TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING ... TCP 10.0.0.248:3306 192.168.2.205:48156 ESTABLISHED ... TCP 192.168.130.1:139 0.0.0.0:0 LISTENING TCP 192.168.233.1:139 0.0.0.0:0 LISTENING