## $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 the 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 ) { LogMsg "Uninstalling ${DISPLAY_NAME} ${PRODUCT_CODE}" Try { Start-Process -FilePath "msiexec.exe" -ArgumentList "/X${PRODUCT_CODE} /qn /norestart" -Wait } Catch { LogErr $_.Exception.Message } If ( $INSTALL_LOCATION ) { If ( Test-Path $INSTALL_LOCATION ) { LogMsg "Deleting install directory" Try { Remove-Item $INSTALL_LOCATION -Recurse -Force } Catch { LogErr $_.Exception.Message } } } } } } }