Files
windows-unattend/DEPLOY.md

140 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DEPLOY — 本機 Ventoy USB 部署紀錄
這份文件記錄本機 Ventoy USB`/Volumes/Ventoy`)上 `unattend.xml``ventoy.json` 的實際部署方式,供下次換機、換 ISO、或刷新 USB 內容時照著做。
概念與疑難排解請看 `QUICKSTART.md`;這份只寫「這顆 USB 目前的樣子」和「怎麼重建它」。
---
## 目前 USB 內容
掛載點:`/Volumes/Ventoy`
USB 根目錄兩個 ISO
| 檔名 | 用途 |
|---|---|
| `Windows 11_25H2_Chinese_Traditional_x64v1.iso` | Win11 25H2 繁中 x64 |
| `Windows 10_22H2_Chinese_Traditional_x64v1.iso` | Win10 22H2 繁中 x64 |
注入檔案佈局:
```
/Volumes/Ventoy/
├── Windows 11_25H2_Chinese_Traditional_x64v1.iso
├── Windows 10_22H2_Chinese_Traditional_x64v1.iso
└── ventoy/
├── ventoy.json ← 對應兩個 ISO都指向同一份 template
└── script/
└── unattend.xml ← 與 repo 根目錄的 unattend.xml 相同
```
---
## USB 上的 `ventoy.json`
**與 repo 根目錄的 `ventoy.json` 不同** —— repo 版本保留通用示範路徑 `/Win11.iso`USB 版本則綁定本機這兩個 ISO 的實際檔名,並帶了 `menu_tip` 讓 Ventoy 選單上顯示每個 ISO 會做什麼:
```json
{
"auto_install": [
{
"image": "/Windows 11_25H2_Chinese_Traditional_x64v1.iso",
"template": "/ventoy/script/unattend.xml"
},
{
"image": "/Windows 10_22H2_Chinese_Traditional_x64v1.iso",
"template": "/ventoy/script/unattend.xml"
}
],
"menu_tip": {
"left": "10%",
"top": "81%",
"color": "white",
"tips": [
{
"image": "/Windows 11_25H2_Chinese_Traditional_x64v1.iso",
"tip": "Win11 25H2 自動安裝清碟→Admin/P@ssw0rd!→裝 Telegram→重開UEFI+GPT會清空目標碟"
},
{
"image": "/Windows 10_22H2_Chinese_Traditional_x64v1.iso",
"tip": "Win10 22H2 自動安裝清碟→Admin/P@ssw0rd!→裝 Telegram→重開UEFI+GPT會清空目標碟"
}
]
}
}
```
- `image` 路徑以 `/` 開頭,相對 USB 根目錄,**完整檔名必須跟 USB 上一字不差**(含空格、底線、版本號)。`menu_tip.tips[].image` 也要跟著同步,否則光標移到 ISO 上不會跳 tip。
- 兩個 ISO 共用同一份 `unattend.xml`;該 XML 目前以 UEFI+GPT 全碟清除方式部署,兩個版本皆適用。
- 若日後只想其中一個 ISO 走自動安裝、另一個保留互動安裝,刪掉 `auto_install` 對應的物件即可Ventoy 找不到對應 `image` 時會走一般安裝流程(`menu_tip` 那條保留沒關係,不跳 auto install
- `menu_tip.tip` 是**單行**的;[Ventoy 文件](https://www.ventoy.net/en/plugin_menutip.html)明確說不支援 `\n`,換行會被一律忽略。要多行提示只能靠縮寫或另加 plugin`menu_alias`)。
---
## 重新部署步驟macOS
插入 Ventoy USB 後:
```bash
# 從 repo 根目錄執行
mkdir -p /Volumes/Ventoy/ventoy/script
cp unattend.xml /Volumes/Ventoy/ventoy/script/unattend.xml
# 寫 ventoy.json見上一節內容或直接手編
# 注意image 檔名必須跟 USB 上的 ISO 檔名完全一致
# 清掉 macOS 複製過程產生的 ._ AppleDouble metadata
dot_clean /Volumes/Ventoy/ventoy
```
驗證:
```bash
ls /Volumes/Ventoy/ventoy/ /Volumes/Ventoy/ventoy/script/
diff unattend.xml /Volumes/Ventoy/ventoy/script/unattend.xml # 應無輸出
cat /Volumes/Ventoy/ventoy/ventoy.json
```
---
## 換 ISO 時要改什麼
1. 把新 ISO 丟到 USB 根目錄。
2. 編輯 `/Volumes/Ventoy/ventoy/ventoy.json`,把對應條目的 `image` 換成新檔名(或新增一條)。
3. **不用**動 `/Volumes/Ventoy/ventoy/script/unattend.xml`,除非要改 Windows 版本特有設定。
4. 若 repo 裡的 `unattend.xml` 有更新,重跑一次 `cp``dot_clean` 即可。
---
## 部署後動作FirstLogonCommands 做了什麼)
目標機首次登入 `Admin` 帳號時,下列動作會按 `Order` 依序執行(全部跑完才 reboot
| Order | 動作 | 需要網路? |
|---|---|---|
| 1 | `powershell -File C:\Scripts\Setup.ps1` | 看腳本內容 |
| 2 | `net accounts /maxpwage:unlimited`(密碼永不過期) | 否 |
| 3 | `Rename-Computer` 把主機名改成 `PC-XXXXX`(重開後生效) | 否 |
| 4 | 下載 `https://telegram.org/dl/desktop/win64` → 靜默安裝(`/VERYSILENT /SUPPRESSMSGBOXES /NORESTART` | **是** |
| 5 | `shutdown /r /t 5` 重開機 | 否 |
Telegram 這條的注意事項:
- **要有網路**OOBE 裡 `SkipMachineOOBE=true` 跳過了網路設定精靈,所以目標機必須有 Ethernet+DHCP或本身已記住 Wi-Fi。網路不通時 `Invoke-WebRequest` 會失敗,但不會擋到 Order 5 的 reboot只會讓 Telegram 沒裝成。
- **per-user 安裝**Telegram 安裝程式預設裝到 Admin 這個帳號底下,其他帳號看不到。要全機安裝就在 `ArgumentList``'/ALLUSERS'`
- **抓的是 latest 版**:每次部署抓當下最新版。要鎖版本改用 `https://updates.tdesktop.com/tsetup/tsetup-x64.X.Y.Z.exe` 直鏈。
- **順序不能搬到 reboot 後**`shutdown /r /t 5` 只是排程重開機、立即回傳,若放在 Telegram 前面,下載安裝會被 5 秒後的關機砍掉。
---
## 本次部署已知限制
沿用 repo 預設值,下列情況會失敗,改用前要先處理:
- **目標機若是 BIOS/MBR**`<DiskConfiguration>` 目前寫死 UEFI+GPT分割階段會報錯。
- **ARM64 機器**:所有 `<component>``processorArchitecture="amd64"` 要改成 `arm64`
- **`C:\Scripts\Setup.ps1` 未提供**`FirstLogonCommands` 會在首次登入時報「找不到檔案」。解法:在 `FirstLogonCommands` 前段加一條從 USB 複製的指令,或另外烘進 image或乾脆刪掉 `Order=1` 那條 `SynchronousCommand`
- **密碼是明碼**`<PlainText>true</PlainText>`):僅適合測試用途;正式部署請用 Windows SIM 產 Base64。
- **Telegram 安裝需要外網**目標機沒網路的話Order 4 會失敗但不影響整個流程走完。