当 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 会话的连接,但只要没有屏幕保护程序或屏幕锁定,您的应用程序就应该能够运行完成。