卸载以特定字符串开头的所有软件

时间:2019-06-07 09:30:40

标签: powershell batch-file cmd command-line uninstall

this issue之后,我想卸载所有National Instruments软件。首先从here输入CMD中的wmic。然后使用命令product get name,我得到了一堆全部以NI开头的软件:

NI Logos 19.0
NI Trace Engine
NI-MXDF 19.0.0f0 for 64 Bit Windows
WIF Core Dependencies Windows 19.0.0
NI-VISA USB Passport 19.0.0
NI-VISA SysAPI x64 support 19.0.0
NI Controller Driver 19.0 64-bit
NI ActiveX Container (64-bit)
Math Kernel Libraries
NI MXS 19.0.0
NI LabWindows/CVI 2019 Network Variable Library
NI-VISA GPIB Passport 19.0.0
NI LabWindows/CVI 2017 Low-Level Driver (Original)
NI-RPC 17.0.0f0 for Phar Lap ETS
NI LabWindows/CVI 2017 .NET Library (64-bit)
...

例如,我可以单独卸载它们:

product where name="NI Logos 19.0" call uninstall

,然后我必须选择y / Y。鉴于我必须卸载许多此类软件,我想知道如何使该过程自动化。步骤应如下所示:

  1. 找到product get nameNI中的所有行,并从中列出一个列表
  2. 上述列表中的for循环运行product where name=list[i] call uninstall,默认运行y / Y

如果您能帮助我解决此问题,我们将不胜感激。感谢您的提前支持。

P.S。 Powershell解决方案也可以。实际上,使用其他任何方式卸载所有这些的其他解决方案对我来说都是可以的。

2 个答案:

答案 0 :(得分:2)

您应该可以将Like运算符与一起使用。

来自

WMIC Product Where "Name Like 'NI%'" Call Uninstall /NoInteractive

来自

WMIC Product Where "Name Like 'NI%%'" Call Uninstall /NoInteractive

没有记录到可供Uninstall调用使用的命令行选项,因此,此处提供使用/NoInteractive的希望更多,而不是为您明确提示的解决方案。

答案 1 :(得分:1)

如果应用程序是从MSI安装的,则可以使用以下PowerShell代码。如果使用了其他安装程序,则可以将静默卸载参数添加到循环中的$uninstallString中:

$productNames  = @("^NI")
$uninstallKeys = @('HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',
                   'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall')

foreach ($key in (Get-ChildItem $uninstallKeys)) 
{
    foreach ($productName in $productNames)
    {
        $name = $key.GetValue("DisplayName")
        if ($name -match $productName) 
        {
            $uninstallString = $key.GetValue("UninstallString")
            if ($uninstallString -match "^msiexec(\.| )")
            {
                $uninstallString = ($uninstallString -replace "/I{","/X{" -replace "/X{", '/X "{' -replace "}",'}"')  + " /qn /norestart"
            }

            Write-Host "Removing '$name' using '$uninstallString'..."
            & cmd.exe /C $uninstallString
        }
    }
}