自动隐藏RDP会话

时间:2018-04-28 18:12:26

标签: powershell server remote-server remote-desktop

我想创建一个powershell脚本。我们的一家支持公司需要不时连接到我们的服务器来完成他们的工作,我需要连接他们的RDP会话,如果他们的行为没问题就可以观看它们。

服务器:MS Server 2012 R2 x64

案例是我想创建一个脚本;

1-检查服务器的当前会话 2-查找特定会话ID来自当前以RDP身份登录的用户名(我将为其提供连接) 3-当我从用户名中提取正确的会话ID时(这意味着他当前在线并已连接),我想在不提示/请求批准的情况下隐藏他/她的会话。

是的,我可以单独执行这些操作,但查看PowerShell脚本或类似的内容。在一次尝试中,我想影响rdp以纠正会话,如果他/她不在线,我希望系统向我返回一个信息消息,即用户名当前不在线。

有可能吗?

感谢和安培;问候 Melih

1 个答案:

答案 0 :(得分:1)

如果内存服务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参数。

希望这可以帮助您入门。