You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:10:13