Vérification deVér lification’ét de la santé de lat’ann deua santéire de l Active Directory’ann : Scriptuaingire PowerShell Active Directory : script PowerShell

Si laissés sans surveillance, les environnements d’exécution Java peuvent se propager comme un feu de forêt dans une entreprise. Lorsque j’ai lancé un rapport pour découvrir à quoi ressemblait le paysage Java dans mon environnement, j’ai trouvé 62 versions différentes de Java ! Il est temps de reprendre le contrôle et de construire un script PowerShell pour supprimer les anciennes versions de Java.

Dans ce tutoriel, vous allez apprendre comment créer un outil de suppression de Java pour supprimer les anciennes versions de Java en PowerShell.

Commençons !

Création du Script

Tout d’abord, ouvrez votre éditeur de code préféré comme Visual Studio Code et enregistrez le fichier sous le nom de Remove-Java.ps1. Ce script PowerShell contiendra tout ce dont vous avez besoin pour nettoyer les anciennes versions de Java.

Définir les Chemins du Registre

Étant donné que les instances Java peuvent se cacher à deux endroits dans le registre, commencez par définir chacune des clés de registre parent. Le code ci-dessous fournit à la fois les chemins de registre 32 et 64 bits.

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

Définir les Versions à Conserver

Comme vous voulez probablement conserver certaines anciennes versions de Java, créez un tableau avec chacune des versions que vous souhaitez conserver.

Vous pouvez trouver le texte exact à utiliser en regardant dans Programmes et fonctionnalités dans le Panneau de configuration.

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

Trouver et Arrêter tous les Processus en Cours

Ensuite, trouvez tous les processus Java en cours. Le code ci-dessous énumère tous les processus en cours d’exécution avec WMI qui s’exécutent avec un fichier dans un chemin correspondant à “Program Files\Java“.

Étant donné que Java peut s’intégrer dans Internet Explorer et ne peut pas être supprimé, allez-y et arrêtez également tous les processus 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

Recherchez Java dans le Registre et forcez une désinstallation

Ensuite, créez un filtre que vous utiliserez pour énumérer toutes les valeurs sous les clés de registre définies ci-dessus. Ce filtre trouve toutes les instances de Java et exclut toutes les versions que vous souhaitez conserver.

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

Maintenant, recherchez dans le registre toutes les instances de Java et, si vous en trouvez, exécutez msiexec.exe /X pour supprimer chaque instance.

# Désinstallez les versions indésirables de Java et nettoyez les fichiers du programme

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

Supprimez les vestiges anciens de Java

Nettoyez tous les vestiges que le désinstalleur de Java ne parvient pas à supprimer de lui-même.

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
}

Concluez

Et c’est tout ! Exécutez ce script PowerShell sur chaque ordinateur sur lequel vous souhaitez nettoyer Java pour rendre ce processus aussi transparent que possible.

N’hésitez pas à télécharger l’intégralité du script ci-dessous en une seule fois.


$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

Merci à Sam Turner de m’avoir aidé à corriger certains bugs de ce code.

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