通过PowerShell使用uninstallstring来卸载程序

时间:2019-07-10 13:15:58

标签: powershell

我现在遇到的问题是,当我通过PowerShell运行代码时,它正在更改卸载字符串的值并在其之前添加变量名称。我希望得到的结果是这个。

MsiExec.exe /X{2C5B24AD-9F13-52A1-KA2N-8K4A41DC9L4G}

但是在将/I替换为/X并执行.Trim()之后,我从变量中得到的结果如下:

@{UninstallString=/X{2C5B24AD-9F13-52A1-KA2N-8K4A41DC9L4G}}

所以我想知道你们是否能够从下面我的代码中告诉我我哪里出问题了。

我必须用/I替换/X,因为卸载字符串首先像这样MsiExec.exe /I{2C5B24AD-9F13-52A1-KA2N-8K4A41DC9L4G}回来,并且我正在尝试卸载而不是安装。

if ($Uninstall_str) {
    #run uninstall here
    try {
        $Uninstall_str = $Uninstall_str -replace 'MsiExec.exe /I', '/X'
        $Uninstall_str = $Uninstall_str.Trim()
        Start-Process "msiexec.exe" -Arg "$Uninstall_str /qb" -Wait
    } catch {
        Write-Output $_.Exception.Message
        Write-Output $_.Exception.ItemName
        Write-Warning "Error unintalling."
    }
}

2 个答案:

答案 0 :(得分:1)

从注册表中读取时,您没有展开UninstallString值。您执行此操作的代码可能看起来像这样:

$Uninstall_str = Get-ItemProperty 'HKLM:\...\Uninstall\Something' |
                 Select-Object UninstallString

替换为

$Uninstall_str = Get-ItemProperty 'HKLM:\...\Uninstall\Something' |
                 Select-Object -Expand UninstallString

问题将消失。

答案 1 :(得分:0)

要摆脱@ {uninstallstring,我要做的就是指定要在此行上修剪的东西

$Uninstall_str = $Uninstall_str.Trim()

因此该行更改为以下内容,以接收我想要的结果。

$Uninstall_str = $Uninstall_str.Trim("@{UninstallString=")