diff --git a/Uninstall-MSI.ps1 b/Uninstall-MSI.ps1 new file mode 100644 index 0000000..cc0ea72 --- /dev/null +++ b/Uninstall-MSI.ps1 @@ -0,0 +1,47 @@ +## $APP_NAME must be set by the calling script or specified here + +## 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 + +Foreach ( $reg in $UNINSTALL_KEYS ) +{ + ## Get each uninstall key + $REG_PROPERTY = Get-ItemProperty -Path $reg.PSPath + + ## Get the display name of the app + $DISPLAY_NAME = $REG_PROPERTY.DisplayName + + ## Make sure the DisplayName matches what we're looking for + If ( $DISPLAY_NAME -ilike $APP_NAME ) + { + ## Make sure the software was installed using an MSI + If ( $REG_PROPERTY.WindowsInstaller -eq 1 ) + { + ## Get the install location + If ( $REG_PROPERTY.InstallLocation ) { $INSTALL_LOCATION = $REG_PROPERTY.InstallLocation } + + ## Get the product code from the UninstallString + If ( $REG_PROPERTY.UninstallString ) { $PRODUCT_CODE = $REG_PROPERTY.UninstallString.Replace('MsiExec.exe /X','') } + + ## Get the product code from the ModifyPath + ElseIf ( $REG_PROPERTY.ModifyPath ) { $PRODUCT_CODE = $REG_PROPERTY.ModifyPath.Replace('MsiExec.exe /X','') } + + ## Uninstall the app + If ( $PRODUCT_CODE ) + { + Write-Output "Uninstalling ${DISPLAY_NAME} ${PRODUCT_CODE}" + #Start-Process -FilePath "msiexec.exe" -ArgumentList "/X${PRODUCT_CODE} /qn /norestart" -Wait + + If ( $INSTALL_LOCATION ) + { + If ( Test-Path $INSTALL_LOCATION ) + { + Write-Output "Deleting install directory" + #Remove-Item $INSTALL_LOCATION -Recurse -Force + } + } + } + } + } +}