远程桌面断开连接后恢复控制台会话?

Sof*_*Kng 9 windows remote-desktop connection console

在远程桌面会话断开连接后,是否可以(通过组策略等)自动将控制台会话恢复到 Windows 8.1 PC?

我知道您可以在 RDP 会话期间运行命令“tscon 1 /dest:console”来断开自己的连接并重新连接控制台会话,但是是否可以自动进行这种操作?

小智 5

创建一个包含以下内容的批处理文件,名称类似于 restore_console.bat:

@echo off
set LOG_FILENAME=%TEMP%\restore_console_log.txt
echo Script executed at %TIME% > %LOG_FILENAME%
echo qwinsta: >> %LOG_FILENAME%
qwinsta >> %LOG_FILENAME%

echo Checking for pending connection... >> %LOG_FILENAME%
for /f %%i in ('qwinsta ^| findstr /r /C:"^ [ ]*[0-9][0-9]*  Disc"') do (
echo Pending connection detected, finishing. >> %LOG_FILENAME%
goto end
)

echo Checking for disconnection... >> %LOG_FILENAME%
for /f "tokens=2" %%i in ('qwinsta ^| findstr /r /I /C:"^ [ ]*[^ ][^ ]* [ ]*[0-9][0-9]*  Disc"') do (
echo Redirecting session id %%i >> %LOG_FILENAME%
tscon %%i /dest:console /v >> %LOG_FILENAME%
goto end
)

:end
Run Code Online (Sandbox Code Playgroud)

在任务计划程序中,使用以下设置创建一个新任务:

  • 常规 -> 无论用户是否登录都运行,以最高权限运行。
  • 触发器 -> 新建 -> 与用户会话断开连接时,任何用户,与远程计算机的连接
  • 操作 -> 新建 -> 启动程序 -> 程序/脚本:<您的批处理文件>
  • 其他一切默认。

实施注意事项:

  • 这是通过通过 findstr 正则表达式解析 qwinsta 输出来工作的,即从此处的第 3 行中提取 ID:

     SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE 
    >services                                    0  Disc                        
                       ######                    2  Disc                        
     console                                     7  Conn                        
     #############...                        65536  Listen                      
     rdp-tcp                                 65537  Listen                      
    
    Run Code Online (Sandbox Code Playgroud)
  • 中间块是必要的,因为出于某种原因计划任务在连接和断开时执行。发生这种情况时,输出将采用以下形式:

     SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE 
    >services                                    0  Disc                        
                       ######                    2  Disc                        
                                                 3  Disc                        
     console                                     8  Conn                        
     #############...                        65536  Listen                      
     rdp-tcp                                 65537  Listen                      
    
    Run Code Online (Sandbox Code Playgroud)

    因此,我们从第 4 行寻找模式的线条。

  • 它将日志信息转储到 %TEMP%\restore_console_log.txt,这不是必需的,但在脚本不起作用时很有用。如果没有日志记录,它将只有几行。

这在一台 Windows 8.1 机器上对我有用 - 我不知道它是否可以在全球推出。