保持断开的 RDP 会话处于活动状态

保持断开的 RDP 会话处于活动状态

当 RDP 会话实际断开连接时,是否有可能将其保持为“活动”状态?我们在虚拟机上运行 windows-server-2012。

背景:我们正在该机器上自动执行 GUI 测试。

  • 如果有人通过 RDP 登录(并且不执行任何操作),则测试成功
  • 如果 RDP 会话断开连接,则测试将在模拟键盘敲击的地方失败

所以我猜测这与会话处于活动状态或断开连接有关。

答案1

:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
@echo off
CLS 
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================

:checkPrivileges 
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges ) 

:getPrivileges 
if '%1'=='ELEV' (shift & goto gotPrivileges)  
ECHO. 
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation 
ECHO **************************************

setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs" 
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs" 
"%temp%\OEgetPrivileges.vbs" 
exit /B 

:gotPrivileges 
::::::::::::::::::::::::::::
:START
::::::::::::::::::::::::::::
setlocal & pushd .
::::::::::::::::::::::::::::
::Get sessionID for current user, switch context to console.
::::::::::::::::::::::::::::
FOR /F "skip=1 tokens=3 usebackq" %%X in (`query session %USERNAME%`) DO tscon %%X /dest:console


START CALC.EXE

GOTO :EOF

只需将其保存为远程系统上的 .bat,然后将“START CALC.EXE”行替换为您实际想要运行的可执行文件即可。当您准备好运行测试时,请通过 RDP 进入系统并运行批处理文件。

此脚本首先会获取管理员权限,然后将当前用户会话从 RDP 切换到控制台。您将断开与 RDP 会话的连接,但只要没有屏幕保护程序或屏幕锁定,您的应用程序就应该能够运行完成。

相关内容