通过局域网 sc 临时服务远程升级win11(强穿透、无死锁)
为了提高效率,我们可以直接在你的控制端计算机上创建一个 主控批处理脚本(部署脚本)。这个脚本会通过局域网自动完成以下全套流程:
- 建立共享连接:连接存有 ISO 的源服务器。
- 打通目标机管道:连接本次测试的目标计算机
F201900817(注意防火墙拦截)。 - 远程传输:将远程共享中的 ISO 文件和优化后的静默升级脚本高速复制到目标机的
D:\Temp目录。 - 强力触发:使用最稳妥的
sc服务控制命令,在目标机后台彻底隐形启动升级。
第一步:在控制端创建升级批处理脚本
请先在你的控制端电脑的某个地方(比如 F:\winup\3\),将之前优化好的 setupconfig.ini 版脚本保存为 local_upgrade_final.bat。
特别注意:由于你换了新的测试目标机、新密码以及换了新的 ISO 文件名,请确保 local_upgrade_final.bat 内部填写的 ISO 路径已更新。可以直接复制以下针对新环境修正后的脚本内容:
:: ==================================================
:: 保存为 local_upgrade_final.bat (供传输使用)
:: ==================================================
@echo off
chcp 936 >nul
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 0 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:: 核心变更:更新为本次测试的全新 ISO 名称
set ISO_PATH=D:\Temp\Win11_26200.9445_noTPM_20260918.iso
if not exist "C:\win11_stage" mkdir "C:\win11_stage"
powershell -Command "[System.IO.File]::WriteAllText('C:\win11_stage\autounattend.xml', '<?xml version=''1.0'' encoding=''utf-8''?><unattend xmlns=''urn:schemas-microsoft-com:unattend''><settings pass=''windowsPE''><component name=''Microsoft-Windows-Setup'' processorArchitecture=''amd64'' publicKeyToken=''31bf3856ad364e35'' language=''neutral'' versionScope=''nonSxS''><UserData><AcceptEula>true</AcceptEula></UserData></component></settings></unattend>')"
(
echo [WindowsSetup]
echo Auto=Upgrade
echo Quiet=
echo NoReboot=
echo DynamicUpdate=Disable
echo ShowOOBE=None
echo Compat=IgnoreWarning
echo Unattend=C:\win11_stage\autounattend.xml
) > "C:\win11_stage\setupconfig.ini"
powershell -Command "Get-DiskImage -ImagePath '%ISO_PATH%' -ErrorAction SilentlyContinue | Dismount-DiskImage -ErrorAction SilentlyContinue; Start-Sleep 2; $img = Mount-DiskImage -ImagePath '%ISO_PATH%' -PassThru; Start-Sleep 3; $dl = (Get-Volume -DiskImage $img).DriveLetter; if($dl){ [System.IO.File]::WriteAllText('C:\win11_stage\drive.txt', $dl) }"
taskkill /F /IM setup.exe 2>nul
taskkill /F /IM setupprep.exe 2>nul
timeout /t 2 /nobreak >nul
powershell -Command "$dl = [System.IO.File]::ReadAllText('C:\win11_stage\drive.txt').Trim(); if($dl){ $exe = $dl + ':\setup.exe'; Start-Process $exe -ArgumentList '/ConfigFile C:\win11_stage\setupconfig.ini' }"
exit
第二步:在控制端编写并运行【主控部署脚本】
在控制端刚才存放 local_upgrade_final.bat 的相同文件夹下,新建一个名为 1_Deploy_To_Target.bat 的文件,将以下命令粘贴进去并保存为ANSI格式:
cmd
@echo off
chcp 936 >nul
echo ==================================================
echo Windows 11 局域网跨机高速拷贝与远程触发脚本
echo ==================================================
:: 配置源信息(ISO所在的服务器,如果需要凭据可提前建立连接)
set SRC_ISO=\\F202300503\Win11\iso\Win11_26200.9445_noTPM_20260918.iso
:: 配置本次测试的目标机信息
set TARGET=F201900817
set ADMIN_USER=administrator
set ADMIN_PASS=<管理员账号密码>
echo [1/4] 正在建立与目标机 %TARGET% 的安全网络管道...
net use \\%TARGET%\ipc$ "%ADMIN_PASS%" /user:%ADMIN_USER% >nul 2>nul
if errorlevel 1 (
echo [错误] 无法连接到目标机 %TARGET%,请检查网络、账号或密码!
pause
exit /B
)
echo -> 管道建立成功!
echo [2/4] 正在目标机上创建 D:\Temp 目录...
if not exist "\\%TARGET%\d$\Temp" mkdir "\\%TARGET%\d$\Temp"
echo [3/4] 正在跨局域网高速拷贝 ISO 文件和升级脚本 (请耐心等待完成)...
echo 源路径: %SRC_ISO%
:: 使用 robocopy 替代 copy,支持大文件断点续传且速度极快
robocopy "\\F202300503\Win11\iso" "\\%TARGET%\d$\Temp" "Win11_26200.9445_noTPM_20260918.iso" /Z /R:5 /W:5
copy /Y "local_upgrade_final.bat" "\\%TARGET%\d$\Temp\" >nul
echo -> 文件传输完成!
echo [4/4] 正在通过底层服务通道远程隐形触发升级...
sc.exe \\%TARGET% create WinUpgrade binPath= "cmd.exe /c D:\Temp\local_upgrade_final.bat" start= demand type= own >nul
sc.exe \\%TARGET% start WinUpgrade >nul 2>nul
sc.exe \\%TARGET% delete WinUpgrade >nul
echo ==================================================
echo 全部指令下发完毕!
echo 目标机 %TARGET% 已开始隐形升级,当前用户无感。
echo ==================================================
pause
🚀 执行方式
- 确保控制端能正常访问
\\F202300503\Win11\isi\下的 ISO 文件(如果需要共享密码,可以手动先在资源管理器里打开一次)。 - 在控制端直接双击运行
1_Deploy_To_Target.bat。 - 脚本执行到
robocopy时会显示进度条,复制完成后会自动通过sc瞬间在目标机上隐形跑起来。

为了满足你批量、连续循环单机部署的需求,我为你优化了【控制端主控部署脚本】。优化后的脚本具有以下特性:
- 无限循环输入:执行完一台后,会自动返回输入节点,等待你输入下一个计算机名。
- 支持一键退出:输入
exit或直接按回车即可随时优雅退出脚本。 - 关键参数固化:账号、密码、源 ISO 路径等固定资产信息直接写死在脚本里,你每次只需要无脑敲入计算机名即可。
请在你的控制端计算机上,将之前的部署脚本内容替换为以下 循环交互最终版(同样请确保使用 ANSI 编码保存):
cmd
@echo off
chcp 936 >nul
:: ==========================================
:: 固化的基础配置信息(无需每次输入)
:: ==========================================
set SRC_ISO=\\F202300503\Win11\iso\Win11_26200.9445_noTPM_20260918.iso
set SRC_DIR=\\F202300503\Win11\iso
set ISO_NAME=Win11_26200.9445_noTPM_20260918.iso
set ADMIN_USER=administrator
set ADMIN_PASS=<管理员账号密码>
:InputLoop
cls
echo ==================================================
echo Windows 11 局域网自动化循环部署控制台 (v6.0)
echo ==================================================
echo 当前固定的源 ISO: %ISO_NAME%
echo 提示: 输入 exit 或直接回车可退出程序。
echo --------------------------------------------------
echo.
:: 接收用户输入
set "TARGET="
set /p TARGET=请输入目标计算机名(或IP):
:: 处理退出逻辑
if "%TARGET%"=="" goto EndProgram
if /i "%TARGET%"=="exit" goto EndProgram
echo.
echo ==================================================
echo 开始处理目标计算机: %TARGET%
echo ==================================================
echo [1/4] 正在建立与目标机的安全网络管道...
net use \\%TARGET%\ipc$ "%ADMIN_PASS%" /user:%ADMIN_USER% >nul 2>nul
if errorlevel 1 (
echo.
echo ❌ [错误] 无法连接到目标机 %TARGET%!
echo 请检查:1. 计算机名是否拼错 2. 密码是否正确 3. 网络与防火墙。
echo.
pause
goto InputLoop
)
echo -> 管道建立成功!
echo [2/4] 正在目标机上确保 D:\Temp 目录存在...
if not exist "\\%TARGET%\d$\Temp" mkdir "\\%TARGET%\d$\Temp" >nul 2>nul
echo [3/4] 正在跨局域网高速拷贝 ISO 文件和升级脚本...
:: 使用 robocopy 传输大文件,带进度条显示
robocopy "%SRC_DIR%" "\\%TARGET%\d$\Temp" "%ISO_NAME%" /Z /R:5 /W:5
copy /Y "local_upgrade_final.bat" "\\%TARGET%\d$\Temp\" >nul
echo -> 文件传输与部署脚本下发完成!
echo [4/4] 正在通过底层服务通道远程隐形触发升级...
sc.exe \\%TARGET% create WinUpgrade binPath= "cmd.exe /c D:\Temp\local_upgrade_final.bat" start= demand type= own >nul 2>nul
sc.exe \\%TARGET% start WinUpgrade >nul 2>nul
sc.exe \\%TARGET% delete WinUpgrade >nul 2>nul
echo.
echo -> [成功] 远程触发指令已下发!
echo -> 目标机 %TARGET% 已开始完全静默安装,完工后不会自动重启。
echo --------------------------------------------------
echo 正在返回主界面...
timeout /t 5 >nul
goto InputLoop
:EndProgram
echo.
echo 已安全退出部署程序。
echo ==================================================
timeout /t 2 >nul
exit
请谨慎使用此类代码。
💡 新脚本使用说明:
- 前置条件:请确保控制端本地与该部署脚本同目录下,依然存放着你之前写好的
local_upgrade_final.bat(即在目标机本地执行、带/ConfigFile且不自动重启的那个脚本)。 - 运行效果:当你输入
F202400507并回车后,它会完整跑完 1 至 4 步。全部完成后,屏幕会提示[成功] 远程触发指令已下发!,并在倒计时 5 秒后自动清屏并重新弹出请输入目标计算机名(或IP):节点,无缝等待你输入下一台机器(例如F201900817)。
如果当前的循环拷贝运行顺利,在批量推进期间,需要我为你提供一个控制端专用的批量在线/离线 Ping 探测脚本,以便你在输入计算机名之前,提前筛选出局域网内哪些机器目前已经开机并解除了防火墙吗?
为你编写了一个控制端专用的批量在线/离线探测与环境检查脚本。
该脚本会自动读取你指定的计算机名或 IP 列表,不仅能测试它们是否开机(Ping 通),还能进一步深度探测它们的 Windows 共享管道(445端口)是否真正解封。只有两项都通过的机器,才代表具备远程静默升级的条件。
请在你的控制端计算机上,将以下代码保存为 0_Batch_Ping_Check.ps1(这是一个 PowerShell 脚本,天生对网络探测并发支持极好,速度极快):
powershell
# ==================================================
# 保存为: 0_Batch_Ping_Check.ps1
# 作用: 批量检查局域网计算机在线状态与防火墙解封状态
# ==================================================
clear
# --- 请在此处修改或扩充你要检查的目标计算机名或 IP 列表 ---
\$ComputerList = @(
"F202400507",
"F201900817",
"F202000903"
# 在这里可以继续无限换行添加其他计算机,例如: "F202400508", "10.240.79.45"
)
Write-Host "==================================================" -ForegroundColor Cyan
Write-Host " 局域网目标计算机批量状态与环境深度探测 " -ForegroundColor Cyan
Write-Host "==================================================" -ForegroundColor Cyan
Write-Host "当前待检查总数: (ComputerList.Count) 台"
Write-Host "正在扫描,请稍候...`n" -ForegroundColor Yellow
$OnlineCount = 0
$ReadyCount = 0
# 表头
[string]::Format("{0,-15} | {1,-10} | {2,-15} | {3,-10}", "计算机名/IP", "Ping状态", "445端口(共享)", "最终部署建议") | Write-Host -ForegroundColor White
Write-Host ("-" * 60)
foreach ($Computer in $ComputerList) {
# 1. 探测 Ping 状态
$PingStatus = Test-Connection -ComputerName $Computer -Count 1 -Quiet -ErrorAction SilentlyContinue
$PingResult = "❌ 离线"
$PortResult = "关闭"
$Suggestion = "无法连接(未开机)"
$Color = "Red"
if ($PingStatus) {
$PingResult = " 在线"
$OnlineCount++
# 2. 深度探测 445 端口(SMB共享和SC命令依赖端口)
$PortStatus = Test-NetConnection -ComputerName $Computer -Port 445 -WarningAction SilentlyContinue
if ($PortStatus.TcpTestSucceeded) {
$PortResult = "🔓 开启"
$Suggestion = "🟢 具备升级条件"
$Color = "Green"
$ReadyCount++
} else {
$PortResult = "🔒 拦截"
$Suggestion = "⚠️ 防火墙未解封"
$Color = "Yellow"
}
}
# 格式化对齐打印结果
[string]::Format("{0,-15} | {1,-10} | {2,-15} | {3,-10}", $Computer, $PingResult, $PortResult, $Suggestion) | Write-Host -ForegroundColor $Color
}
Write-Host "`n"
Write-Host "==================================================" -ForegroundColor Cyan
Write-Host " 探测完成统计报表:" -ForegroundColor Cyan
Write-Host " 统计: 列表中共 (ComputerList.Count) 台 | 当前开机 OnlineCount 台 | 完美就绪 ReadyCount 台" -ForegroundColor Windows
Write-Host "==================================================" -ForegroundColor Cyan
Write-Host "提示: 只有显示 [🟢 具备升级条件] 的计算机,你才可以在主控脚本中放心地输入并执行升级。"
Write-Host "按任意键退出..."
Read-Host
请谨慎使用此类代码。
🚀 配合循环部署脚本的使用策略:
- 统一名单:把你要操作的几十台或上百台机器的编号直接粘贴到脚本顶部的
$ComputerList = @(...)括号中。 - 提前探测:在每天开始执行升级前,在控制端右键选择“使用 PowerShell 运行”这个脚本。
- 精准打击:它会像雷达一样刷出所有机器的状态。你只需要对照屏幕上显示
🟢 具备升级条件(绿色) 的计算机名,依次复制并丢进你的【循环部署控制台】里执行升级。 - 定位故障:
- 显示
❌ 离线(红色):说明该员工今天没开机,或者改了计算机名,直接跳过。 - 显示
⚠️ 防火墙未解封(黄色):说明这台机器虽然开机了,但防火墙依然锁着。你可以单独记录下来,通过远程桌面(RDP)去把它的防火墙共享规则解开,再刷新此脚本。
- 显示
通过这个前置探测脚本与你的循环部署脚本打配合,你就能实现有条不紊、100% 成功率的局域网无感升级了!















