בדיקת בריאות פעילות המדריך: כתיבת תסריט PowerShell

אם תישארו בלתי נפקדים, סביבות ריצת Java יכולות להתפשט כמו אש בעסק. כאשר הרצתי דוח כדי לגלות איך נראה הנוף של Java בסביבתי, מצאתי 62 גרסאות שונות של Java! זה הזמן לשחזר שליטה ולבנות סקריפט PowerShell להסרת גרסאות ישנות של Java.

במדריך זה, תלמד איך ליצור כלי הסרת Java עבור הסרת Java ישנות ב-PowerShell.

בואו נתחיל!

יצירת הסקריפט

ראשית, פתחו את עורך הקוד האהוב עליכם כמו Visual Studio Code ושמרו את הקובץ בשם Remove-Java.ps1. סקריפט PowerShell זה יכיל את כל מה שצריך כדי לנקות גרסאות ישנות של Java.

הגדרת נתיבי הרישום

מכיוון שהתקני Java עשויים להסתתר בשני מקומות ברישום, ראשית עליכם להגדיר את כל אבות נתיבי הרישום. קטע הקוד למטה מספק את נתיבי הרישום ביטים 32 ו-64.

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

הגדרת הגרסאות שיש לשמור עליהן

מכיוון שכנראה תרצו לשמור על חלק מהגרסאות הישנות של Java, עליכם ליצור מערך עם כל הגרסאות שתרצו לשמור עליהן.

ניתן למצוא את הטקסט המדויק לשימוש על ידי הסתכלות על "תוכניות ותכונות" בלוח הבקרה.

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

מציאת ועצירת כל התהליכים הרצים

לאחר מכן, יש למצוא את כל התהליכים הרצים של Java. קטע הקוד למטה מפנה את כל התהליכים הרצים באמצעות WMI שרצים עם קובץ בנתיב התואם ל- "קבצי תוכנה\Java".

מאחר ש-Java עשויה להתמקם בתוך Internet Explorer ולא ניתן להסיר אותה, עליכם גם לעצור את כל התהליכים של 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

מחפש עבור Java ברישום ומכריח את ההסרה

לבצע זאת, בנה פילטר שתשתמש בו כדי לרשום את כל הערכים ברשומת הרישום שהוגדרו למעלה. הפילטר מוצא את כל המופעים של Java ומחריז על כל הגרסאות שתרצה לשמור עליהן

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

עכשיו חפש ברשומת הרישום כדי למצוא את כל המופעים של Java ואם נמצאו, הרץ msiexec.exe /X כדי להסיר כל מופע

# הסר גרסאות של Java שאינך רוצה ונקה את קבצי התוכנית

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

הסר יתרות של גרסאות ישנות של Java

נקה יתרות שלא נמחקו על ידי הסרת Java באמצעות הסרת Java

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
}

סיים

וזהו! הפעל את סקריפט הפוורשל הזה על כל מחשב שברצונך לנקות את Java עליו כדי להפוך את התהליך הזה לכמה שיותר חלק

תן לך להוריד את הסקריפט השלם כאן למטה


$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

תודה ל Sam Turner על עזרה בתיקון כמה באגים בקוד זה.

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