如何用PowerShell按发布商批量执行卸载字符串?以Autodesk为例
Autodesk全系列批量卸载的通用可复用方案
原有尝试方法的核心缺陷
- 之前使用的
wmic product where "name like 'auto%%'" call uninstall存在天然覆盖盲区:wmic的product接口仅能识别经Windows Installer(MSI)注册的程序,大量Autodesk自研安装包、配套插件、服务组件不会被纳入查询范围,执行后必然出现大量残留。 - 后续通过Wow6432Node注册表路径检索卸载条目,虽然能定位到剩余程序的卸载入口,但直接调用UninstallString会遇到参数转义错误、弹窗交互打断流程、权限不足等问题,无法直接实现批量执行。
跨厂商通用的批量卸载实现逻辑
这套逻辑不绑定Autodesk场景,调整筛选条件即可适配任意发布商的软件批量卸载需求,无需依赖应用名称模糊匹配:
- 补全注册表查询范围,从根源避免漏项
不能仅查询Wow6432Node路径,需要同时覆盖两个系统通用卸载注册表路径,兼容32位、64位程序的注册项:HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*:64位程序的专属卸载注册路径HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*:32位程序的兼容卸载注册路径
筛选规则优先使用发布商(Publisher)字段做匹配,比如针对Autodesk直接匹配Publisher -like "*Autodesk*",准确率远高于对名称做auto模糊匹配的方式,从逻辑上支持任意厂商的程序匹配。
- 适配不同类型的卸载入口规则
系统检索到的UninstallString格式不统一,直接执行会弹出交互窗口打断批量流程,需要针对性做兼容处理:- 对MSI格式的卸载串(格式为
MsiExec.exe /I{产品GUID}),统一替换为静默卸载参数:MsiExec.exe /X{产品GUID} /quiet /norestart,实现无交互卸载 - 对自带
QuietUninstallString字段的程序,优先直接使用系统提供的静默卸载串,无需手动拼接参数 - 对普通EXE格式的卸载程序,追加通用静默参数(
/S),适配绝大多数厂商的静默规则
- 对MSI格式的卸载串(格式为
- 可直接落地的批量执行核心脚本
脚本逻辑完全通用,替换筛选条件即可适配其他软件场景:# 定义系统通用的两个卸载注册表查询路径 $regUninstallPaths = @( "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" ) # 筛选目标程序:此处按Autodesk发布商做匹配,替换筛选逻辑即可适配其他厂商 $targetApps = Get-ItemProperty $regUninstallPaths | Where-Object { $_.Publisher -like "*Autodesk*" -and $_.UninstallString } | Select-Object DisplayName, UninstallString, QuietUninstallString foreach ($app in $targetApps) { Write-Host "开始卸载程序: $($app.DisplayName)" # 优先选择程序自带的静默卸载命令 if ($app.QuietUninstallString) { $execCommand = $app.QuietUninstallString } else { # 处理MSI类型的卸载串 if ($app.UninstallString -match 'MsiExec.exe /I\{(.*)\}') { $productGuid = $matches[1] $execCommand = "MsiExec.exe /X{$productGuid} /quiet /norestart" } else { # 给普通EXE卸载程序追加静默参数 $execCommand = "$($app.UninstallString) /S" } } # 以提权方式同步执行卸载命令,等待单程序卸载完成后再执行下一个 Start-Process -FilePath "cmd.exe" -ArgumentList "/c $execCommand" -Verb RunAs -Wait } - Autodesk场景的补充清理提示
脚本执行完成所有注册条目对应的卸载流程后,可手动清理Autodesk残留的公共安装缓存、系统服务、授权组件,这部分属于Autodesk特有的残留逻辑,不需要纳入通用脚本范围。
内容的提问来源于stack exchange,提问作者ctw
相关产品推荐
相关产品推荐

