Uninstalling Old Versions of FortiClient Using PowerShell
Uninstalling Old Versions of FortiClient Using PowerShell
We recently had a requirement to uninstall any old versions
of FortiClient from machines to install latest through SCCM, but the install
required removing old versions. After testing several methods, we found a
PowerShell script that worked perfectly without requiring a system restart.
Here's how you can automate the uninstallation of old FortiClient versions.
# Stop FortiClient services
Write-Host "Stopping FortiClient services..."
Get-Service -Name "Forti*" -ErrorAction
SilentlyContinue | ForEach-Object {
if ($_.Status -eq 'Running') {
Write-Host
"Stopping service: $($_.Name)"
Stop-Service
-Name $_.Name -Force
}
}
# Kill FortiClient processes
Write-Host "Terminating FortiClient processes..."
Get-Process -Name "Forti*" -ErrorAction
SilentlyContinue | ForEach-Object {
Write-Host "Killing process:
$($_.Name)"
Stop-Process -Id $_.Id -Force
}
# Search for FortiClient installation(s) in the registry
Write-Host "Searching for FortiClient
installation(s)..."
$fortiClients = Get-WmiObject -Query "SELECT * FROM
Win32_Product WHERE Name LIKE 'FortiClient%'"
if ($fortiClients) {
foreach ($fortiClient in $fortiClients) {
$productCode =
$fortiClient.IdentifyingNumber
Write-Host
"Uninstalling $($fortiClient.Name) with ProductCode: $productCode"
# Uninstall using
msiexec
$uninstallResult
= Start-Process -FilePath "msiexec.exe" -ArgumentList "/x
$productCode /qn /norestart" -Wait -NoNewWindow -PassThru
# Check the
uninstallation result
switch
($uninstallResult.ExitCode) {
0 {
Write-Host "$($fortiClient.Name) uninstalled successfully."
}
3010 {
Write-Host "$($fortiClient.Name) uninstalled successfully, but a restart
is required."
}
1603 {
Write-Host "$($fortiClient.Name) uninstallation failed with ExitCode:
1603. Please ensure no related processes are running and try again."
Write-Host "Consider using the FortiClient cleanup tool as a last
resort."
}
default {
Write-Host "$($fortiClient.Name) uninstallation failed with ExitCode:
$($uninstallResult.ExitCode)."
}
}
}
} else {
Write-Host "No FortiClient
installations found."
}