Windows-Server-2012

使斷開的 RDP 會話保持活動狀態

  • January 24, 2018

是否有可能在實際斷開連接時將 RDP 會話保持為“活動”?我們在虛擬機上執行 windows-server-2012。

背景:我們在該機器上自動執行 GUI 測試。

  • 如果有人通過 RDP 登錄(並且什麼都不做),則測試成功
  • 如果 RDP 會話斷開連接,則測試會在模擬鍵盤敲擊時失敗

所以我想這與會話處於活動狀態或斷開連接有關。

:::::::::::::::::::::::::::::::::::::::::
:: 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 會話斷開連接,但只要沒有螢幕保護程序或螢幕鎖定,您的應用程序就應該能夠執行完成。

引用自:https://serverfault.com/questions/893890