在 REINSTALL.md 補 BIOS 預備區塊、常見坑表格、部署前 checklist; QUICKSTART.md 常見錯誤表也加一列,避免下次踩到同樣的卡關。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Windows Unattend 自動部署
以 unattend.xml 回應檔自動化 Windows 10/11 安裝流程。涵蓋語系、磁碟分割、帳號建立、產品序號、首次登入腳本執行。
檔案
| 檔案 | 用途 |
|---|---|
unattend.xml |
主回應檔,部署到 Ventoy USB 的 /ventoy/script/unattend.xml(不改名為 autounattend.xml,Ventoy Auto Install plugin 走 ventoy.json 注入) |
Setup.ps1 |
首次登入後的 post-install PowerShell;部署到 USB 的 /ventoy/script/Setup.ps1,FirstLogonCommands 會掃磁碟自動複製到 C:\Scripts\ 後執行 |
ventoy.json |
Ventoy Auto Install plugin 設定,把 ISO 對到 unattend.xml |
QUICKSTART.md |
操作步驟:如何產生 USB、掛載 ISO、跑 VM 測試 |
DEPLOY.md |
本機 USB 實機部署紀錄+ FirstLogonCommands / Setup.ps1 詳細排查 |
SUMMARY.md |
本專案的來由與設計脈絡 |
Pass 架構
Windows Setup 在不同階段套用不同 <settings pass="...">:
| Pass | 時機 | 本檔負責 |
|---|---|---|
windowsPE |
WinPE 啟動、安裝前 | UI 語系、磁碟分割(UEFI+GPT)、產品序號、EULA |
specialize |
映像套用後、第一次開機前 | 電腦名稱、時區、擁有者資訊 |
oobeSystem |
首次開機 OOBE 階段 | 略過 OOBE、建立本機帳號、AutoLogon、FirstLogonCommands |
元件與設定項
windowsPE
- Microsoft-Windows-International-Core-WinPE —
SetupUILanguage/InputLocale/SystemLocale/UILanguage/UserLocale皆為zh-TW,InputLocale為0404:00000404(繁中鍵盤)。 - Microsoft-Windows-Setup
DiskConfiguration— 清空第一顆非-Ventoy 磁碟($$VT_WINDOWS_DISK_1ST_NONVTOY$$,由 Ventoy Auto Install plugin 於執行期替換成實際 DiskID),建立三個分割:- EFI 500 MB(FAT32, Label
System) - MSR 128 MB
- Primary 其餘全部(NTFS, Label
Windows, 掛C:)
- EFI 500 MB(FAT32, Label
ImageInstall— 安裝到同一顆磁碟的 Partition 3UserData—ProductKey(範本為XXXXX-XXXXX-XXXXX-XXXXX-XXXXX,KMS 可用通用金鑰)、AcceptEula=true、FullName、Organization
specialize
- Microsoft-Windows-Shell-Setup
ComputerName—*(Setup 自動產生隨機名,FirstLogonCommands再用Rename-Computer改成PC-XXXXX,重開後生效)。不可寫PC-%RAND:5%——那是 MDT/SCCM 變數,直接放這裡會被當字面字串送進 NetBIOS 驗證而失敗TimeZone—Taipei Standard TimeRegisteredOwner/RegisteredOrganization
oobeSystem
- Microsoft-Windows-International-Core — 重複設定語系(OOBE 階段需要)
- Microsoft-Windows-Shell-Setup
OOBE— 全部略過:EULA、OEM 註冊、線上帳號、無線設定、機器與使用者 OOBE;NetworkLocation=Work、ProtectYourPC=3UserAccounts.LocalAccounts— 建立Admin(Administrators 群組,密碼P@ssw0rd!,明碼)AutoLogon— 以Admin自動登入一次(LogonCount=1)FirstLogonCommands— 按Order依序執行:cmd.exe /c net accounts /maxpwage:unlimited(密碼永不過期)Rename-Computer改主機名成PC-XXXXX(重開後生效)- 建立本機帳號
User(密碼1234,net user /logonpasswordchg:yes強制首次登入改密) - 掃所有掛載中的 FileSystem PSDrive 找
\ventoy\script\Setup.ps1,複製到C:\Scripts\Setup.ps1(log 寫到C:\Windows\Temp\firstlogon-copysetup.log) - 跑
C:\Scripts\Setup.ps1(13 段 post-install 詳見Setup.ps1與DEPLOY.md,log 寫到C:\Windows\Temp\setup.log;找不到檔案時改寫firstlogon-runsetup.log並跳過) shutdown /r /t 5(重開機)
Setup.ps1 涵蓋的 13 段(首次登入由 Order 5 執行)
Phase 1(不需網路): SSH 22/TCP 防火牆、RDP+3389、ICMP Echo Inbound、WinRM(TrustedHosts=*)、OneDrive 解除安裝、Cortana/Web Search 關閉、Default profile 套 Dark mode+顯示副檔名/隱藏檔+工作列靠左+預設英數鍵盤+停 IME 切換熱鍵、從登入畫面隱藏 Admin。
Phase 2(需網路,wait-network 後執行): OpenSSH Server FoD、KMS 啟用(先試 $InternalKmsServers 再 fallback 公開 KMS)、winget 裝 Chrome、zoicware/RemoveWindowsAI -AllOptions、Raphire/Win11Debloat -Silent -Config、22 個 UWP AppxPackage 移除(與 windows-remote-toolkit/config/remove-apps-config.json 同步)、Telegram 靜默安裝、刪 C:\Windows\Panther\unattend.xml 殘留。
關鍵參數參考
| 參數 | 說明 |
|---|---|
processorArchitecture |
x64 用 amd64、ARM64 用 arm64 |
publicKeyToken |
微軟元件簽章,固定 31bf3856ad364e35 |
ProductKey |
目前填的是 Win11/10 專業版 GVLK(W269N-WFGWX-YVC9B-4J6C9-T83GX,微軟文件),用來選版本+略過序號畫面。GVLK 只在 KMS 主機環境下才會真正啟用,獨立機器會進 30 天寬限期。其他版本/零售序號直接換這串即可 |
PlainText |
true 用明碼、false 用 Base64(SIM 會自動產生) |
ComputerName |
只接受字面名稱、*(自動產生如 DESKTOP-ABC123D)或空值。不支援 %RAND:N%——那是 MDT/SCCM task-sequence 變數,直接放進 unattend.xml 會被當字面字串送進 NetBIOS 驗證而失敗。本檔的做法是 <ComputerName>*</ComputerName> 加 FirstLogonCommands 裡的 Rename-Computer 改成 PC-XXXXX,重開後生效 |
WillShowUI |
OnError / Always / Never |
FirstLogonCommands |
需搭配 AutoLogon 才會觸發;按 Order 同步執行 |
放置位置(擇一)
| 方式 | 位置 | 檔名 |
|---|---|---|
| Ventoy Auto Install plugin(本 repo 預設) | Ventoy USB 的 /ventoy/script/unattend.xml+/ventoy/script/Setup.ps1,並在 /ventoy/ventoy.json 指定 |
任意(本 repo 用 unattend.xml) |
| 傳統 USB 安裝碟 | USB 根目錄 | autounattend.xml(注意:FirstLogonCommands Order 4 的磁碟掃描還是會找 \ventoy\script\Setup.ps1,要嘛把 Setup.ps1 放對位置,要嘛改 Order 4 的搜尋路徑) |
ISO sources\ 目錄 |
ISO 根 | autounattend.xml(同上) |
| DISM 離線注入已掛載映像 | — | 任意名稱,用 /Apply-Unattend: 指定(這條路徑下 Setup.ps1 通常會直接烘進 image 而不再走 USB 掃描) |
驗證工具
- Windows SIM(Windows System Image Manager,Windows ADK 內含)— 視覺化編輯、驗證、自動產生 Base64 密碼。
- VM 試跑(Hyper-V / VirtualBox / VMware)— 正式部署前先在 VM 全跑一次。
安全性
- 本範本密碼為明碼,僅適合內網測試;生產環境請改 Base64 或交由 MDT/SCCM 管理。
Setup.ps1的cleanup-unattend-files段已經會在收尾時刪掉C:\Windows\Panther\unattend.xml與Panther\Unattend\unattend.xml(含明碼密碼)。- WinRM
AllowUnencrypted=true+TrustedHosts=*是測試環境設定;正式環境要改 HTTPS(5986)+ 限制 TrustedHosts。 - KMS 預設 fallback 到第三方公開伺服器(
kms.digiboy.ir等);正式環境改Setup.ps1的$InternalKmsServers。
客製延伸
可在既有結構上擴充:
- 加入網域(
Microsoft-Windows-UnattendedJoin.Identification) - 安裝特定軟體(
FirstLogonCommands呼叫 winget / choco / MSI) - 整合 WDS / MDT / SCCM 部署流程
- 多硬碟或 BIOS/MBR 分割配置
Description
Languages
PowerShell
67.9%
Batchfile
32.1%