操作系统

Windows 11 24H2 → 25H2 无人值守就地升级(远程桌面场景)

hadeschan · 10月21日 · 2025年 本文共4907个字 · 预计阅读17分钟 115次已读

适用对象:

  • 源系统:Windows 11 version 24H2
  • 介质:Windows 11 version 25H2 ISO(Consumer editions, x64, zh-CN
  • 场景:通过远程桌面(RDP)进行无人值守/静默升级

概述

  • 使用 setup.exe 命令行完成兼容性只扫不装静默分阶段部署
  • 重启前创建开机即启用 RDP的计划任务,避免升级后无法远程连接。
  • 若启用 BitLocker,临时禁用保护器(限两次重启),降低切换 SafeOS/新 OS 风险。
  • 通过 C:\$WINDOWS.~BT\Sources\Panther 与自定义日志目录跟踪与排错。

重要:远程场景下,务必在最后一次重启之前完成所有准备(RDP 自恢复、BitLocker 保护器、日志路径、计划任务)。重启后短时间内无法交互,准备不充分容易造成“远程失联”。

先决条件

  • 本地管理员身份运行 CMD 或 PowerShell(建议提升权限)。
  • 目标主机为静态 IP;网络连通正常。
  • 可用磁盘空间 ≥ 25 GB。
  • 暂停/退出第三方杀软、磁盘防护(如有)。
  • 25H2 ISO 已挂载(以下示例以 E: 为盘符)。

步骤 1:兼容性扫描(只扫不装)

CMD(推荐):

E:\setup.exe /Auto Upgrade /DynamicUpdate Disable ^
  /Compat ScanOnly /Quiet /NoReboot ^
  /CopyLogs "C:\CompatScanLogs"
echo ExitCode=%ERRORLEVEL%

期望结果:ExitCode=0C:\CompatScanLogs\setuperr.log 无阻断错误。扫描不会重启,仅输出兼容性结果。

PowerShell(如需):

Start-Process -FilePath "E:\setup.exe" `
  -ArgumentList '/Auto Upgrade /DynamicUpdate Disable /Compat ScanOnly /Quiet /NoReboot /CopyLogs "C:\CompatScanLogs"' `
  -Wait -PassThru

提示:PowerShell 参数中避免使用含 $ 的路径(如 C:\$UpgradeLogs),可能被变量展开。改用 C:\CompatScanLogs / C:\UpgradeLogs 等。

步骤 2:为重启后的 RDP 自恢复创建计划任务

提升权限的 PowerShell中执行:

$ErrorActionPreference = "SilentlyContinue"

# 写入开机自执行脚本
$script = @'
$ErrorActionPreference="SilentlyContinue"
New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name fDenyTSConnections -Value 0 -PropertyType DWord -Force | Out-Null
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
Set-Service TermService -StartupType Automatic
Start-Service TermService
Start-Sleep 30
"POST-UPGRADE-OK $(Get-Date -Format s)" | Out-File -Encoding UTF8 C:\post-upgrade-rdp.ok
'@
$path = 'C:\ProgramData\PostUpgradeRDP.ps1'
Set-Content -Path $path -Value $script -Encoding UTF8

# 若任务已存在则先移除
$tn = "PostUpgradeRDP"
$exists = Get-ScheduledTask -TaskName $tn -ErrorAction SilentlyContinue
if ($exists) { Unregister-ScheduledTask -TaskName $tn -Confirm:$false }

# 注册:开机即以 SYSTEM 最高权限运行
$act  = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -File `"$path`""
$trig = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName $tn -Action $act -Trigger $trig -RunLevel Highest -User "SYSTEM" | Out-Null

步骤 3:BitLocker(如已启用)临时禁用保护器

manage-bde -status C:
manage-bde -protectors -disable C: -RebootCount 2

升级完成后重新启用:

manage-bde -protectors -enable C:

步骤 4:静默分阶段部署(不立刻重启)

管理员 CMD:

E:\setup.exe /Auto Upgrade /DynamicUpdate Disable ^
  /Quiet /NoReboot ^
  /CopyLogs "C:\UpgradeLogs" /EULA accept

观察是否仍在进行:

tasklist | findstr /i "setup.exe setupprep.exe setuphost.exe"

未指定 /CopyLogs 时,默认日志位置:C:\$WINDOWS.~BT\Sources\Panther\

步骤 5:受控重启并完成升级

shutdown /r /t 5 /c "Windows 11 25H2 in-place upgrade"

步骤 6:升级后验证与恢复

  1. 版本确认:winver 显示 Windows 11 25H2(内部版本 26100.x)。
  2. RDP 可用:存在 C:\post-upgrade-rdp.ok
  3. BitLocker:如前步曾禁用保护器,执行:
    manage-bde -protectors -enable C:
  4. 清理(可选):
    Unregister-ScheduledTask -TaskName "PostUpgradeRDP" -Confirm:$false
    Remove-Item C:\ProgramData\PostUpgradeRDP.ps1 -Force

故障排除

常见返回码

  • 0:成功(如 ScanOnly 或分阶段完成无阻断)。
  • 某些环境下 PowerShell 启动子进程可能见到 0xC1900110;若 Panther 日志无阻断且安装流程推进,可视为非致命,以 setupact.log / setuperr.log 为准。

日志位置

  • 自定义:/CopyLogs "C:\UpgradeLogs"
  • 默认:C:\$WINDOWS.~BT\Sources\Panther\

附录:一键式示例(管理员 CMD)

A. 只扫不装(可选)

E:\setup.exe /Auto Upgrade /DynamicUpdate Disable ^
  /Compat ScanOnly /Quiet /NoReboot ^
  /CopyLogs "C:\CompatScanLogs"

B. RDP 计划任务与 BitLocker

powershell -NoProfile -ExecutionPolicy Bypass -Command ^
  "$e='SilentlyContinue';$ErrorActionPreference=$e;" ^
  "$s=@'
$ErrorActionPreference='SilentlyContinue'
New-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnections -Value 0 -PropertyType DWord -Force|Out-Null
Enable-NetFirewallRule -DisplayGroup 'Remote Desktop'
Set-Service TermService -StartupType Automatic
Start-Service TermService
Start-Sleep 30
'POST-UPGRADE-OK ' + (Get-Date -Format s) | Out-File -Encoding UTF8 C:\post-upgrade-rdp.ok
'@;Set-Content C:\ProgramData\PostUpgradeRDP.ps1 $s -Encoding UTF8;" ^
  "$tn='PostUpgradeRDP';$t=Get-ScheduledTask -TaskName $tn -ErrorAction $e; if($t){Unregister-ScheduledTask -TaskName $tn -Confirm:$false};" ^
  "$act=New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-NoProfile -ExecutionPolicy Bypass -File ""C:\ProgramData\PostUpgradeRDP.ps1""';" ^
  "$tr=New-ScheduledTaskTrigger -AtStartup; Register-ScheduledTask -TaskName $tn -Action $act -Trigger $tr -RunLevel Highest -User 'SYSTEM'|Out-Null

manage-bde -protectors -disable C: -RebootCount 2"

C. 分阶段部署并稍后手动重启

E:\setup.exe /Auto Upgrade /DynamicUpdate Disable ^
  /Quiet /NoReboot ^
  /CopyLogs "C:\UpgradeLogs" /EULA accept

:: 可选:观察进程
tasklist | findstr /i "setup.exe setupprep.exe setuphost.exe"

:: 准备就绪后发起受控重启
shutdown /r /t 5 /c "Windows 11 25H2 in-place upgrade"

升级完成后收尾:

manage-bde -protectors -enable C:
powershell -NoProfile -ExecutionPolicy Bypass -Command "Unregister-ScheduledTask -TaskName 'PostUpgradeRDP' -Confirm:\$false; Remove-Item C:\ProgramData\PostUpgradeRDP.ps1 -Force"

总结

远程桌面条件下从 24H2 无人值守升级到 25H2 的关键点:先行兼容性扫描与日志定位、重启前布置 RDP 自恢复、BitLocker 限次停护、用 /Quiet /NoReboot 分阶段部署并在确认无误后再受控重启。









0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!