Удалить приложение без вывода сообщений с помощью Powershell - PullRequest
1 голос
/ 14 февраля 2020

У меня есть следующий скрипт Powershell, который я использую, чтобы получить строку удаления для Google Chrome, а затем я хочу удалить его в автоматическом режиме. Строка 3 в скрипте вызовет деинсталлятор GUI (так что кажется, что пока все правильно), но если я добавлю "/ qn" или "/ quiet" в список аргументов, удаление, похоже, не бежать вообще, даже если я оставлю на пару часов. Чего мне не хватает?

    $AppName = "Google Chrome"
    $Chrome = Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | Get-ItemProperty | Where-Object {$_.DisplayName -match $($AppName)}
    Start-Process -Wait -FilePath MsiExec.exe -Argumentlist "/X",$Chrome.UninstallString.TrimStart("MsiExec.exe /X")

Заранее спасибо за помощь,

Андрей

Ответы [ 2 ]

2 голосов
/ 14 февраля 2020

Если это MSI, вы можете использовать uninstall-package:

get-package *chrome* | uninstall-package -whatif
0 голосов
/ 14 февраля 2020

вместо того, чтобы пытаться использовать / X и удалять / X и другие вещи, попробуйте следующее

# Get the key to uninstall
$chromeUninstall = $Chrome.Pspath.Split("\")[-1]

Start-Process -Wait -FilePath MsiExec.exe -Argumentlist "/X $ChromeUninstall /quiet /norestart"

или еще проще,

Start-Process -Wait cmd.exe -ArgumentList "/c msiexec /X $ChromeUninstall /quiet /norestart"

/c - переносит из команды, указанной в строке, а затем завершается


Примечание

В моей системе я получаю две строки удаления. Возможно, вы захотите подумать о цикле или выборе первого из списка с использованием [0]

...