部分设备Get-WmiObject检测到双版本Google Chrome卸载问题求助
解决Google Chrome旧版本残留导致的WMI检测重复问题
问题分析
部分设备上Get-WmiObject -Class Win32_Product会检测到两个Google Chrome实例,但Get-Package仅显示当前活跃的新版本。这是因为Chrome更新过程中可能残留了旧版本的MSI安装条目(WMI中的Win32_Product记录),而Get-Package依赖的MSI Provider仅识别当前有效的安装记录。原Win32_Product.Uninstall()命令失败,大概率是旧版本的MSI缓存已损坏或对应文件已被清理,导致卸载流程无法正常触发。
解决方案
方案1:直接通过MSI产品码卸载旧版本
如果旧版本的MSI记录仍有效,使用msiexec命令直接卸载,避免依赖Win32_Product的不稳定卸载方法:
# 替换为目标设备上旧Chrome的IdentifyingNumber(可省略大括号) msiexec /x C5757571-346F-37C5-BD92-28783FBD2E04 /qn
/qn参数表示静默卸载,无需用户交互;- 执行后可再次运行
Get-WmiObject -Class Win32_Product -Name "Google Chrome"验证旧条目是否消失。
方案2:清理WMI中的残留条目
如果旧版本的实际文件已不存在(仅WMI记录残留),直接删除Win32_Product中的对应条目:
# 定位旧Chrome的WMI实例 $oldChromeEntry = Get-WmiObject -Class Win32_Product | Where-Object { $_.IdentifyingNumber -eq "{C5757571-346F-37C5-BD92-28783FBD2E04}" -and $_.Version -like "69.*" } # 删除残留条目 if ($oldChromeEntry) { $oldChromeEntry.Delete() Write-Host "旧版本WMI条目已清理" } else { Write-Host "未找到目标条目" }
- 此操作仅清理WMI中的记录,不会删除任何文件,适合解决SCCM报告数据混乱的问题;
- 执行前确认新版本Chrome可正常运行,避免误删有效条目。
方案3:批量处理多台设备(适用于SCCM环境)
若需批量修复多台设备,可编写PowerShell脚本并通过SCCM推送:
# 获取当前活跃的Chrome版本 $currentChrome = Get-Package -Name "Google Chrome" -ErrorAction SilentlyContinue if ($currentChrome) { # 筛选所有版本低于当前版本的Chrome条目 $oldChromeEntries = Get-WmiObject -Class Win32_Product -Name "Google Chrome" | Where-Object { [version]$_.Version -lt [version]$currentChrome.Version } foreach ($entry in $oldChromeEntries) { try { # 尝试卸载旧版本 $uninstallResult = $entry.Uninstall() if ($uninstallResult.ReturnValue -ne 0) { # 卸载失败则直接删除WMI条目 $entry.Delete() Write-Host "已清理设备$env:COMPUTERNAME上的旧Chrome WMI条目:$($entry.Version)" } else { Write-Host "已成功卸载设备$env:COMPUTERNAME上的旧Chrome版本:$($entry.Version)" } } catch { Write-Host "处理设备$env:COMPUTERNAME失败:$_" } } } else { Write-Host "设备$env:COMPUTERNAME上未找到活跃的Chrome安装" }
注意事项
- 避免频繁使用
Win32_Product,因为每次调用都会触发MSI验证,可能导致系统卡顿或不必要的修复操作; - 操作前可通过
wbemtest工具备份Win32_Product类的WMI存储,防止意外破坏; - 修复完成后,检查SCCM报告是否恢复正常。
内容的提问来源于stack exchange,提问作者cri_pava
相关产品推荐
相关产品推荐

