Do you want to uninstall EXE applications with PowerShell App Deployment Toolkit (PSADT)?
Then you should read this article, as i will learn you how to do exactly that.
If you are a frequent user of PowerShell App Deployment Toolkit (PSADT), you might know
the command Remove-MSIApplications , which can be used to remove MSI applications by searching the registry for their display name or GUID. However this will not work for EXE installed applications.
So how do i create a EXE uninstaller with PSADT?
I’m sure that it can be done in a lot of ways, but here i will show you two methods that i use myself.
The first one is very simple, and requires that you know where the uninstaller is, and that it is at the same location every time.
The second one, will search for the application in the registry and use the uninstall string as path to the uninstaller.
In this article i will use a real world example, the “Final Media Player”.
Simple uninstall
With the simple uninstall you simply use the Execute-Process command, the command for my use is the following:
Execute-Process -Path "$envProgramFiles\FinalMediaPlayer\unins000.exe" -Parameters '/SILENT'
As you can see this will require the uninstall file to be at the exact same location, and same filename on every computer.
I like to make my scripts dynamic, so lets take a look at the advanced method.
Advanced Uninstall
With the advanced uninstall, we grap a the application(s) using the Get-InstalledApplication command.
I add this to a list, because it can return multiple results, if it finds more then one match. So i want to make my script support that.
After the list, we use a ForEach to loop it through. Then we use the UninstallString from the Get-InstalledApplication to set our path for the uninstaller EXE.
As the last, i know my UninstallString includes a pair of “ in the name. PSADT do not like that, so i have added a -replace command, to remove it.
The final uninstall script looks like below.
Remember that you, would add the below script to the # <Perform Uninstallation tasks here> part of your Deploy-Application.ps1 script
# Get a list of applications matching "Final Media Player" $AppList = Get-InstalledApplication -Name 'Final Media Player' # Loop through the list, and performing the uninstall ForEach ($App in $AppList) { # Check if the uninstall string exists on the entry, if not we skip. If($App.UninstallString) { # Replacing " to nothing, as execute-process will fail if the path includes a " $UninstPath = $App.UninstallString -replace '"', '' # Check if the uninstall file exists, before we try to run it. If(Test-Path -Path $UninstPath) { # Writing status to log Write-log -Message "Found $($App.DisplayName) ($($App.DisplayVersion)) and valid uninstall string, trying to uninstall." # Running the actual uninstall. Execute-Process -Path $UninstPath -Parameters '/VERYSILENT /SUPPRESSMSGBOXES /NORESTART' } } }
If you have any questions or feedback, then please leave a comment!
(For code comments, please use www.pastebin.com)
Download PSADT: http://psappdeploytoolkit.com/
I think this will work for me. Trying to uninstall SQL Management Studio 2014 silently. Can I grab the exe package place it in the support files folder and run the uninstall in the pre-install section?
Any help would be appreciated.
This is so close to what I’m looking for, hoping to expand on this and have $App.DisplayVersion look for version # 5, 4 or 3 and then uninstall them from the computer before it installs the version.
Eg. VLC 1 installed on workstation, Check for VLC Version 1, uninstall it then install version 2