适用场景:散热不佳的 Win10 迷你主机 / 低功耗服务器 / 长期挂机设备
主要目的:有人用时性能全开,无人用时自动节能降温
一、需求背景
在家庭或小型办公环境中,使用 Windows 10 迷你主机(如 N100)作为轻量服务器时,常面临以下矛盾:
- ❗ 散热瓶颈:被动散热或风扇较小,高负载下积热严重。
- ❗ 资源浪费:大部分时间处于空闲状态,无需高性能模式。
- ❗ 会话残留:远程断开后,会话未注销导致后台程序持续占用资源。
但这类设备通常存在:
- ❗ 散热较差
- ❗ 长时间运行发热明显
- ❗ 大多数时间处于空闲状态
🎯 优化目标
- 智能切换电源:RDP 登录瞬间切至【平衡模式】,断开延迟后自动切至【节能模式】。
- 自动清理会话:远程断开超过 1 小时,强制断开会话,释放资源或切至【节能模式】。
| 场景 | 行为 |
|---|---|
| 通过 RDP 登录 | 自动切换为【平衡模式】,断开10分钟后自动切至【节能模式】 |
| 自动清理会话 | 远程RDP断开超过 1 小时,强制断开会话,切至【节能模式】 |
二、实现思路
采用 “事件触发 + 定时轮询 + 组策略限制” 三位一体方案:
| 机制 | 作用 | 响应速度 |
|---|---|---|
| 事件触发 | 监听 RDP 登录事件 (Event ID 1149),立即切换电源模式 | ⚡ 秒级响应 |
| 定时轮询 | 每5分钟检测会话状态,若断开超过设定时间(如10分钟),切换为节能模式 | ⏱ 延迟执行 |
| 组策略 | 限制非活动会话时长,防止“假断开”导致的资源占用 | 🛡️ 系统级兜底 |
三、核心脚本
1. 定时检测脚本
路径:
# 作用:每5分钟运行,检测是否有人连接。若断开超过 10 分钟,切换到“节能模式”。
C:\Scripts\power_auto.bat
将第5行 Administrator 修改成自己的实际用户名
@echo off
setlocal enabledelayedexpansion
:: ===== CONFIG =====
set USERNAME_TARGET=Administrator
set BALANCED=381b4222-f694-41f0-9685-ff5bb260df2e
set SAVER=a1841308-3541-4fab-bc81-f71556f20b4a
set TIMEOUT_MIN=10
set STATE_FILE=C:\Scripts\last_active.txt
set LOG_FILE=C:\Scripts\power.log
:: ===== TIME =====
for /f %%a in ('powershell -command "[int][double]::Parse((Get-Date -UFormat %%s))"') do set NOW=%%a
:: ===== CHECK RDP =====
set ACTIVE=0
for /f "skip=1 tokens=1,2,3,4" %%a in ('query session') do (
echo %%a %%b %%c %%d | findstr /i "rdp-tcp" >nul
if not errorlevel 1 (
echo %%a %%b %%c %%d | findstr /i "%USERNAME_TARGET%" >nul
if not errorlevel 1 (
set ACTIVE=1
)
)
)
:: ===== CURRENT MODE =====
for /f "tokens=3" %%i in ('powercfg /getactivescheme') do set CURRENT=%%i
:: ===== ACTIVE → BALANCED =====
if "!ACTIVE!"=="1" (
echo %NOW% > "%STATE_FILE%"
if /i not "!CURRENT!"=="%BALANCED%" (
powercfg /setactive %BALANCED%
echo [%date% %time%] ACTIVE -> BALANCED >> "%LOG_FILE%"
)
exit /b 0
)
:: ===== IDLE CHECK =====
if not exist "%STATE_FILE%" (
echo %NOW% > "%STATE_FILE%"
exit /b 0
)
set /p LAST=<"%STATE_FILE%"
set /a DIFF=(NOW-LAST)/60
if %DIFF% GEQ %TIMEOUT_MIN% (
if /i not "!CURRENT!"=="%SAVER%" (
powercfg /setactive %SAVER%
echo [%date% %time%] IDLE %TIMEOUT_MIN% min -> POWER SAVER >> "%LOG_FILE%"
)
)
exit /b 0
2. 登录触发脚本
路径:
# 作用:检测到远程登录时,立即切换到“平衡模式”。
C:\Scripts\power_on_login.bat
@echo off
powercfg /setactive 381b4222-f694-41f0-9685-ff5bb260df2e
echo [%date% %time%] RDP LOGIN -> BALANCED >> C:\Scripts\power.log
四、任务计划配置
1. 创建脚本目录
mkdir C:\Scripts
2. 定时任务(每5分钟执行)
schtasks /create ^
/tn "PowerAutoCheck" ^
/tr "C:\Scripts\power_auto.bat" ^
/sc minute /mo 5 ^
/ru SYSTEM ^
/f
3. RDP 登录触发任务
schtasks /create ^
/tn "PowerOnRDPLogin" ^
/tr "C:\Scripts\power_on_login.bat" ^
/sc onevent ^
/ec Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational ^
/mo "*[System[(EventID=1149)]]" ^
/ru SYSTEM ^
/f
⚠️ 如果事件不生效,执行:
wevtutil sl Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational /e:true
4. RDP 配置组策略(会话超时限制)
目的:防止用户连接后长时间不操作(挂机),导致系统无法进入深度节能状态。
依次展开,路径:
本地组策略编辑器
→ 计算机配置
→ 管理模板
→ Windows 组件
→ 远程桌面服务
→ 远程桌面会话主机
→ 会话时间限制
“设置活动的远程桌面服务会话的时间限制”,选择 “已启用”,选择 “1 小时”。

💡 实际运行逻辑:
- 空闲检测:无论 RDP 是否连接,只要检测到用户 1 小时内无任何操作(鼠标/键盘),系统将强制断开桌面连接。
- 会话保留:此时仅断开图形界面,用户会话并未注销,后台程序继续运行(内存仍被占用)。
- 脚本接力:
- 断开5分钟后,
power_auto.bat脚本会检测到“无活动会话”。 - 脚本开始计时,10 分钟后(若仍未重连),自动将电源计划切换为 【节能模式】。
- 断开5分钟后,
五、运行效果与验证
🔍 验证方法
- 查看当前电源模式:
在 CMD 中输入powercfg /getactivescheme,确认当前是“平衡”还是“节能”。 - 查看会话状态:
输入query session,观察断开后的会话是否在 1 小时后消失。 - 查看日志记录:
打开C:\Scripts\power.log,应看到类似记录:

🟢 预期行为
- 登录时:几乎无感,系统瞬间恢复平衡模式,保证操作流畅。
- 断开后:
- 5 分钟内:保持平衡模式(防止短暂断开频繁切换)。
- 5 分钟后:自动切换至节能模式,降低功耗和发热。
- 1 小时后:组策略介入,强制断开会话,清理后台。
🎯 一句话总结
👉 “有人用就全力跑,没人用就自动降功耗”