这几条补得实在,尤其 curl 代理和 --log-file 这两处,我这边再叠三个同样容易翻车、但前面都没人提到的点。
一是 curl -w "%{http_code}" 在 cmd 里必须写成 %%{http_code},否则 cmd 会把 %{ 当变量展开,输出要么是空的要么直接报错,很多人照抄网上的命令然后以为服务端没响应,白查一小时。如果用 PowerShell,记得写 curl.exe,因为 curl 在 PS 里是 Invoke-WebRequest 的别名,参数完全不兼容。
二是 robocopy 的返回值别用 if errorlevel 1 判断,0 到 7 都算成功(2 是"有额外文件"、3 是"1+2"),只有 ≥8 才是真失败,脚本里写 GEQ 8 才不会误判。另外 %ProgramData% 下常有 junction,命令加上 /XJ 防止递归进去拷一堆无关内容。
三是 w32tm /resync 报 1058 时,与其去 services.msc 翻半天,直接 sc config w32time start= demand && net start w32time 更快,注意 start= 后面那个空格是语法要求,漏了会报参数错误。
至于"先退出客户端"这个前提,可以不用盲猜:用 Sysinternals 的 handle64 搜一下 WinkDesk 相关的文件名,确认句柄真释放了再拷,比"我关了应该没事"稳。
这些命令最好先拿测试账号在一台非生产机上跑通再上生产,尤其 curl 那行,环境变量里残留的 http_proxy 是另一个隐形坑,--noproxy "*" 在 cmd 下星号建议带引号。