You need to enable JavaScript to run this app. 如何用PowerShell按发布商批量执行卸载字符串?以Autodesk为例
优惠活动
大模型
产品
解决方案
定价
更多

如何用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),适配绝大多数厂商的静默规则
  • 可直接落地的批量执行核心脚本
    脚本逻辑完全通用,替换筛选条件即可适配其他软件场景:
    # 定义系统通用的两个卸载注册表查询路径
    $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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.08 22:36:00