如果程序存在,请卸载

时间:2019-02-17 20:20:14

标签: powershell methods uninstall

我正在尝试了解.uninstall()方法。

this link看来,方法.uninstall()仅与Get-WmiObject -Class Win32_Product一起使用时才有效。但这意味着它将仅考虑32位软件,而不考虑64位软件。

所以我写了这几行以卸载64位的Erlang:

# Check if a Software ins installed
function Check_Program_Installed($programName) {
    $x86_check = ((Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall") |
                 Get-ItemProperty |
                 Where-Object {$_.DisplayName -like "*$programName*" } |
                 Select-Object -Property DisplayName, UninstallString) |
                 Format-Table

    if (Test-Path 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall') {
        $x64_check = ((Get-ChildItem "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall") | Get-ItemProperty | Where-Object {$_.DisplayName -like "*$programName*" } | Select-Object -Property DisplayName, UninstallString) | Format-Table
    }
    if ($x86_check -and $x64_check -eq $null) {
        Write-Host "$programName is not installed on this computer" -ForegroundColor Green
        #continue
    } elseif ($x86_check -or $x64_check -ne $null) {
        Write-Host "On this computer is installed " -ForegroundColor Red
        $x86_check
        $x64_check

        $x86_check.uninstall()
        $x64_check.uninstall()
    }
}

# Erlang check
Write-Host "Checking if Erlang exist    " -NoNewline
Check_Program_Installed("Erlang")
Write-Host "The End: the script ends here" -ForegroundColor Yellow

但不幸的是,它返回了错误信息:

  

您不能在空值表达式上调用方法。在   C:\ Users \ Admin \ Desktop \ test.ps1:17 char:3   + $ x86_check.uninstall()   + ~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidOperation:(:) [],RuntimeException       + FullyQualifiedErrorId:InvokeMethodOnNull

     

方法调用失败,因为   [Microsoft.PowerShell.Commands.Internal。 Format.FormatStartData]确实   不包含名为“卸载”的方法。在   C:\ Users \ Admin \ Desktop \ test.ps1:18 char:3   + $ x64_check.uninstall()   + ~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidOperation:(:) [],RuntimeException       + FullyQualifiedErrorId:MethodNotFound

我相信根本原因是变量中有DisplayNameUninstallString,对吧?

我发现的一种使用方法是:

'"C:\Program Files\erl8.3\Uninstall.exe'" | cmd

以进行卸载,但这未使用我要使用的.uninstall()方法。

Microsoft是否在说.uninstall()仅可用于32位体系结构,而对于64位,则需要自己找到出路?

如果是这样的话

1 个答案:

答案 0 :(得分:0)

回复为否。

.uninstall()仅可与Get-WmiObject -Class Win32_Product一起使用,因此将仅卸载32位程序。

可能有另一种方法可以通过以下方法卸载32位和64位程序:

Get-Package "*Erlang*"

至少找到了程序,但是

Get-Package "*Erlang*" | Uninstall-Package -Force

不会卸载