首页 > 解决方案 > 使用注册表卸载字符串 powershell 卸载

问题描述

我正在尝试创建一个 powershell 脚本,它将卸载我们工作室中所有版本的程序。

我查看了注册表,可以看到我们的工作室计算机中安装了 3 个程序字符串

{D4BE10F2-3E2D-4120-863A-765623D53264}
{77067FD9-800C-48B4-803D-569642ADABC5}
{1DB1AEB7-EDBD-4BB1-87DB-26C72576DA42}

我创建了一个测试脚本:

msiexec.exe /x{D4BE10F2-3E2D-4120-863A-765623D53264} /q

并在机器上使用它,这有效并且该版本的程序已被卸载。

我想创建一个脚本,循环所有 3 个字符串并在正确的字符串上成功,因为如果不进行扫描,我不知道哪台机器有什么版本。

所以我创建了一个`powershell脚本:

foreach ($guid in '{D4BE10F2-3E2D-4120-863A-765623D53264}', 
                  '{77067FD9-800C-48B4-803D-569642ADABC5}', 
                  '{1DB1AEB7-EDBD-4BB1-87DB-26C72576DA42}') {

  $exe = 'C:\Windows\System32\msiexec.exe'

  $ps = Start-Process -PassThru -Wait $exe "/x /q" 

  if ($ps.ExitCode -eq 0) { "Success"; exit 0 }

}

Write-Warning "Uninstallation failed."
exit $ps.ExitCode

这对我不起作用,因为它不断返回卸载失败,我不确定发生了什么。

有什么建议吗?

标签: arrayspowershellbatch-fileforeachregistry

解决方案


即使安装了所有三个版本,这也将起作用:

foreach ($guid in '{D4BE10F2-3E2D-4120-863A-765623D53264}', 
                  '{77067FD9-800C-48B4-803D-569642ADABC5}', 
                  '{1DB1AEB7-EDBD-4BB1-87DB-26C72576DA42}') {

    $exe = 'C:\Windows\System32\msiexec.exe'
    $ps = Start-Process $exe -ArgumentList "/x$guid /q" -PassThru -Wait 
    if ($ps.ExitCode -eq 0) {
        Write-Host "$($guid): Success"
    } else {
        Write-Host "$($guid): Failed"
    }
}

推荐阅读