8.8 KiB
8.8 KiB
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 會做什麼:
{
"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 文件明確說不支援\n,換行會被一律忽略。要多行提示只能靠縮寫或另加 plugin(如menu_alias)。
重新部署步驟(macOS)
插入 Ventoy USB 後:
# 從 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
驗證:
ls /Volumes/Ventoy/ventoy/ /Volumes/Ventoy/ventoy/script/
diff unattend.xml /Volumes/Ventoy/ventoy/script/unattend.xml # 應無輸出
cat /Volumes/Ventoy/ventoy/ventoy.json
換 ISO 時要改什麼
- 把新 ISO 丟到 USB 根目錄。
- 編輯
/Volumes/Ventoy/ventoy/ventoy.json,把對應條目的image換成新檔名(或新增一條)。 - 不用動
/Volumes/Ventoy/ventoy/script/unattend.xml,除非要改 Windows 版本特有設定。 - 若 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 | net user user 1234 /add+/logonpasswordchg:yes(建立一般使用者 user,首次登入強制改密) |
否 |
| 5 | 等網路→Add-WindowsCapability OpenSSH.Server+Set-Service sshd Automatic+Start-Service sshd(log: firstlogon-sshd.log) |
是 |
| 6 | 等網路→下載 https://telegram.org/dl/desktop/win64 → 靜默安裝(/VERYSILENT /SUPPRESSMSGBOXES /NORESTART,log: firstlogon-telegram.log) |
是 |
| 7 | shutdown /r /t 5 重開機 |
否 |
新加入的 user 帳號
- 用途:給使用者日常使用,和部署用的管理員
Admin分開。 - 權限:一般
Users群組(非 Administrators)。需要管理員權限時走 UAC。 - 首次登入強制改密:
/logonpasswordchg:yes會在下次登入時跳「密碼必須變更」。可以改成複雜密碼。 - 如果
net user因為 Windows 密碼政策拒絕1234:整條 Order 4 會失敗但不會擋後面,手動於 PowerShell 以New-LocalUser+更寬的密碼重跑。
OpenSSH Server(Order 5)
- 走 Windows 內建 Feature on Demand,會從 Windows Update 下載
OpenSSH.Server~~~~0.0.1.0。需要外網。 - 完成後
sshd服務設成Automatic(每次開機自動啟動),防火牆規則由 FoD 自動建立(TCP 22 inbound allow)。 - 驗證:
Get-Service sshd應該Running;Get-NetFirewallRule -Name OpenSSH-Server-In-TCP應該Enabled=True。 - 用來遠端登入:
ssh Admin@<機器 IP>或ssh user@<機器 IP>。初次使用要先在%ProgramData%\ssh\administrators_authorized_keys加公鑰(Windows OpenSSH 對 Administrators 群組的授權金鑰路徑特殊,不走~/.ssh/authorized_keys)。
Telegram(Order 6)的注意事項
- 要有網路:OOBE 裡
SkipMachineOOBE=true跳過了網路設定精靈,所以目標機必須有 Ethernet+DHCP,或本身已記住 Wi-Fi。這次有 log 可以驗證—C:\Windows\Temp\firstlogon-telegram.log會寫NetWait=?s、Downloaded ?B、Exit ?。 - 網路等待上限 60 秒:Order 5 和 Order 6 都各跑一次
Test-Connection 8.8.8.8迴圈,最多等 30 回合×2 秒;ICMP 被擋住的環境會等完整 60 秒但 HTTPS 其實可用,也能跑下去。 - per-user 安裝:Telegram 安裝程式預設裝到 Admin 這個帳號底下,新建的
user看不到。要全機安裝就在ArgumentList加'/ALLUSERS'。 - 抓的是 latest 版:每次部署抓當下最新版。要鎖版本改用
https://updates.tdesktop.com/tsetup/tsetup-x64.X.Y.Z.exe直鏈。 - 順序不能搬到 reboot 後:
shutdown /r /t 5只是排程重開機、立即回傳,若放在 Telegram 前面,下載安裝會被 5 秒後的關機砍掉。
上次部署 Telegram 無聲失敗如何排查
這次每一條都有 log:登入 Admin 後看
notepad C:\Windows\Temp\firstlogon-telegram.log
notepad C:\Windows\Temp\firstlogon-sshd.log
常見會看到的值:
| Log 內容 | 代表 | 對策 |
|---|---|---|
NetWait=60s + ERR ... |
60 秒內 ICMP 沒通,後面可能也失敗 | 接網路線、或在 OOBE 後手動連 Wi-Fi 後重跑指令 |
Downloaded 0B 或 ERR 含 SSL/TLS |
TLS 交握失敗 | 檢查系統時間是否對;老機器可能要裝 Windows Update for TLS 1.2 |
Exit 0 但桌面沒 Telegram 捷徑 |
裝成功但 per-user 安裝、不是登入那個帳號 | 以 Admin 登入,捷徑在 %APPDATA%\Microsoft\Windows\Start Menu\Programs\Telegram Desktop |
| 完全沒 log 檔 | 這條 SynchronousCommand 根本沒跑(通常是 AutoLogon.Enabled=false 或 XML 沒注入) |
查 C:\Windows\Panther\UnattendGC\setupact.log |
本次部署已知限制
沿用 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 會失敗但不影響整個流程走完。