如何保持 RDP 会话活跃?
是的,我知道这个问题以前有人问过但是,我读过和尝试过的所有解决方案在域级设置受到严格控制,甚至机器级组策略也被部分锁定的锁定环境中都不起作用。
以下是我的具体情况。我的工作站是 Windows 10,我经常通过 VPN 通过 RDP 连接到 20 英里外的另一台 Windows 10 机器。此 RDP 会话会在很短的无活动时间内自动关闭,大概 30 分钟左右。我无法更改该持续时间,我没有权限,我的 IT 人员也不会更改它。
这是我在 30 分钟内没有通过 RDP 在远程 PC 内主动执行任何操作后,被当权者强制关闭时收到的消息:
您的远程桌面服务会话已结束,因为远程计算机未收到您的任何输入。
我尝试了以下操作,但没有成功:
- 如何从客户端保持 RDP 会话处于活动状态?
- https://honeywellaidc.force.com/supportppr/s/article/How-to-prevent-RDP-connections-from-disconnecting
- https://stackoverflow.com/questions/5528412/keeping-remote-desktop-session-alive
- https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/query-session
- https://serverfault.com/questions/758930/how-can-i-view-active-remote-connections-rdp-to-a-windows-- 服务器
- caffeine.exe(同时在我的本地电脑和远程电脑上)
- mousejiggler.exe(同时在我的本地电脑和远程电脑上)
我只是想让我的 RD 会话保持活动状态,直到我故意断开它。一定有某种方法、某种黑客手段、某种工具,某物这确实有效。
请帮忙。提前致谢。
Local machine: Win10 Pro 1809
Remote machine (physical hardware, not VM): Win10 Enterprise 1909
答案1
以下脚本使用免费的 自动热键。
该脚本每 10 分钟(600000 毫秒)检查一次计算机是否处于非活动状态。然后,它会按标题搜索所有远程桌面窗口,并将每个 RDP 窗口设置为活动窗口并发送按键Enter输入。
SetTitleMatchMode, 2
Loop
{
if A_TimeIdle >= 600000
{
WinGet, id, List, Remote Desktop Connection
Loop, %id%
{
this_id := id%A_Index%
WinGetTitle, this_title, ahk_id %this_id%
TrayTip, Found RDP session, %this_title%, 2, 17
ControlSend , , {Enter}, ahk_id %this_id%
}
}
Sleep, 600000
}
return
此脚本已在 Windows 10 计算机上通过 RDP 连接到 Windows 10 VM 进行测试。由于某些未知原因,AutoHotkey 无法重新最小化 RDP 窗口并重新激活之前活动的窗口,因此 RDP 保持活动状态。
安装 AutoHotKey 后,将上述文本放入一个.ahk
文件中并双击进行测试。您可以通过右键单击托盘栏中的绿色 H 图标并选择退出来停止脚本。要让它在登录时运行,请将其放在 的启动组中
C:\Users\USER-NAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
。
答案2
您可以轻松使会话保持活动状态:
Alive.js脚本:
var WshShell = WScript.CreateObject("WScript.Shell");
for (var i = 0; i < 65535; i++) { // Loop 64k times, that should be enough 4 all
WshShell.SendKeys('{SCROLLLOCK}');
WshShell.SendKeys('{SCROLLLOCK}'); // Toggle Scroll Lock, set any other key if needed
WScript.Sleep(300000); // Wait 5 minutes or whatever time you want (in ms)
}
Active.bat文件运行脚本:
@color A
@echo Refresh Active.
@Cscript.exe Alive.js
@timeout 1
启动.bat就完成了。
答案3
让我恼火的是,远程桌面会话几分钟后就会根据公司设定的政策锁定屏幕。我在以下网址找到了意想不到的解决方案:此评论。它是您在远程机器上运行的简单 AutoHotkey 脚本。
#SingleInstance, force
#Persistent
;in milliseconds - so 30000 would be every 30 seconds
SetTimer, NoSleep, 240000
Return
NoSleep:
DllCall( "SetThreadExecutionState", UInt,0x80000003 )
Return
答案4
它应该是:
计算机配置/管理模板/Windows 组件/远程桌面服务/远程桌面会话主机/会话时间限制
但这不是默认配置的,这意味着有人配置了它,也就是说,如果他们发现你正在规避这个政策,他们可能会不喜欢它