Jump to content

Silently Uninstall All Java Versions


Recommended Posts

So I need to update Java on a lot of devices along with an application.

I started to work on the uninstall part and have one small issue.  Installing 3 versions of Java on my computer for testing it seems to get 2 out of 3 and requires me to run the script again to get the 3rd.  So it is removing it, but question is why do I have to run it again.  I added a Sleep() incase it was a issue with running too fast (Like I ran into the other day with renaming files in a loop) but still the same.

I'll post the source code I have so far and maybe somebody can see my error or offer up a better solution.

 

#RequireAdmin
;Uninstall Strings - HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall

For $i = 1 to 300
    $sKey1 = RegEnumKey("HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\", $i)
        If @Error Then ExitLoop
    $sKey2 = RegRead("HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\" & $sKey1, "DisplayName")
        If @Error Then ContinueLoop
    ;If StringInStr($sKey2, "Java") Then    MsgBox(0, "", $sKey2 & " Uninstall String Is" & @CRLF & @CRLF & $sKey1)
    If StringInStr($sKey2, "Java") Then
        Sleep(1000)
        RunWait(@ComSpec & " /c MsiExec /X " & $sKey1 & " /qn", "C:", @SW_HIDE)
    EndIf
Next

For $i = 1 to 300
    $sKey1 = RegEnumKey("HKLM64\Software\Microsoft\Windows\CurrentVersion\Uninstall\", $i)
        If @Error Then ExitLoop
    $sKey2 = RegRead("HKLM64\Software\Microsoft\Windows\CurrentVersion\Uninstall\" & $sKey1, "DisplayName")
        If @Error Then ContinueLoop
    ;If StringInStr($sKey2, "Java") Then    MsgBox(0, "", $sKey2 & " Uninstall String Is" & @CRLF & @CRLF & $sKey1)
    If StringInStr($sKey2, "Java") Then
        Sleep(1000)
        RunWait(@ComSpec & " /c MsiExec /X " & $sKey1 & " /qn", "C:", @SW_HIDE)
    EndIf
Next

MsgBox(0, "", "Uninstall of All Java Versions Completed")

Edit: Hmm I have an idea of what it might be... Need to test.  If I have two java uninstall strings right next to another and say I was in loop 100/300 and it gets uninstalled.  The second instance of java may then fall into spot #100 in RegEnumKey() and get skipped as the next iteration of the loop would be 101/300

I think I can just add an $i = $i -1 or something in my If Statement so that I repeat that iteration if an uninstall is done.

Edit2: Fixed :)  that was the issue it seems.

Edited by ViciousXUSMC
Link to comment
Share on other sites

  • Moderators

What about going the WMI route?:

$oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & @ComputerName & "\root\cimv2")
$aProducts = $oWMI.ExecQuery("Select * from Win32_Product Where Name LIKE '%Java%'")

For $app in $aProducts
    $app.Uninstall()
Next

 

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

How to get your question answered on this forum!

Link to comment
Share on other sites

Thats a good idea, I know powershell some but not too familiar with how to use it in autoit.

At some point I am going to have to tweak this probably to remove all but Version X of java, I was just going to do If StringInStr() AND NOT StringInStr() kind of thing based on my code above, how would you pull that off in the WMI method?

I assume -LIke '%Java%" -And -NotLIke '%Java 7 Update 55% sort of deal would work?

Edit: More accurately I should say I know WMI with PowerShell since WMI is not Powershell Exclusive.

With PS it would be an easy for me, but the autoit version you posted has a bunch of other stuff I am not familiar with like winmgmtns, impersonationlevel etc.  Do we have a help file for all that somewhere?

Edited by ViciousXUSMC
Link to comment
Share on other sites

  • Moderators

The winmgmts piece is just grabbing the WMI object. I am sure you can find plenty of docs through Google.

As for further filtering, it is a bit unintuitive. One of my installed Java versions ends in Update 3 and this filter works for me:

$aProducts = $oWMI.ExecQuery("Select * from Win32_Product Where Name LIKE '%Java%' and NOT Name LIKE '%Update 3%'")

 

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

How to get your question answered on this forum!

Link to comment
Share on other sites

What about going the WMI route?:

$oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & @ComputerName & "\root\cimv2")
$aProducts = $oWMI.ExecQuery("Select * from Win32_Product Where Name LIKE '%Java%'")

For $app in $aProducts
    $app.Uninstall()
Next

 

What is the purpose of the 

%Java%

Is it a wildcard at either end?, ive seen things on the web like this

%%CoolWebSearch%%

Is that the same?

Link to comment
Share on other sites

WMI Queries use the same wildcards than SQL. %Java% is equivalent to *Java*.

This article can be interesting : http://blogs.technet.com/b/heyscriptingguy/archive/2012/07/13/use-the-like-operator-to-simplify-your-wql-queries.aspx

%Java% filters returns all products with a name containing "java". In my case : JavaScript Tooling, Java(TM) 6 Update 31, Visual Studio Extensions for Windows Library for JavaScript, Java Auto Updater.

So you can improve the filter, using %Java%Update% or something like %Java%[0-9]%update%[0-9]

 

Edit : to familiarize yourself with WMI, you can use some tools like WMIExplorer 2, WMIExplorer, ScriptOMatic... and of course, MSDN

 

Edited by jguinch
Link to comment
Share on other sites

Yeah the SQL like queries are nice but that is another place the PowerShell is different I have to use "*Java*" instead of "%java%"

Get-WmiObject Win32_Product | Where Name -LIke "*Java*"

The search is a bit slow and I have not figure out how to do a single line powershell command to uninstall but I am sure its possible. 

Link to comment
Share on other sites

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library * Include Dependency Tree (Tool for analyzing script relations) * Show_Macro_Values.au3 *

 

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF * SciTE - Lexer for console pane

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

OpenOffice/LibreOffice/XLS Related: WriterDemo.au3 * XLS/MDB from scratch with ADOX

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) * PDF Related:How to get reference to PDF object embeded in IE * IE on Windows 11

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

I also encourage you to check awesome @trancexx code:  * Create COM objects from modules without any demand on user to register anything. * Another COM object registering stuffOnHungApp handlerAvoid "AutoIt Error" message box in unknown errors  * HTML editor

winhttp.au3 related : * https://www.autoitscript.com/forum/topic/206771-winhttpau3-download-problem-youre-speaking-plain-http-to-an-ssl-enabled-server-port/

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2023-04-24

Link to comment
Share on other sites

  • Moderators

@mLipok, your first two links are simply a rehash of what the OP is already trying to do, loop through the registry and uninstall for every instance of Java found.

The second one specifically has to do with using configuration manager. I don't see where the OP states he is using SCCM; unless he is, this link gives him nothing. 

"Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball

How to get your question answered on this forum!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...