之前写过Windows 11 更新后 RDP Wrapper 无法启动 Listener(TermService 服务丢失 / Not listening)完整修复指南,这能恢复因Windows 11 更新后RDP无法启动导致远程连接启动不了的情况。但是,如果人不在电脑旁,电脑在闲时自动更新了,就会导致无法远程连接了。
今天我们就来写一个脚本自动判断来执行上面的步骤。
创建reg注册表文件
这里就不重复了,将前面文章中的reg内容保存到本地C:\Program Files\RDP Wrapper\rdp.reg(这里RDP安装和脚本都放到这个目录中)。
编写脚本
这里创建PowerShell 脚本(PowerShell脚本有时比批处理更可靠)保存为C:\Program Files\RDP Wrapper\FixRDP.ps1,
脚本逻辑
- 检查远程桌面端口
3389是否开放 - 若端口开放,清空标志位
- 若端口未开放:
- 执行 reg 注册脚本
- 重启 TermService 服务
- 再次检查3389端口。如果失败,检查标志位,仅重启一起。
完整脚本
# =============================================
# FixRDP - Windows 11 更新后自动修复 RDP
# 需要以管理员权限运行
# =============================================
$regFile = "C:\Program Files\RDP Wrapper\rdp.reg" # ← 修改成你的 rdp.reg 实际路径
$flagFile = "C:\Program Files\RDP Wrapper\need_reboot.flag" # 重启标志文件
function Test-Port3389 {
try {
$listener = Get-NetTCPConnection -LocalPort 3389 -ErrorAction SilentlyContinue
if ($listener -and $listener.State -eq 'Listen') {
return $true
}
return $false
} catch {
return $false
}
}
# 检查管理员权限
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Host "请以管理员权限运行此脚本!" -ForegroundColor Red
Read-Host "按 Enter 键退出"
exit 1
}
Write-Host "正在检查 3389 端口..." -ForegroundColor Cyan
if (Test-Port3389) {
Write-Host "3389 端口已在监听,RDP 正常。" -ForegroundColor Green
if (Test-Path $flagFile) { Remove-Item $flagFile -Force }
Read-Host "按 Enter 键退出"
exit 0
}
Write-Host "3389 端口未开启,开始修复..." -ForegroundColor Yellow
# 1. 导入注册表
if (Test-Path $regFile) {
Write-Host "正在导入 rdp.reg ..." -ForegroundColor Cyan
reg import $regFile | Out-Null
Start-Sleep -Seconds 2
} else {
Write-Host "错误:未找到 rdp.reg 文件!" -ForegroundColor Red
Read-Host "按 Enter 键退出"
exit 1
}
# 2. 重启 TermService 服务
Write-Host "正在重启 Remote Desktop Services..." -ForegroundColor Cyan
Stop-Service -Name TermService -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 3
Start-Service -Name TermService -ErrorAction SilentlyContinue
Start-Sleep -Seconds 3
# 3. 最终检查
if (Test-Port3389) {
Write-Host "修复完成!3389 端口已正常监听。" -ForegroundColor Green
if (Test-Path $flagFile) { Remove-Item $flagFile -Force }
} else {
Write-Host "修复可能未完全成功,准备处理重启..." -ForegroundColor Yellow
if (Test-Path $flagFile) {
Write-Host "已执行过一次重启,本次不再自动重启。" -ForegroundColor Red
Write-Host "请手动重启服务器或检查其他问题。" -ForegroundColor Red
} else {
# 创建标志文件并重启
"Reboot triggered at $(Get-Date)" | Out-File -FilePath $flagFile -Force
Write-Host "即将自动重启服务器(仅执行一次)..." -ForegroundColor Magenta
Start-Sleep -Seconds 5
Restart-Computer -Force
}
}
Read-Host "操作完成,按 Enter 键退出"
创建开机启动
这里需要管理员权限,而且是启动未登录时调用,未来靠谱的执行,这里使用任务计划程序来执行。
- 按 Win + S 搜索 → 输入 任务计划程序 → 打开
- 右侧点击 创建任务(不是基本任务)

- 常规 选项卡:
- 名称:FixRDP-AutoRepair
- 不管用户是否登录都要运行
- 勾选 以最高权限运行
- 配置为:Windows 10

- 触发器 选项卡 → 新建 → 启动时

- 操作 选项卡 → 新建:
- 程序/脚本:powershell.exe
- 参数:-NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\RDP Wrapper\FixRDP.ps1"

- 条件 选项卡:勾选所有“仅在以下网络可用时启动”。网络未启动,3389端口会检查失败会出现误判。

- 设置 选项卡:勾选 如果任务失败,重新启动

- 确定 → 输入管理员密码保存

测试
- 按
Win + R→regedit - 删除
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TermService项,这时RDP服务就会有问题了。 - 重启电脑,大概率会再自动重启一次。
- 用另一台电脑或手机使用RDP连接就可以了。
评论区