Files
management-scripts/Uninstall-Java.ps1
2020-08-14 14:19:37 -04:00

60 lines
2.3 KiB
PowerShell

## Get all of the uninstall registry keys
$UNINSTALL_KEYS = Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
$UNINSTALL_KEYS += Get-ChildItem -Path HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
## Create an empty list to store all of the MSI operations
$MSI_OPS = @{}
Foreach ( $reg in $UNINSTALL_KEYS )
{
## Get each uninstall key
$reg_property = Get-ItemProperty -Path $reg.PSPath
## Make sure the DisplayName matches "Java 8" or "Java 7"
If ( ($reg_property.DisplayName -ilike "Java* 8 *") -or ($reg_property.DisplayName -ilike "Java* 7 *") )
{
## Make sure the software was installed using an MSI
If ( $reg_property.WindowsInstaller -eq 1 )
{
## Placeholder to make sure we add the current item to $MSI_OPS
$ADD_ITEM = $true
## Get the product code from the UninstallString
If ( $reg_property.UninstallString )
{
## Strip away the command part of UninstallString and only return the MSI product code
$PRODUCT_CODE = $reg_property.UninstallString.Replace('MsiExec.exe /X','')
}
## Get the product code from the ModifyPath
ElseIf ( $reg_property.ModifyPath )
{
## Strip away the command part of ModifyPath and only return the MSI product code
$PRODUCT_CODE = $reg_property.ModifyPath.Replace('MsiExec.exe /X','')
}
## Since we can't get a product code, make sure we don't add this item to $MSI_OPS
Else { $ADD_ITEM = $false }
## Add the DisplayName and $PRODUCT_CODE to $MSI_OPS
If ( $ADD_ITEM ) { $MSI_OPS.Add( $reg_property.DisplayName, $PRODUCT_CODE ) }
}
}
}
## Uninstall each of the products in $MSI_OPS
Foreach ( $app in $MSI_OPS.Keys )
{
Write-Output $app
$args = '/X{0} /qn /norestart' -f $MSI_OPS[$app]
Start-Process -FilePath "msiexec.exe" -ArgumentList $args -Wait
}
# Delete lingering directories and binary files
If ( Test-Path "${Env:ProgramData}\Oracle\Java" )
{
Write-Output "Deleting ${Env:ProgramData}\Oracle\Java\*"
Try { Remove-Item -Path "${Env:ProgramData}\Oracle\Java" -Recurse -Force }
Catch { Write-Output $_ }
}