【问题标题】:Using uninstallstring through PowerShell to uninstall program通过PowerShell使用uninstallstring卸载程序
【发布时间】:2019-07-10 21:40:02
【问题描述】:

我现在遇到的问题是,当我通过 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."
    }
}

【问题讨论】:

    标签: powershell


    【解决方案1】:

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

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

    替换为

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

    问题就会消失。

    【讨论】:

      【解决方案2】:

      要摆脱@{uninstallstring,我需要做的就是指定我在这一行上修剪的内容

      $Uninstall_str = $Uninstall_str.Trim()
      

      因此该行更改为以下内容以接收我正在寻找的结果。

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

      【讨论】:

      • 这只会从字符串的开头删除@{UninstallString=,但会在末尾留下一个虚假的尾随}。不要那样做。而是解决问题的根本原因,如我的回答中所述。
      猜你喜欢
      • 1970-01-01
      • 2020-07-01
      • 2018-08-11
      • 2013-01-21
      • 2016-03-17
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      相关资源
      最近更新 更多