通过批处理脚本局域网远程执行windows11的ISO挂载静默安装升级
之前一直测试批量执行的脚本,但都失败,存在诸多问题:语法传递、权限不足、静默无法跳过授权交互等等,目前较为成功的单机测试情况如下:
一、脚本准备与环境需求:
目标计算机:需开启admin$、需提前传送windows11的ISO文件到指定目录
(本例中为:D:\temp\D:\Temp\Win11_25H2_26200.9168_noTPM_20260908.iso)
操作计算机:需下载PStools工具包(本例主要使用psexec.exe)
将下面的脚本保存为批处理(ANSI格式):upwin.bat,并以管理员身份运行,
@echo off
chcp 936 >nul
echo ==========================================
echo Windows 11 In-Place Upgrade (Final v4)
echo ==========================================
set PSEXEC=D:\PSTools\PsExec.exe
set TARGET=F202000903
set USER=.\administrator
set PASS=<目标计算机管理员密码>
set ISO_PATH=D:\Temp\Win11_25H2_26200.9168_noTPM_20260908.iso
:: Step 1: Generate autounattend.xml
echo [1/6] Generating answer file…
%PSEXEC% \%TARGET% -u %USER% -p %PASS% -s -h powershell -Command “[System.IO.File]::WriteAllText(‘C:\autounattend.xml’, ‘<unattend xmlns=”urn:schemas-microsoft-com:unattend”><settings pass=”windowsPE”><component name=”Microsoft-Windows-Setup” processorArchitecture=”amd64” publicKeyToken=”31bf3856ad364e35” language=”neutral” versionScope=”nonSxS”>true’)”
:: Step 2: Mount ISO
echo [2/6] Mounting ISO…
%PSEXEC% \%TARGET% -u %USER% -p %PASS% -s -h powershell -Command “Get-DiskImage -ImagePath ‘%ISO_PATH%’ -ErrorAction SilentlyContinue | Dismount-DiskImage -ErrorAction SilentlyContinue; Start-Sleep 2; Mount-DiskImage -ImagePath ‘%ISO_PATH%’ -PassThru | Out-Null; for($i=0;$i -lt 10;$i++){ $dl = (Get-Volume -DiskImage (Get-DiskImage -ImagePath ‘%ISO_PATH%’)).DriveLetter; if($dl){ Write-Host (‘Drive: ‘+$dl); break }; Start-Sleep 2 }”
:: Step 3: Kill any existing setup.exe
echo [3/6] Killing old setup processes…
%PSEXEC% \%TARGET% -u %USER% -p %PASS% -s -h taskkill /F /IM setup.exe 2>nul
timeout /t 3 /nobreak >nul
:: Step 4: Start setup.exe directly in interactive session (no cmd wrapper)
echo [4/6] Starting setup.exe in interactive session…
%PSEXEC% \%TARGET% -u %USER% -p %PASS% -s -i E:\setup.exe /auto:upgrade /quiet /noreboot /compat:ignorewarning /dynamicupdate:disable /unattend:C:\autounattend.xml
echo ==========================================
echo Upgrade initiated!
echo Check target machine screen for progress.
echo Waiting 30 seconds before verification…
echo ==========================================
timeout /t 30 /nobreak >nul
:: Step 5: Verify setup.exe with fixed PowerShell (handles multiple processes)
echo [5/6] Verifying setup.exe progress…
%PSEXEC% \%TARGET% -u %USER% -p %PASS% -s -h powershell -Command “$setup = Get-Process setup -ErrorAction SilentlyContinue; if ($setup) { foreach ($s in $setup) { Write-Host (‘PID: ‘ + $s.Id); Write-Host (‘WS: ‘ + ($s.WorkingSet / 1KB).ToString(‘0.00’) + ‘ KB’); Write-Host (‘CPU: ‘ + $s.TotalProcessorTime.ToString()) }; $disk = Get-Counter ‘\PhysicalDisk(*)\Disk Write Bytes/sec’ -ErrorAction SilentlyContinue; if ($disk) { $total = ($disk.CounterSamples | Measure-Object -Property CookedValue -Sum).Sum; Write-Host (‘Disk Write: ‘ + ($total/1KB).ToString(‘0.00’) + ‘ KB/s’); if ($total -gt 0) { Write-Host ‘OK: Upgrade is progressing!’ } else { Write-Host ‘WARN: Disk I/O is 0 – setup may be stuck’ } } } else { Write-Host ‘ERROR: setup.exe not found!’ }”
pause
二、执行反馈:
如下图:


升级已经成功启动并且正在正常推进! 🎉
从 截图反馈的验证结果可以确认:
| 指标 | 数值 | 状态 |
|---|---|---|
| setup.exe 进程数 | 2 个(PID 4988 + 12420) | ✅ 正常 |
| 父进程内存 | 32 MB | ✅ 正常 |
| 子进程内存 | 12 MB | ✅ 正常 |
| CPU 使用 | 有累计时间 | ✅ 正常 |
| 磁盘写入 | 448.15 KB/s | ✅ 正在写入! |
Disk Write: 448.15 KB/s — 磁盘 I/O 远大于 0,说明 setup.exe 正在正常读取 ISO 文件并写入升级文件,升级流程已经跑起来了。
现在需要做的
- 由于 PsExec 在后台(Session 0)以 SYSTEM 身份启动安装程序,受 Windows 会话隔离(Session 0 Isolation)机制影响,无法直接在目标机器的当前用户屏幕(Session 1)上弹出交互窗口或反馈消息。
- 不要去碰目标计算机的鼠标和键盘,让它继续保持当前状态
- 当后台的文件复制和配置完成后,目标计算机将会自动重启。
- 整个过程可能需要 30 分钟到 1 小时,期间不要做任何操作(取决于目标机的硬盘读写速度)。
- 升级完成后目标机器会自动进入桌面(可能显示”正在配置 Windows”),等待进入桌面即可
三、执行确认
在 PsExec 后台执行的情况下,由于 Session 隔离机制,你通过本地任务管理器(默认只显示你自己的 Session 1 进程)是完全看不到在后台 SYSTEM 权限下运行的 Setup 进程的。
要确认它是否还在进行,请在你本地电脑上打开 CMD,直接执行以下远程查询命令:
D:\PSTools\PsExec.exe \\F202000903 -u “.\administrator” -p “管理员密码” -s tasklist /FI “IMAGENAME eq setup.exe”
如何看结果:

如果能看到 setup.exe:说明程序还在跑,请继续静候。
如果提示“没有运行该任务的实例”:说明 Setup 进程已经完全退出。这通常是正常的,因为文件复制完成后的系统配置和重启步骤是由 winlogon.exe 接管执行的,不再需要 setup.exe。此时请耐心等待目标机自动蓝底/黑底进度条重启即可。















