Удалить аргументы из UninstallString - PullRequest
0 голосов
/ 11 июня 2018

Я извлекаю строку удаления из программы удаления Chrome для автоматической тихой деинсталляции, используя это:

$UninstallStrings = Get-ItemProperty -Path "HKLM:\SOFTWARE\WoW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" |
    Where-Object{$_.DisplayName -like $ProgramName} |
    Select-Object -ExpandProperty UninstallString -ea SilentlyContinue

, что дает мне такой результат:

"C:\Program Files (x86)\Google\Chrome\Application\67.0.3396.79\Installer\setup.exe" --uninstall --system-level

Теперь перейдем кдумаю, мне нужно обрезать аргументы результата, а затем выполнить Start-Process.Любой может подсказать правильный способ удаления аргументов и добавления их как -ArgumentsList после?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018
$ProgramName = "Google Chrome"
$EXEArgumente = "--uninstall --force-uninstall --system-level"
$UninstallStrings = Get-ItemProperty -Path "HKLM:\SOFTWARE\WoW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | Where-Object{$_.DisplayName -like $ProgramName} | Select-Object -ExpandProperty UninstallString -ea SilentlyContinue

$ExpandedUninstallString = $UninstallStrings -split "--" -replace "`"",""
$UninstallCommand = $ExpandedUninstallString[0]

Start-Process $UninstallCommand -ArgumentList "$EXEArgumente"

Вот так у меня сейчас получилось.Спасибо за помощь!

0 голосов
/ 11 июня 2018

Довольно простой способ, который я могу придумать, чтобы получить только путь установки, состоит в том, чтобы выполнить разбиение на основе специального символа, используемого для инициации аргументов, в данном случае, '-', с последующим выбором первой записи врезультирующий массив.

Например, если вы находитесь в этой точке:

$UninstallStrings = Get-ItemProperty -Path "HKLM:\SOFTWARE\WoW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" |
Where-Object{$_.DisplayName -like $ProgramName} |
Select-Object -ExpandProperty UninstallString -ea SilentlyContinue

Затем вы можете взять эту переменную, разделив ее следующим образом:

$ExpandedUninstallString = $UninstallStrings -split "--"
$UninstallCommand = $ExpandedUninstallString[0]
$Arguments = $ExpandedUninstallString[1..($ExpandedUninstallString.Length)]

Что должно установить значение $ UninstallCommand равным строке, указывающей только на деинсталлятор, а также настройку существующих аргументов в этом массиве $ Arguments.

Также обратите внимание, что это нельзя расширить, чтобы охватить другие приложения, если вы не настроите его с помощьюнекоторые операторы if для проверки того, какой символ используется установочной строкой в ​​качестве аргументов для этого конкретного приложения, и адаптировать разделитель разделения к этому конкретному списку аргументов.

...