如何批量删除 Windows Update 的所有更新

最近有个客户要安装 Videotron 提供的防护软件,但是安装的时候,一直提示需要安装一个 KB3033929 的微软补丁,查看了一下是 SHA-2 什么的补丁。下载后却提示补丁已经安装完了。但是软件却一直提示需要安装该补丁。最后找到原因:因为 KB3033929 已经打包在某个月更新包中了,所以某些软件无法检测到这个KB名字,然后软件就报错说补丁没有安装,但是下载补丁单独安装,微软又说补丁已经安装了。陷入了死循环。

没办法,只有卸载补丁了。然而在微软的补丁查询网站中,搜索 KB3033929,发现这个补丁涉及到了 2016年10月-2017年的所有月补丁更新包。然而这些更新包我又在 Windows 中无法找到。

如果你能直接找到这几个更新,那么手动卸载后,重启后再安装 KB3033929 即可,如果像 Forece 一样找不到了,那么没办法只能继续往下看了。

KB4015549
KB4014981
KB2952664
KB4014565
KB4014553

没办法,直接挨个卸载吧。一般手动卸载是到控制面板 - 程序 -卸载程序 - 查看已安装的更新中。

然而 Forece 卸载了几个就发现,这尼玛是个庞大的工程啊。能不能一键卸载呢?网上找了找答案,发现都是说用 Windows updates cleaning tools。但是这个工具是卸载更新残留文件的。而不是卸载已经安装的更新的。还好,在某个英文网站中找到了答案。

1. 用管理员模式打开CMD

1
wmic qfe get hotfixid >> c:\list.txt

这条命令是用来列出 Windows 中所有安装过的更新

2. 用管理员模式打开记事本,然偶打开刚才我们创建的 C:\list.txt ,移除第一行代码。

3. 继续在 cmd 中敲入以下命令:

1
for /f %i in ('type c:\list.txt') do echo wusa /uninstall /kb:%i /quiet /norestart >> c:\uninstall.cmd

4. 然后用记事本打开刚才的 uninstall.cmd,替换引号内的内容(替换"/kb:KB" 到 "/KB:"),替换后的内容格式应该是这样的

1
wusa /uninstall /KB:981391 /quiet /norestart

5. 运行代码,然后重启系统,所有的更新都卸载完毕。

ref:
http://blag.kazeno.net/solutions/uninstall-windows-updates
https://answers.microsoft.com/en-us/windows/forum/windows_7-update/how-can-i-uninstall-all-the-previously-installed/2ac9e797-b9d4-46de-bee3-d93c3c409bda?auth=1