Удалить все программное обеспечение, начиная с определенной строки - PullRequest
1 голос
/ 07 июня 2019

После этой проблемы я хочу удалить все программное обеспечение National Instrument.С здесь сначала введите wmic в CMD.Затем, используя команду 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 name, начиная с NI, и составить из него список
  2. a для цикла в приведенном выше спискеработает product where name=list[i] call uninstall со значением по умолчанию y / Y

Буду признателен, если вы поможете мне с этим вопросом.Спасибо за вашу поддержку заранее.

PS Решения Powershell также в порядке.На самом деле, любое другое решение для удаления всех этих файлов любым другим способом - это нормально для меня.

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

Вы сможете использовать оператор Like с .

С

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

С

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

Не задокументированы параметры командной строки, доступные для вызова Uninstall, поэтому использование /NoInteractive предлагается здесь скорее в надежде, чем в качестве окончательного решения вашей проблемы.заявленная подсказка.

1 голос
/ 07 июня 2019

Если приложения были установлены из 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
        }
    }
}
...