אם תישארו בלתי נפקדים, סביבות ריצת Java יכולות להתפשט כמו אש בעסק. כאשר הרצתי דוח כדי לגלות איך נראה הנוף של Java בסביבתי, מצאתי 62 גרסאות שונות של Java! זה הזמן לשחזר שליטה ולבנות סקריפט PowerShell להסרת גרסאות ישנות של Java.
במדריך זה, תלמד איך ליצור כלי הסרת Java עבור הסרת Java ישנות ב-PowerShell.
בואו נתחיל!
יצירת הסקריפט
ראשית, פתחו את עורך הקוד האהוב עליכם כמו Visual Studio Code ושמרו את הקובץ בשם Remove-Java.ps1. סקריפט PowerShell זה יכיל את כל מה שצריך כדי לנקות גרסאות ישנות של Java.
הגדרת נתיבי הרישום
מכיוון שהתקני Java עשויים להסתתר בשני מקומות ברישום, ראשית עליכם להגדיר את כל אבות נתיבי הרישום. קטע הקוד למטה מספק את נתיבי הרישום ביטים 32 ו-64.
הגדרת הגרסאות שיש לשמור עליהן
מכיוון שכנראה תרצו לשמור על חלק מהגרסאות הישנות של Java, עליכם ליצור מערך עם כל הגרסאות שתרצו לשמור עליהן.
ניתן למצוא את הטקסט המדויק לשימוש על ידי הסתכלות על "תוכניות ותכונות" בלוח הבקרה.
מציאת ועצירת כל התהליכים הרצים
לאחר מכן, יש למצוא את כל התהליכים הרצים של Java. קטע הקוד למטה מפנה את כל התהליכים הרצים באמצעות WMI שרצים עם קובץ בנתיב התואם ל- "קבצי תוכנה\Java".
מאחר ש-Java עשויה להתמקם בתוך Internet Explorer ולא ניתן להסיר אותה, עליכם גם לעצור את כל התהליכים של Internet Explorer.
מחפש עבור Java ברישום ומכריח את ההסרה
לבצע זאת, בנה פילטר שתשתמש בו כדי לרשום את כל הערכים ברשומת הרישום שהוגדרו למעלה. הפילטר מוצא את כל המופעים של Java ומחריז על כל הגרסאות שתרצה לשמור עליהן
עכשיו חפש ברשומת הרישום כדי למצוא את כל המופעים של Java ואם נמצאו, הרץ msiexec.exe /X
כדי להסיר כל מופע
הסר יתרות של גרסאות ישנות של Java
נקה יתרות שלא נמחקו על ידי הסרת Java באמצעות הסרת Java
סיים
וזהו! הפעל את סקריפט הפוורשל הזה על כל מחשב שברצונך לנקות את Java עליו כדי להפוך את התהליך הזה לכמה שיותר חלק
תן לך להוריד את הסקריפט השלם כאן למטה
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 | |
} |
תודה ל Sam Turner על עזרה בתיקון כמה באגים בקוד זה.