展厅电脑总在半夜更新,我和 AI 折腾了一个脚本 作者: zhaoyang 更新: 2026年09月11日 2,787 字 约 8 分钟阅读 分类: 系统运维 管展厅电脑,有一件事挺让人头疼:电脑明明放在那里好好运行,Windows 偏偏要找个时间更新一下。 弹个提示框,已经够影响展示了。更麻烦的是半夜自动重启,重启过程中再出点问题,第二天电脑打不开,接待就跟着受影响。 这些电脑又不能直接断网,因为展示内容有访问公网的需求。网得连着,更新也就总有机会被触发。 所以我一直想把这件事处理一下:让电脑继续正常联网,但不要自己更新、自己重启,尤其别哪天突然从 Windows 10 升到了 Windows 11。 这次,我决定让 AI 帮忙写个脚本。 先说目前的结果:经过几轮修改,脚本已经在十几台电脑上执行过,没再出现其他报错。长期效果还要继续看,不过从最初跑都跑不起来,到现在能拿到不同电脑上用,这个过程挺值得记一笔。 ## 本来以为,写个脚本就完了 我最开始提的要求很直接: > 能不能写一个脚本,检测当前 Windows 系统是否还有自动更新,任何形式,如果有的话把它禁用掉。 AI 很快开始写了,打算连商店、Office 之类的更新一起处理。我一看,还是得把需求说得更具体一点:我主要想管的是 Windows 系统更新,尤其是 Win10 自动升级 Win11。 于是第一版脚本的方向就定了:设置更新策略、锁定当前系统版本、停掉相关服务和计划任务。执行前留备份,执行后出报告,还能恢复。 看起来挺齐全。 结果拿到电脑上,第一条命令就报错。 原因是默认输出目录没取到,脚本还没开始检查系统,就先退出了。后来才发现,之前测试时手动指定了目录,正好绕开了这个问题。 改完终于能跑了,又是一屏英文、注册表路径和被截断的状态。我盯着输出看了一会儿,直接回了一句: > 这个输出格式,我很难看懂啊。 对我来说,最想知道的无非是:关掉没有?还有哪项没关?要不要重启? 后来输出就改成了中文摘要。五项策略、几个服务、多少个任务,分别显示结果。那些很长的路径和细节放进文件,需要排查时再看。这一步改完,才觉得它有点像个能交给别人用的工具了。 中间还闹过一次小插曲:我在普通 PowerShell 里执行禁用,被脚本拦了下来。换成“以管理员身份运行”,才真正开始修改系统。 ## 有些红字,不能靠再跑一遍解决 第一次执行完,屏幕上还是有红字:拒绝访问。 一开始有四项,修了一轮之后,剩下两个计划任务。 这里还发现一个小毛病:脚本会重复修改已经禁用的服务。明明状态已经符合要求,再写一次却被拒绝,于是又算成失败。后来改成先看状态,已经关掉的就跳过。 至于剩下两个任务,反复执行同一条命令,也还是拒绝访问。 我问: > 那俩拒绝访问,不解决一下? 于是又有了一个专用修复脚本,用临时的 SYSTEM 任务去处理这两个受保护任务,处理完检查状态,再清理临时任务。 执行完,输出里两个任务都是: ```text Enabled=False State=Disabled ``` 但摘要居然还在说“未完成”。 这次真不是 Windows 没关掉,是脚本把结果读错了。PowerShell 5.1 读取多条 JSON 结果时,外面多套了一层数组,按任务名查找就匹配不到,最后误报失败。 修完读取逻辑,再分别测试全部成功、部分失败的情况,结果才对上。 折腾到这里,我对屏幕上的绿色和红色都有点警惕了。颜色是脚本画出来的,脚本也可能画错。还是得看它实际读到了什么。 ## 最大的坑,其实是脚本自己挖的 回头说这中间最值得记住的一次问题。 有一轮执行完,五项策略全是绿色,“已设置”。我重启电脑,再跑检查,前面几项竟然没了,只剩最后一项还在。 如果到这里就停下,很容易得出一个结论:Windows 又把设置改回去了。 但这次不是。 AI 回去检查代码,做了复现,发现旧版在写注册表时用了: ```powershell New-Item -Path $Path -Force ``` 本来只是想确保这个键存在,结果对已有注册表键这么操作,会清掉已有内容。后面的策略写进去,前面写好的值就没了。 更巧的是,它每写一项就立即检查这一项。当时确实存在,于是记一条成功。等下一步把它清掉,脚本已经不管它了。 所以五项都曾经成功过,但最后并没有同时保留下来。 这个问题比权限不足更让我在意。权限不足至少明明白白告诉你没做成;这种情况却会给你一整屏成功,让你以为可以放心了。 后来改了两个地方:注册表写入不再清空已有内容;等所有操作做完,再把五项策略一起重新读一遍。 还专门用了独立的测试键,检查重复写入会不会丢值、子项会不会受影响。这个教训也不只适用于注册表:前一步检查通过了,不代表后面的操作不会把它弄坏。 顺带也发现,原先的备份只是计划修改的那些值,并不是完整注册表快照。如果误伤了其他内容,不能指望这份备份全都救回来。这是旧版的缺陷,分享这个过程时也得一并说清楚。 ## 换一台电脑,问题又不一样了 第一台处理得差不多,我就想放到第二台上试试。 但此时手里有两个脚本:一个主脚本,一个权限修复脚本。还得根据报错决定先运行哪个、后运行哪个。 我又问了一句: > RepairUpdateTasks 不能并入 UpdateControl 文件吗? 于是合成了一个文件。平时正常禁用,碰到那两个任务失败,就自动尝试 SYSTEM 修复。备份、恢复也走同一个入口。 这才方便往其他电脑上复制。 结果第二台一运行,十三项失败。 除了更新修复服务,还有一串第一台没碰到的受保护任务。原来的修复代码只认那两个固定任务,其他的当然处理不到。 到这一步,工具才从“修好眼前这台电脑”,往“能在不同电脑上用”又走了一段。 现在的 R4 会根据本机实际检测结果,在规定的系统更新目录里处理失败任务,分批尝试 SYSTEM 修复。相关更新服务也纳入了范围。如果服务启动方式仍被拒绝修改,会尝试只改对应的注册表启动值,并明确提示重启后复查。 它不会把“启动值写进去了”直接说成“以后肯定没事”。 这一轮修改之后,我继续在十几台电脑上执行,没再出现其他报错。至少,已经不用每换一台电脑就回头改一次脚本了。 ## 工具放出来,有类似需求可以参考 当前版本是 **UpdateControl.ps1,2026-09-11 R4**,只需要一个文件。 [Windows更新控制工具-R4.zip](https://www.cuizhaoyang.cn/usr/uploads/2026/09/586830342.zip) 它针对 Windows 系统更新,包含保持当前系统产品和功能版本的策略。微软也提供了通过目标版本策略管理 Win11 升级的说明,可以对照查看:[为 Windows 11 做准备](https://learn.microsoft.com/en-us/windows/whats-new/windows-11-prepare)。 以脚本放在 `D:\UpdateControl.ps1` 为例,打开 **管理员 PowerShell**。 先看当前状态: ```powershell powershell.exe -NoProfile -ExecutionPolicy Bypass -File D:\UpdateControl.ps1 -Mode Audit ``` 确认要执行禁用,再运行: ```powershell powershell.exe -NoProfile -ExecutionPolicy Bypass -File D:\UpdateControl.ps1 -Mode Disable ``` 范围内的更新任务或服务如果被拒绝访问,脚本会自动尝试 SYSTEM 修复。执行完,再跑一次 `Audit`,重启后再检查一次。 这两次检查我建议都保留。这次如果没做独立复查,前面那个注册表被覆盖的问题可能就没那么快发现。 备份、中文摘要、详细报告都在脚本旁边的 `UpdateControl-data` 文件夹。要恢复时,用对应电脑的备份: ```powershell powershell.exe -NoProfile -ExecutionPolicy Bypass -File D:\UpdateControl.ps1 -Mode Restore -BackupFile D:\UpdateControl-data\backup-实际时间戳.json ``` 文件名要换成实际的。每台电脑首次执行前的备份要留好,别拿第一台的备份去恢复第二台。反复执行会产生新备份,后一次备份里的状态可能已经是部分禁用了。 这个工具也有明确的范围:它不会关闭所有第三方软件的更新,不会撤销已经等待重启安装的更新,不会把 Win11 降回 Win10。停止系统更新也意味着停止通过这个渠道获取相应安全补丁,使用前要结合自己的设备情况考虑。 ## 这次折腾,我觉得值在哪里 整个过程里,我做得最多的事就是运行命令、看结果、截图、继续问。AI 则不断改代码、找原因、补测试。 它确实帮我把一个运维需求很快做成了工具。但看完前面的过程,也很难再把“AI 说测试通过了”当成事情已经结束。默认参数会漏测,多条结果会读错,写入逻辑甚至会清掉自己刚写好的值。 还好这些问题都在来回验证中暴露了出来。 另外,把真实背景说清楚很有用。只说“关闭更新”,很容易聊着聊着就变成一堆设置项。说明这是必须联网的展厅电脑,半夜重启出问题会影响第二天接待,大家才知道最终要解决什么。 现在十几台电脑执行下来,没有再出现其他报错,这是一个不错的进展。但我更关心的还是后面的实际运行:夜里还有没有非预期更新和重启,第二天设备能不能正常投入接待。 等这部分也观察得更充分,再回来补上结果。 标签: 运维, AI辅助编程, Windows更新控制, PowerShell脚本, 展厅设备, 自动化脚本