近年来,Windows 更新引发的系统故障和事故屡见不鲜,严重影响了用户的正常工作和生活。以下是一些影响较大的案例,它们凸显了系统更新可能带来的风险,以及用户在面对这些问题时的应对策略。
案例一:2024 年 7 月 CrowdStrike 更新引发的全球蓝屏事件
2024 年 7 月 19 日,网络安全公司 CrowdStrike 推送了一次有缺陷的软件更新,导致全球范围内约850 万台
Windows 计算机出现蓝屏死机(BSOD)。这场被称为“史上最大规模 IT
故障”的事件,几乎瘫痪了全球多个行业的关键基础设施,包括航空、金融、医疗、交通等领域。由于系统瘫痪,航班停飞、银行支付中断、医院系统崩溃,甚至国家安全也受到威胁。最终,CrowdStrike
在确认问题后迅速撤销了有缺陷的更新,并部署了修复程序。案例二:2024 年 12 月 Windows 11 24H2 虚拟机管理器问题
自 2024 年 12 月以来,Windows 11 24H2 用户频繁报告系统在启动时出现长达 60 至 90
秒的卡死或崩溃现象。问题的根源被指向虚拟机管理器(Vmmemcm)的高资源消耗,导致系统无法正常启动。用户不得不采取强制关机的方式解决问题,甚至有用户表示,问题已经持续了近两个月。案例三:2025 年 2 月 Windows 11 24H2 更新引发系统崩溃
2025 年 2 月,Windows 11 24H2 的 KB5051987
更新引发了多个严重问题,包括系统崩溃、文件资源管理器无响应、摄像头无法工作等。大量用户反馈,系统在启动后 60 至 90
秒内崩溃,文件资源管理器无法正常打开,严重影响了日常使用。问题的根源被指向虚拟机管理器(Vmmemcm)的高资源消耗。用户不得不通过卸载
KB5051987 更新或暂停更新来避免问题。
这些案例说明,Windows 更新虽然能修复漏洞、提升性能,但也可能因兼容性问题引发故障。当系统因更新出问题时,我们需要的不仅是解决眼前问题,更要防止它再次发生。所以,学会隐藏或屏蔽问题更新,是保护系统稳定性的关键。
使用 Microsoft 显示和隐藏更新工具
如果你已经安装了一个导致问题的更新,可以通过以下步骤卸载它:(Win11 24H2) 进入:
设置
-> Windows 更新
-> 更新历史记录
-> 卸载更新
。
在列表中点击更新并选择卸载
。
你也可以通过命令提示符卸载更新。使用 PowerShell 命令按安装日期列出更新:
Get-HotFix | Sort-Object -Property InstalledOn -Descending
在列表中找到更新编号(KBxxxxx),然后通过 KB 编号删除它:
wusa /uninstall /kb:5048161
然而,过一段时间后,Windows 更新可能会自动尝试重新安装你卸载的更新(Windows 更新组策略可能会覆盖自动安装设置)。
要完全阻止 Windows 更新服务安装某个特定更新,可以使用官方的 Microsoft“显示或隐藏更新”工具(wushowhide.diagcab
)。
• 从 Microsoft 官网下载显示或隐藏工具。
https://download.microsoft.com/download/f/2/2/f22d5fdb-59cd-4275-8c95-1be17bf70b21/wushowhide.diagcab
• 运行wushowhide.diagcab。
• 选择隐藏更新。
• 在列表中选择你想要隐藏的更新。
• 隐藏后,Windows 更新服务将不会尝试安装该更新,直到你将其设为可见。
如果要让更新重新可用,你需要在wushowhide.diagcab
工具中选择显示隐藏的更新,然后取消隐藏。
如果你安装了 WSUS 更新服务器,可以使用批准删除选项来阻止特定更新的安装,甚至可以从已安装该更新的计算机上自动卸载它。更多详情请参考 WSUS 批准更新的文章。
在 Windows 中暂时暂停更新
在 Windows 10 和 11 中,用户可以将 Windows 更新的安装暂停最多 35 天。这种方法通常用于发现某个已发布更新存在漏洞时,你希望等待修复。
要暂停更新安装 7 天,点击设置
->Windows 更新
中的暂停更新 7 天。你可以暂停 5 次,总共 35 天。这应该给微软工程师足够的时间来确认更新是否存在问题,并进行修复或召回。
要查看更新安装被延迟的日期,可以使用 PowerShell:
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings' | Select-Object PauseUpdatesExpiryTime
或者使用以下脚本暂停更新安装:
$pause = (Get-Date).AddDays(35)
$pause = $pause.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings' -Name 'PauseUpdatesExpiryTime' -Value $pause
这可以将更新暂停时间延长至最多 35 天。如果觉得 35 天还不够,可以通过以下办法再适当延长暂停时间。
# 定义注册表路径和键值
$registryPath = "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings"
$keyName = "FlightSettingsMaxPauseDays"
$value = 999 # 暂停更新的天数(可修改为其他值)
# 检查键值是否存在,如果不存在则创建,否则修改
if (-not (Get-ItemProperty $registryPath -Name $keyName -ErrorAction SilentlyContinue)) {
New-ItemProperty -Path $registryPath -Name $keyName -Value $value -PropertyType DWORD -Force
} else {
Set-ItemProperty -Path $registryPath -Name $keyName -Value $value -Force
}
Write-Host "注册表键值已成功设置为 $value 天。"
设置完成后,你可以在 Windows 更新
中看到暂停更新
的选项已经更新为新的时间。
使用 PowerShell 阻止特定 Windows 更新的安装
要阻止 Windows 安装某个特定更新,可以使用 PSWindowsUpdate 模块提供的 PowerShell 命令。如果尚未安装该模块,请先安装:
Install-Module -Name PSWindowsUpdate
重启 PowerShell 窗口,然后允许模块命令在当前会话中运行(避免更改全局 PowerShell 执行策略):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
列出可供安装的更新:
Get-WindowsUpdate
要隐藏某个特定更新,请指定其编号(KB):
Hide-WindowsUpdate -KBArticleID KB5048652 -Verbose
隐藏的更新在使用Get-WindowsUpdate
命令扫描时不会显示在可用更新列表中。要查看隐藏的更新,请运行:
Get-WindowsUpdate -IsHidden
隐藏更新在状态列中会有一个H(隐藏)属性。
要取消隐藏更新并允许其安装,请运行:
Show-WindowsUpdate -KBArticleID KB5048652
用户经常需要阻止某些设备驱动程序更新的安装(并防止 Windows 自动更新该驱动程序)。但是,如果你使用Get-WindowsUpdate
列出可用更新,会发现驱动程序更新缺少 KB 编号。在这种情况下,可以通过其 ID 阻止驱动程序更新:
$Updates = Get-WindowsUpdate -WindowsUpdate -UpdateType Driver
$Updates | Select Title,Description -Expand Identity
从结果中复制更新 ID,然后通过 ID 隐藏驱动程序更新:
Hide-WindowsUpdate -UpdateID "3f6ba9a7-b031-4990-808f-69a9e1ef6a91"