jkooe
411a483c76
fix(v16): 修复网络两阶段提交的 4 个真机缺陷(事故复盘后全部实测通过)
真机实测暴露并修复:
1. **生成的 .ps1 缺 UTF-8 BOM** → PowerShell 5.1 按 ANSI(GBK) 解析,脚本里的中文
(网卡名「Ethernet」)会吃掉后面的闭合引号,报 "The string is missing the terminator"
→ 计划任务退出码 1 且不留任何日志。现已统一 withBom() 落盘(对照实验:纯 ASCII 正常、
含中文失败,定位明确)。
2. **路径字面量被多余转义**:单引号内本是字面量,之前却把反斜杠翻倍 → 生成
`C:\\Users\\...` 非法路径 → Out-File 失败。新增 psLit() 统一处理。
3. **账号名拼法错误**:`"$env:USERDOMAIN\$env:USERNAME"` 在 TS 模板串里 `\$` 被当转义吃掉
反斜杠 → 拼出「机器名<user>」→ Register-ScheduledTask 报 HRESULT 0x80070534
「No mapping between account names and security IDs」。改用 WindowsIdentity 权威名称。
4. **注册脚本重复实现导致漏改**:回滚/延时两处各写一份,改了一处漏另一处(本轮回滚改好了、
apply 没改 → 继续报错)。抽出唯一实现 buildTaskRegistration(),并把注册类调用统一改为
**临时脚本 + -File**(真机实测 -EncodedCommand 下进度流会污染 stderr 且 stdout 拿不到
预期输出,导致「明明成功却被判失败」)。
顺带:
- 错误详情统一剥离 CLIXML 噪声(extractPsError),并带上 exit code 与 stdout —— 本轮就是靠它
才看到真实报错(此前只有「启动失败(code=1)」)
- net confirm 顺带清理已执行完的 netapply 任务,保持任务计划程序干净
真机验证(全部通过):
- apply(command) → 返回 apply_scheduled + 两个任务名 ✓
- apply 脚本执行 → 日志出现 "apply ok" ✓
- 不确认 → 自动回滚 → 日志 "restored: static" ✓(事故路径已修复)且网络完好 ✓
- confirm → 任务被取消(netrollback 计数 0)✓
- net status 剩余秒数正确 ✓
2026-10-01 20:58:19 +08:00
..
2026-10-01 20:58:19 +08:00
2026-09-27 01:06:35 +08:00
2026-09-27 01:06:35 +08:00