如何通过PowerShell卸载仅针对特定用户安装的程序?
解决Per-User InnoSetup程序的卸载及安装排除问题
为什么Win32_Product找不到你的程序
Get-WmiObject -Class Win32_Product仅枚举**机器级(Per-Machine)**安装的程序,Per-User(仅当前用户)安装的程序不会出现在这个列表里——因为它们的卸载信息存放在用户专属的注册表分支HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall,而非系统级的HKLM路径。
方法一:通过注册表查找并执行卸载
直接读取用户注册表中的卸载条目,调用对应的卸载程序:
# 定位目标程序的卸载注册表项 $uninstallEntry = Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" | Where-Object { $_.DisplayName -eq "Program Name" } if ($uninstallEntry) { # 提取卸载命令,添加InnoSetup静默参数 $uninstallCmd = $uninstallEntry.UninstallString.Trim('"') + " /verysilent /suppressmsgboxes" # 执行卸载,等待完成 Start-Process -FilePath $uninstallCmd.Split(' ')[0] -ArgumentList $uninstallCmd.Split(' ')[1..-1] -Wait } else { Write-Host "未找到目标程序的卸载信息" }
/verysilent:完全静默卸载,无任何界面/suppressmsgboxes:禁止弹出任何提示框,适合自动化脚本场景
方法二:直接调用InnoSetup卸载程序
Per-User安装的InnoSetup程序,卸载程序通常位于用户的AppData\Local\Programs目录下(比如C:\Users\myuser\AppData\Local\Programs\[你的程序名]\unins000.exe),如果知道具体路径,可直接执行:
Start-Process -FilePath "C:\Users\myuser\AppData\Local\Programs\YourApp\unins000.exe" -ArgumentList "/verysilent" -Wait
在Manager安装流程中排除该程序
根据Manager的部署逻辑,可采用以下方式:
- 如果Manager支持部署清单编辑:直接从清单中移除该程序的安装条目;
- 如果Manager通过脚本驱动安装:在安装前置脚本中增加判断——检查当前用户的
HKCU注册表卸载分支或程序安装路径是否存在该程序,若存在则跳过安装步骤; - 若Manager支持用户级部署排除:配置规则,针对目标用户跳过该程序的安装。
内容的提问来源于stack exchange,提问作者Mina Maras
相关产品推荐
相关产品推荐

