Если оставить без присмотра, среды выполнения Java могут распространяться как огонь в степи в предприятии. Когда я запустил отчет, чтобы узнать, какова ситуация с Java в моей среде, я обнаружил 62 разные версии Java! Пора взять ситуацию под контроль и создать сценарий PowerShell для удаления старых версий Java.
В этом руководстве вы узнаете, как создать инструмент для удаления Java в PowerShell.
Давайте начнем!
Создание сценария
Сначала откройте свой любимый редактор кода, такой как Visual Studio Code, и сохраните файл как Remove-Java.ps1. Этот сценарий PowerShell будет содержать все необходимое для очистки предыдущих версий Java.
Определение путей в реестре
Поскольку экземпляры Java могут скрываться в двух местах в реестре, сначала определите каждый из родительских ключей реестра. Нижеприведенный фрагмент кода предоставляет пути к реестру как для 32-, так и для 64-разрядных систем.
Определение версий для сохранения
Поскольку вы, вероятно, хотите оставить некоторые старые версии Java, создайте массив с каждой из версий, которые вы хотели бы сохранить.
Вы можете найти точный текст для использования, посмотрев на раздел “Программы и компоненты” в Панели управления.
Поиск и остановка всех запущенных процессов
Затем найдите все запущенные процессы Java. Нижеприведенный фрагмент кода перечисляет все запущенные процессы с помощью WMI, которые работают с файлом в пути, соответствующем “Program Files\Java“.
Поскольку Java может внедряться в Internet Explorer и не может быть удалена, прекратите все процессы Internet Explorer.
Поиск Java в реестре и принудительное удаление
Затем создайте фильтр, который вы будете использовать для перечисления всех значений под определенными ключами реестра. Этот фильтр находит все экземпляры Java и исключает все версии, которые вы хотели бы сохранить.
Теперь выполните поиск в реестре, чтобы найти все экземпляры Java и, если они найдены, запустите msiexec.exe /X
, чтобы удалить каждый экземпляр.
Удалите любые остатки старой Java
Очистите любые остатки, которые не удаляет сам установщик Java.
Завершение
И все! Запустите этот сценарий PowerShell на каждом компьютере, который вы хотите очистить от Java, чтобы сделать этот процесс максимально гладким.
Не стесняйтесь загрузить весь сценарий целиком ниже.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$RegUninstallPaths = @( | |
‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall‘, | |
‘HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall‘ | |
) | |
$VersionsToKeep = @(‘Java 8 Update 261‘) | |
Get-CimInstance –ClassName ‘Win32_Process‘ | Where-Object {$_.ExecutablePath -like ‘*Program Files\Java*‘} | | |
Select-Object @{n=‘Name‘;e={$_.Name.Split(‘.‘)[0]}} | Stop-Process –Force | |
Get-process –Name *iexplore* | Stop-Process –Force –ErrorAction SilentlyContinue | |
$UninstallSearchFilter = {($_.GetValue(‘DisplayName‘) -like ‘*Java*‘) -and (($_.GetValue(‘Publisher‘) -eq ‘Oracle Corporation‘)) -and ($VersionsToKeep -notcontains $_.GetValue(‘DisplayName‘))} | |
# Uninstall unwanted Java versions and clean up program files | |
foreach ($Path in $RegUninstallPaths) { | |
if (Test-Path $Path) { | |
Get-ChildItem $Path | Where-Object $UninstallSearchFilter | | |
foreach { | |
Start-Process ‘C:\Windows\System32\msiexec.exe‘ “/X$($_.PSChildName) /qn“ –Wait | |
} | |
} | |
} | |
New-PSDrive –Name HKCR –PSProvider Registry –Root HKEY_CLASSES_ROOT | Out-Null | |
$ClassesRootPath = “HKCR:\Installer\Products“ | |
Get-ChildItem $ClassesRootPath | | |
Where-Object { ($_.GetValue(‘ProductName‘) -like ‘*Java*‘)} | Foreach { | |
Remove-Item $_.PsPath –Force –Recurse | |
} | |
$JavaSoftPath = ‘HKLM:\SOFTWARE\JavaSoft‘ | |
if (Test-Path $JavaSoftPath) { | |
Remove-Item $JavaSoftPath –Force –Recurse | |
} |
Благодаря Сэму Тёрнеру за помощь в исправлении некоторых ошибок в этом коде.