已知MSI应用卸载方法,如何用PowerShell卸载EXE安装的Windows应用?
如何用PowerShell卸载EXE安装的Windows应用程序
和MSI应用的卸载思路类似,EXE安装的程序通常也会在Windows注册表中注册卸载信息,你可以通过PowerShell读取这些信息并执行卸载命令。以下是具体步骤和示例:
1. 定位注册表中的卸载项
EXE程序的卸载信息一般存放在两个注册表路径下(覆盖64位和32位程序):
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*
使用Get-ItemProperty命令读取这些路径下的所有卸载项,过滤出包含程序名称和卸载命令的条目:
$allUninstallEntries = Get-ItemProperty -Path @( 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' ) | Where-Object { $_.DisplayName -and $_.UninstallString }
2. 提取目标程序的卸载命令
从结果中筛选出你要卸载的程序,优先使用QuietUninstallString(如果存在)实现静默卸载,否则使用UninstallString:
# 替换为你要卸载的程序名称(支持模糊匹配) $targetProgramName = "XXX软件" $targetEntry = $allUninstallEntries | Where-Object { $_.DisplayName -like "*$targetProgramName*" } if (-not $targetEntry) { Write-Host "未找到目标程序的卸载信息" exit } # 确定最终卸载命令 $uninstallCommand = if ($targetEntry.QuietUninstallString) { $targetEntry.QuietUninstallString } else { $targetEntry.UninstallString }
3. 执行卸载命令
由于卸载命令可能包含带引号的路径和参数,需要拆分命令和参数避免执行错误,使用Start-Process执行:
# 处理带引号的命令路径 if ($uninstallCommand -match '^"([^"]+)"(.*)$') { $exePath = $matches[1] $arguments = $matches[2].Trim() Start-Process -FilePath $exePath -ArgumentList $arguments -Wait -NoNewWindow } else { # 处理不带引号的简单命令 Start-Process -FilePath $uninstallCommand -Wait -NoNewWindow } Write-Host "目标程序卸载命令已执行"
关键注意事项
- 卸载参数差异:不同厂商的EXE卸载程序参数不统一,常见的静默参数有
/S、/quiet、/uninstall /silent等,如果默认的卸载命令无效,需要查阅该程序的官方文档获取正确参数。 - 管理员权限:卸载系统级程序通常需要管理员权限执行PowerShell脚本。
- 无注册表项的情况:部分绿色版或未注册的EXE程序不会写入注册表,此时需要手动找到安装目录下的
uninstall.exe或setup.exe,直接指定路径并添加对应参数执行。
内容的提问来源于stack exchange,提问作者Gunacelan M
相关产品推荐
相关产品推荐

