Как удалить все оракулы Java с помощью PowerShell - PullRequest
0 голосов
/ 27 ноября 2018

Я хотел бы начать с того, что я прочитал некоторые другие темы по этому вопросу, но на данный момент я все еще должен это сделать (решение принято выше моего уровня оплаты).

Мы находимся впроцесс перемещения и тестирования Azul Java, чтобы увидеть, насколько хорошо это работает для нас.Тем временем мне нужно выяснить, как создать сценарий удаления всей Java-версии Oracle (желательно, чтобы у меня был сценарий для JRE и другой для JDK).

В настоящее время я удаляю версии Java, используя списокиз всех версий jre, которые делают msiexec /x "GUID of the java version" /qn, но это невероятно много времени, поэтому я хотел прагматично получить эти строки.

Сейчас я запускаю следующую команду:

Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -like 'Java*'}

enter image description here

Однако я пытаюсь выяснить, как автоматически получить IdentifyNumber для каждого результата, если Vendor = Oracle Corporation, и передать его команде msiexec для их проблемного удаления.Azul устанавливается в той же системе, в которой выполняется команда, но она не отображается (это хорошо, но на всякий случай я хотел получить квалификатор поставщика).

Мой вопрос: может ли кто-нибудь помочь мне передатьИдентификационный номер продукта в команду msiexec при условии, что Поставщиком является Oracle Corporation

Заранее благодарен.

Обновление 1: по отзывам Дрю и Ансгара

$Source = Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*
$Uninstall = $Source | Where-Object {($_.Publisher -like '*Oracle*')-and ($_.DisplayName -like 'Java*')} | select UninstallString
$UninstallString = $Uninstall.UninstallString
$UninstallSting | ForEach-Object{Invoke-Expression -ScriptBlock ($UninstallString)}

ОднакоКажется, я не могу правильно передать струны, так как продолжаю получать:

Invoke-Command : Cannot convert 'System.Object[]' to the type 'System.Management.Automation.ScriptBlock' required by parameter 'ScriptBlock'. Specified method 
is not supported.
At C:\Konstantin\Java\UninstallAllJava.ps1:8 char:62
+ ... ting | ForEach-Object{Invoke-Command -ScriptBlock ($UninstallString)}
+                                                       ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Command], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.InvokeCommandCommand

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Итак, я смог разобраться, вот что я придумала, и похоже, что она работает

Установите переменную "Source" в местоположение реестра

$Source = Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*

Установить переменную "Uninstall" для наследования от источника и уменьшить область видимости для Oracle и Java

$Uninstall = $Source | Where-Object {($_.Publisher -like '*Oracle*')-and ($_.DisplayName -like 'Java*')} | select UninstallString

Установить переменную "UninstallString", чтобы получить только строку удаления из "Переменная Uninstall

$UninstallStrings = $Uninstall.UninstallString -replace "MsiExec.exe ","MsiExec.exe /qn " -replace "/I","/X"

Запустите все строки удаления

ForEach($UninstallString in $UninstallStrings){& cmd /c "$UninstallString"}

Я уверен, что это может быть намного чище, но это лучшее, что ямогу сделать сейчас.Для некоторых версий java строки удаления будут давать переменную / i вместо / x (JDK 6), поэтому мне пришлось сделать второй оператор замены.

Пример:

UninstallString                                     
---------------                                     
MsiExec.exe /X{26A24AE4-039D-4CA4-87B4-2F03217079FF}
MsiExec.exe /X{26A24AE4-039D-4CA4-87B4-2F83216045FF}
MsiExec.exe /I{32A3A4F4-B792-11D6-A78A-00B0D0160450}
0 голосов
/ 27 ноября 2018

Я бы порекомендовал метод реестра.

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | 
Where-Object {$_.Publisher -like '*oracle*'} | select UninstallString

Это даст вам ссылку MsiExec.exe.EG MsiExec.exe /X{26A24AE4-039D-4CA4-87B4-2F32180181F0}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...