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

如何通过PowerShell从注册表提取应用的MSI产品代码

提取MSI产品代码并完善卸载脚本

核心实现方案

要从MsiExec.exe /I{629388F2-A011-4F5C-A6BF-98A80A25317C}这类卸载字符串中提取{...}格式的产品代码,可通过正则匹配实现,同时修正脚本中变量传递的问题。以下是修改后的完整代码:

修改后的PowerShell脚本

# 定义需要遍历的注册表卸载路径
$paths = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall', 
         'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall'

# 查找目标应用并提取产品代码
$productCode = Get-ChildItem $paths |
    Where-Object { $_.GetValue('DisplayName') -match 'APP' } | 
    ForEach-Object { 
        $uninstallString = $_.GetValue('UninstallString')
        # 用正则匹配提取{GUID}格式的产品代码
        if ($uninstallString -match '\{[0-9A-F-]+\}') {
            $matches[0]
        }
    }

# 验证产品代码存在后执行卸载
if ($productCode) {
    doRemoveMSI -msi "msiexec.exe" -arguments '/x', $productCode, '/quiet', 'REBOOT=R', '/L*V "C:\msilog.log"'
} else {
    Write-Warning "未找到目标APP的卸载产品代码"
}

关键修改说明

  • 正则提取逻辑:\{[0-9A-F-]+\}精准匹配标准GUID格式的产品代码,不管卸载字符串是/I还是/X开头,都能正确提取目标内容。
  • 变量传递修正:原脚本中'$uninstallString'是字符串字面量,会直接传递$uninstallString文本而非变量值,改为直接使用$productCode即可传递实际提取到的产品代码。
  • 增加有效性检查:避免因未找到目标APP导致卸载命令无意义执行,添加判断逻辑并输出警告提示。

内容的提问来源于stack exchange,提问作者Arbelac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:10:01