إذا تركت دون رقابة، يمكن أن تنتشر بيئات تشغيل Java كالحرائق في الشركات. عندما قمت بتشغيل تقرير لمعرفة كيفية الوضع الحالي لبيئة Java في بيئتي، اكتشفت وجود 62 نسخة مختلفة من Java! حان الوقت لاستعادة السيطرة وإنشاء سكريبت PowerShell لإزالة النسخ القديمة من Java.
في هذا الدليل، ستتعلم كيفية إنشاء أداة إزالة Java باستخدام PowerShell.
لنبدأ!
إنشاء السكريبت
أولاً، قم بفتح محرر الشيفرة المفضل لديك مثل Visual Studio Code واحفظ الملف بتسمية Remove-Java.ps1. سيحتوي هذا السكريبت PowerShell على كل ما تحتاجه لتنظيف النسخ القديمة من Java.
تعريف مسارات التسجيل
نظرًا لأن حالات Java يمكن أن تختبئ في مكانين في التسجيل، قم أولاً بتعريف كل من مفاتيح التسجيل الرئيسية الأم. يوفر مقتطف الشيفرة أدناه مسارات التسجيل لكل من الإصدارين 32 و 64 بت.
تعريف الإصدارات المراد الاحتفاظ بها
لأنه من المحتمل أنك ترغب في الاحتفاظ ببعض الإصدارات القديمة من Java، قم بإنشاء مصفوفة تحتوي على كل الإصدارات التي ترغب في الاحتفاظ بها.
يمكنك العثور على النص الدقيق للاستخدام عن طريق البحث في “البرامج والميزات” في لوحة التحكم.
البحث وإيقاف جميع العمليات الجارية
فيما بعد، ابحث عن جميع عمليات Java الجارية. يستخدم مقتطف الشيفرة أدناه استعراض جميع العمليات الجارية باستخدام WMI التي تعمل بملف في مسار يتطابق مع “Program Files\Java”.
نظرًا لأن Java يمكن أن تضم نفسها داخل Internet Explorer ولا يمكن إزالتها، قم بإيقاف جميع عمليات Internet Explorer أيضًا.
بحث في السجل عن Java وفرض إلغاء التثبيت
بعد ذلك، قم ببناء عامل تصفية ستستخدمه لتعداد جميع القيم تحت مفاتيح السجل المحددة أعلاه. يقوم هذا العامل بالعثور على جميع حالات Java واستبعاد جميع الإصدارات التي ترغب في الاحتفاظ بها.
الآن ابحث في السجل للعثور على جميع حالات Java وإذا تم العثور عليها، قم بتشغيل msiexec.exe /X
لإزالة كل حالة.
قم بإزالة أي بقايا قديمة لـ Java
قم بتنظيف أي بقايا لا تقوم بإزالتها أداة إلغاء التثبيت الخاصة بـ Java بمفردها.
انتهى
وهذا هو الكل! قم بتشغيل هذا النص البرمجي PowerShell على كل جهاز تود تنظيف 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 للمساعدة في إصلاح بعض الأخطاء في هذا الكود.