Se deixado sem supervisão, os ambientes de execução do Java podem se espalhar como fogo em uma empresa. Quando executei um relatório para descobrir como estava o panorama do Java em meu ambiente, encontrei 62 versões diferentes do Java! É hora de retomar o controle e criar um script PowerShell para remover as versões antigas do Java.
Neste tutorial, você aprenderá como criar uma ferramenta de remoção do Java para eliminar versões antigas do Java no PowerShell.
Vamos começar!
Criando o Script
Primeiro, abra seu editor de código favorito, como o Visual Studio Code, e salve o arquivo como Remove-Java.ps1. Este script PowerShell conterá tudo o que você precisa para limpar versões anteriores do Java.
Definindo os Caminhos do Registro
Porque as instâncias do Java podem se esconder em dois lugares no registro, primeiro defina cada uma das chaves de registro pai. O trecho de código abaixo fornece os caminhos do registro de 32 e 64 bits.
Definindo Versões para Manter
Porque você provavelmente deseja manter algumas versões antigas do Java, crie um array com cada uma das versões que deseja manter.
Você pode encontrar o texto exato para usar ao olhar em Programas e Recursos no Painel de Controle.
Encontrar e Interromper Todos os Processos em Execução
Em seguida, encontre todos os processos do Java em execução. O trecho de código abaixo enumera todos os processos em execução com WMI que estão sendo executados com um arquivo em um caminho correspondente a “Program Files\Java“.
Dado que o Java pode se integrar ao Internet Explorer e não pode ser removido, vá em frente e interrompa também todos os processos do Internet Explorer.
Pesquise por Java no Registro e Force uma Desinstalação
Em seguida, construa um filtro que você usará para enumerar todos os valores sob as chaves do registro definidas acima. Este filtro encontra todas as instâncias do Java e exclui todas as versões que você deseja manter.
Agora, pesquise através do registro para encontrar todas as instâncias do Java e, se encontradas, execute msiexec.exe /X
para remover cada instância.
Remova quaisquer Remanescentes Antigos do Java
Limpe quaisquer restos que o desinstalador do Java não consiga se livrar sozinho.
Conclua
E é isso! Execute este script do PowerShell em cada computador que deseja limpar o Java para tornar este processo o mais fácil possível.
Sinta-se à vontade para baixar o script inteiro de uma vez abaixo.
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 | |
} |
Agradecimentos a Sam Turner por me ajudar a corrigir alguns bugs com este código.