Powershell:通过终端服务 (RDP) 登录,在控制台会话中运行应用程序

Powershell:通过终端服务 (RDP) 登录,在控制台会话中运行应用程序

如果我使用远程桌面(终端服务)连接到办公室电脑,我可以在 Powershell 中看到我有一个 RDP 会话:

PS E:\> QWINSTA
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>rdp-tcp#13        berndw                    2  Active
 console                                     4  Conn
 rdp-tcp                                 65537  Listen

但我可以看到控制台会话可用。我知道这是因为我可以使用 VNC 登录到同一台 PC 并看到我已登录到控制台会话:

PS E:\> QWINSTA
 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE
 services                                    0  Disc
>console           berndw                    2  Active
 rdp-tcp                                 65537  Listen

什么都没有改变,我的所有窗口仍然打开,甚至是我运行 QWINSTA 的 powershell 窗口,我可以再次移动到 RDP,窗口仍然在那里,我可以移回 VNC,它们仍然在那里,也就是说,用户上下文在从终端服务会话到控制台会话的来回切换中仍然存在。

太棒了。然后呢?

好吧,我想在使用 RDP 登录时在控制台会话中运行 Windows 应用程序!如果需要,我很乐意响应登录提示进行会话切换。这可能吗?如果可以,该怎么做?Powershell 中是否有某种方法可以发出此请求,例如使用Start-Process启动控制台终端中启动的进程(启动后很乐意切换回来)。

确实有办法做到这一点。它的运行方式如下:

  1. 关闭我的 RDP 客户端
  2. 使用 VNC 客户端连接
  3. 登录
  4. 再次连接VNC客户端
  5. 启动进程myapp
  6. 关闭 VNC
  7. 与 RDP 客户端连接

为什么这还不够好?因为这样做速度非常慢,而且非常令人沮丧。

步骤 4 很有趣,我应该解释一下,但我也很想学习。显然,在步骤 3 中,当我登录时,Windows(在我的情况下是 Windows 10)注意到终端服务会话 (RDP) 关闭该会话并打开控制台会话,在此切换中,主机上的 Ultra VNC 服务器断开连接。所以我必须重新连接,当我这样做时,我看到我的窗口与原来一样(所有窗口都从 RDP 会话愉快地移动到控制台会话)。然后,当我关闭 VNC 客户端并再次连接 RDP 时,我的所有窗口再次正常运行。

那么为什么要这样做呢?我承认这与如何做的问题无关,但为了满足您的好奇心,原因很简单,涉及我需要使用的一些软件,这些软件只能在控制台会话中正常启动,但 VNC 显然无法使用(它太慢了,而且我相信主机后面的防火墙限制了它,以阻止使用并鼓励使用 RDP - 我无法控制这一点,情况很简单,RDP 就像我在我的 PC 上一样,VNC 需要几秒钟来回显击键,并需要 10 秒来呈现桌面 - 正如我所说的,我无法控制这一点,不在我的影响范围内)。

因此,目前我只能通过一个令人沮丧的耗时过程来启动此应用程序。如果我能以某种方式从 RDP 会话运行它,但是控制台会话可以让这一切消失。即使这会让我退出 RDP 并且我必须重新登录,但它比当前的 VNC 解决方案更省时,也更省心。而且,我也不能使用 Teamviewer、LogMeIn 或 Nomachine 或连接到控制台会话的任何其他程序 - 再次不受我的控制(仅支持/允许 RDP 和 VNC)

答案1

使用标准管理员权限无法正式实现这一点,但是psexec可以提升自身权限以拥有 SeTcbPrivilege 并在任何会话中创建属于任何桌面的进程。(如果没有会话附加到控制台并且当前显示 Winlogon,那么您可能也需要该-x选项。)

psexec -d -e -i -x notepad

还应该可以强制移动你的从 RDP 到控制台的会话使用tscon

psexec -e -s tscon 2 /dest:console

相关内容