自动跟踪 RDP 会话

Shadowing RDP session automatically

我想创建一个 powershell 脚本。我们的支持公司之一需要不时连接到我们的服务器以进行工作,如果他们的工作正常,我需要连接他们的 RDP 会话以观察他们。

服务器:MS Server 2012 R2 x64

情况是我想创建一个脚本;

1- 检查服务器的当前会话 2- 查找来自当前以 RDP 身份登录的用户名(我将给他们连接的用户名)的特定会话 ID 3- 当我从用户名中提取正确的会话 ID(这意味着他当前在线并已连接)时,我想在没有 prompting/requesting 他们批准的情况下隐藏 his/her 会话。

是的,我可以单独执行这些操作,但需要寻找 powershell 脚本或类似的东西。在一次尝试中,我想隐藏 rdp 以更正会话,如果 he/she 不在线,我希望系统 return 向我发送一条信息消息,表明用户名当前不在线。

可能吗?

谢谢&问候 梅丽赫

If memory serves PoSh 本身不支持查询 RDP 会话(除非使用 RDS 代理,但我在这里可能是错的)但您可以通过 query session

轻松做到这一点

我现在无法对其进行测试,但像这样应该可以解决问题:

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

如果您知道,您甚至可以直接使用用户名调用它。

使用类似

的方法可以轻松完成对会话的跟踪
mstsc /v:"$srv" /shadow:"$id" /control /noconsentprompt

我没有对此进行测试,因此可能需要进行一些调整,但可能的起点可以是

$userSessions = query session user01 /SERVER:server01 | Select-Object -skip 1 | ForEach-Object{$_.Split(' ',[System.StringSplitOptions]::RemoveEmptyEntries)}
$sessionId = $userSessions[2]

mstsc /v:"$srv" /shadow:"$sessionId" /control /noconsentprompt

当然,如果 运行 来自本地服务器,您可以省略 /SERVER:XXX 参数。

希望这可以帮助您入门。