Se lasciato incustodito, gli ambienti di runtime di Java possono diffondersi come un incendio in un’azienda. Quando ho eseguito un report per scoprire come appariva il panorama di Java nel mio ambiente, ho trovato 62 diverse versioni di Java! È ora di riprendere il controllo e creare uno script di PowerShell per rimuovere le vecchie versioni di Java.
In questo tutorial, imparerai come creare uno strumento di rimozione di Java per rimuovere le vecchie versioni di Java in PowerShell.
Cominciamo!
Creazione dello Script
Prima di tutto, apri il tuo editor di codice preferito come Visual Studio Code e salva il file come Remove-Java.ps1. Questo script di PowerShell conterrà tutto ciò di cui hai bisogno per ripulire le versioni precedenti di Java.
Definire i Percorsi del Registro
Perché le istanze di Java possono nascondersi in due posti nel registro, definisci prima ciascuna delle chiavi del registro principale. Il frammento di codice sottostante fornisce sia i percorsi del registro a 32 che a 64 bit.
Definire le Versioni da Conservare
Perché probabilmente vuoi mantenere alcune vecchie versioni di Java, crea un array con ciascuna delle versioni che desideri mantenere.
Puoi trovare il testo esatto da utilizzare guardando Programmi e Funzionalità nel Pannello di Controllo.
Trovare e Fermare tutti i Processi in Esecuzione
Successivamente, trova tutti i processi Java in esecuzione. Il frammento di codice sottostante enumera tutti i processi in esecuzione con WMI che stanno eseguendo un file in un percorso corrispondente a “Program Files\Java“.
Dato che Java può incorporarsi in Internet Explorer e non può essere rimosso, vai avanti e fermi anche tutti i processi di Internet Explorer.
Cerca Java nel Registro e Forza una Disinstallazione
Successivamente, costruisci un filtro che userai per enumerare tutti i valori sotto le chiavi di registro definite in precedenza. Questo filtro trova tutte le istanze di Java ed esclude tutte le versioni che desideri mantenere.
Ora cerca nel registro per trovare tutte le istanze di Java e, se trovate, esegui msiexec.exe /X
per rimuovere ciascuna istanza.
Rimuovi eventuali Residui Vecchi di Java
Pulisci eventuali residui che il disinstallatore di Java non elimina da solo.
Concludi
E questo è tutto! Esegui questo script PowerShell su ogni computer su cui desideri pulire Java per rendere questo processo il più semplice possibile.
Sentiti libero di scaricare l’intero script in una volta qui sotto.
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 | |
} |
Grazie a Sam Turner per avermi aiutato a risolvere alcuni bug con questo codice.