60 lines
2.3 KiB
PowerShell
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 $_ }
|
|
}
|