Controllo dello stato di salute di Active Directory: Scripting con PowerShell

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.

$RegUninstallPaths = @(
   'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',
    'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall'
)

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.

$VersionsToKeep = @('Java 8 Update 261')

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.

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

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.

$UninstallSearchFilter = {($_.GetValue('DisplayName') -like '*Java*') -and (($_.GetValue('Publisher') -eq 'Oracle Corporation')) -and ($VersionsToKeep -notcontains $_.GetValue('DisplayName'))}

Ora cerca nel registro per trovare tutte le istanze di Java e, se trovate, esegui msiexec.exe /X per rimuovere ciascuna istanza.

# Disinstalla le versioni indesiderate di Java e pulisci i file del programma

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
    
        }
    }
}

Rimuovi eventuali Residui Vecchi di Java

Pulisci eventuali residui che il disinstallatore di Java non elimina da solo.

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
}

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.


$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
}
view raw

Remove-Java.ps1

hosted with ❤ by GitHub

Grazie a Sam Turner per avermi aiutato a risolvere alcuni bug con questo codice.

Source:
https://adamtheautomator.com/removing-old-java/