使用Powershell使用部分匹配来卸载已安装的程序

时间:2018-10-05 17:34:39

标签: powershell

我在Windows 10和7中安装了一些以(在“卸载程序”中)开头的程序

  

“ Python info.data-5.332234”“ Python delta.ind-5.332234”“ Python   module.data-15.332234“” Python hatch.back-0.332234“

我尝试过使用PowerShell与部分匹配项进行尝试和卸载的各种脚本,但是似乎都没有一个可以卸载程序。

这是我使用的最新脚本,无法正常运行...它会卸载注册表项,但实际上并未从“卸载程序”中删除文件夹或该项

$remove = @('Python info.data', 'Python delta.ind', 'Python module.data', 'Python hatch.back')

foreach ($prog_name in $remove) {

Write "Uninstalling" % $prog_name
$uninstall32 = gci "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" | foreach { gp $_.PSPath } | ? { $_ -match $prog_name } | select UninstallString


if ($uninstall32) {

$uninstall32 = $uninstall32.UninstallString -Replace "msiexec.exe","" -Replace "/I","" -Replace "/X",""
$uninstall32 = $uninstall32.Trim()
Write "Uninstalling..."
Write $uninstall32
start-process "msiexec.exe" -arg "/X $uninstall32 /qn" -Wait}

}

1 个答案:

答案 0 :(得分:0)

问题是,变量$uninstall32可以包含多个条目。 在启动msiexec之前添加$uninstall32.GetType(),以检查变量是否包含多个字符串。如果是这样,则msiexec将不会运行,因为您一次要传递两个GUID。

使用Win32_Product WMI类获取所需应用程序的GUID。

$remove = @('Python info.data', 'Python delta.ind', 'Python module.data', 'Python hatch.back')

foreach ($prog_name in $remove) {    
    $uninstall32 = @(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '$prog_name%'")
    foreach ($product in $uninstall32) {
        Write "Uninstalling...`n$($product.Name)"
        $exitCode = (Start-Process "msiexec.exe" -ArgumentList "/X $($product.IdentifyingNumber) /qn" -Wait -PassThru).ExitCode    
        Write "$($product.Name) return ExitCode: $exitCode"
    }       
}

另外,在-PassThrue CMDLet上添加Start-Process开关,并捕获/输出每个卸载过程的ExitCode。

确保您的Powershell / ISE以提升的特权运行。