Table of Contents

Manually

To find the uninstall commands, I first look in the registry keys on the following paths:

HKLM\SOFTWARE\Classes\Installer\Products HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall

You can find a key called “UninstallString” in this case, you have the command, but you will be missing the argument to make the uninstallation silent.

You can also find a GUID in a key, in this case, try the command msiexec /x {theGUID}.

Script

Here is an example of a script to perform the uninstallations

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function Uninstall {
    param (
        [Parameter(Mandatory=$true)] [string]$AppName,
        [Parameter(Mandatory=$false)] [string]$Arg = "/S"
    )
 
    # Define uninstall keys
    $uninstallKeys = @(
        'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*',
        'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
        'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
    )
 
   # Define the log file path
    $logFilePath = "C:\Windows\temp\uninstall.log"
 
    # Fetch all keys
    $keys = Get-ChildItem -Path $uninstallKeys -ErrorAction SilentlyContinue
 
    # Filter and uninstall the specified app
    $keys | Where-Object {
        $_.GetValue('DisplayName') -like "*$AppName*"
    } | ForEach-Object {
        $uninstallString = $_.GetValue('UninstallString')
        $uninstallApps   = $_.GetValue('DisplayName')
         
        if ($uninstallString -like "msiexec*" -and $uninstallString -like '*{*') {
            $uninstallString = "{$($uninstallString.split('{')[1])"
             
            $logEntry = "$uninstallApps => msiexec.exe /X $uninstallString REBOOT=ReallySuppress /qn"
            Write-Host $logEntry
            Add-Content -Path $logFilePath -Value $logEntry        
            Start-Process -FilePath "c:\windows\system32\msiexec.exe" -ArgumentList "/X $uninstallString REBOOT=ReallySuppress /qn" -Wait
        }
        if (($uninstallString -like "*.exe*") -and ($uninstallString -notlike "*msiexec*")) {
            $logEntry = "$uninstallApps => $uninstallString $Arg"
            Write-Host $logEntry
            Add-Content -Path $logFilePath -Value $logEntry
            Start-Process -FilePath "$uninstallString" -ArgumentList "$Arg" -Wait
        }
    }
}
 
 
Uninstall -AppName "Firefox" -Arg "-ms"
Uninstall -AppName "Teamviewer"
Uninstall -AppName "AnyDesk"

https://github.com/DavidWuibaille/Packaging/tree/main/Packaging/Uninstall_Script


0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.