# 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**:`` 目前寫死 UEFI+GPT,分割階段會報錯。 - **ARM64 機器**:所有 `` 的 `processorArchitecture="amd64"` 要改成 `arm64`。 - **`C:\Scripts\Setup.ps1` 未提供**:`FirstLogonCommands` 會在首次登入時報「找不到檔案」。解法:在 `FirstLogonCommands` 前段加一條從 USB 複製的指令,或另外烘進 image,或乾脆刪掉 `Order=1` 那條 `SynchronousCommand`。 - **密碼是明碼**(`true</PlainText>`):僅適合測試用途;正式部署請用 Windows SIM 產 Base64。 - **Telegram 安裝需要外網**:目標機沒網路的話,Order 4 會失敗但不影響整個流程走完。