Als ze onbeheerd worden gelaten, kunnen Java-runtimeomgevingen zich als een lopend vuurtje verspreiden in een bedrijfsomgeving. Toen ik een rapport draaide om te zien hoe het Java-landschap eruitzag in mijn omgeving, vond ik 62 verschillende versies van Java! Het is tijd om de controle terug te nemen en een PowerShell-script te bouwen om oude Java-versies te verwijderen.
In deze tutorial ga je leren hoe je een Java-verwijderingstool maakt om oude Java in PowerShell te verwijderen.
Laten we beginnen!
Het Script Maken
Allereerst, open je favoriete code-editor zoals Visual Studio Code en sla het bestand op als Remove-Java.ps1. Dit PowerShell-script bevat alles wat je nodig hebt om eerdere Java-versies op te schonen.
Definieer de Registerpaden
Omdat Java-exemplaren zich op twee plaatsen in het register kunnen verbergen, definieer eerst elk van de ouderregisterpaden. De onderstaande codefragment biedt zowel de 32- als 64-bits registerpaden.
Definieer Versies om te Behouden
Omdat je waarschijnlijk wat oude versies van Java wilt behouden, maak een array met elk van de versies die je wilt behouden.
Je kunt de exacte tekst vinden door te kijken naar Programma’s en Functies in het Configuratiescherm.
Vind en Stop alle Lopende Processen
Vervolgens zoek je alle draaiende Java-processen. Het onderstaande codefragment enumereert alle draaiende processen met WMI die worden uitgevoerd met een bestand op een pad dat overeenkomt met “Program Files\Java“.
Aangezien Java zich kan nestelen in Internet Explorer en niet kan worden verwijderd, stop ook alle Internet Explorer-processen.
Zoek naar Java in het Register en dwing een Deïnstallatie af
Maak vervolgens een filter dat je zult gebruiken om alle waarden onder de bovenstaande registersleutels op te sommen. Dit filter zoekt naar alle Java-instanties en sluit alle versies uit die je wilt behouden.
Doorzoek nu het register om alle Java-instanties te vinden en voer, indien gevonden, msiexec.exe /X
uit om elke instantie te verwijderen.
Verwijder eventuele oude overblijfselen van Java
Ruim eventuele restanten op die de Java-deïnstallateur niet automatisch verwijdert.
Wrap up
En dat is het! Voer dit PowerShell-script uit op elke computer waarop je Java wilt opruimen om dit proces zo soepel mogelijk te maken.
Voel je vrij om het volledige script in één keer hieronder te downloaden.
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 | |
} |
Dank aan Sam Turner voor het helpen bij het oplossen van enkele bugs in deze code.