Files
SITS_RMM_SCRIPTS/4-Uninstall-ScreenConnect-and-Bitdefender.ps1

175 lines
7.4 KiB
PowerShell

# Uninstall ScreenConnect/ConnectWise ASIO and Bitdefender Gravity Zone
$ErrorActionPreference = 'SilentlyContinue'
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$uninstallKeys = @(
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
)
# ── Helper: uninstall by MSI ProductCode ─────────────────────────────────────
function Uninstall-ByProductCode {
param([string]$ProductCode, [string]$DisplayName)
Write-Host "Uninstalling $DisplayName [$ProductCode]..."
Start-Process -FilePath "msiexec.exe" `
-ArgumentList "/x `"$ProductCode`" /qn /norestart" `
-Wait
Start-Sleep -Seconds 10
}
# ── Helper: uninstall by UninstallString ─────────────────────────────────────
function Uninstall-ByString {
param([string]$UninstallString, [string]$DisplayName)
Write-Host "Uninstalling $DisplayName via UninstallString..."
$cmd = $UninstallString -replace '"', ''
$exe = ($cmd -split ' ')[0]
$args = ($cmd -split ' ', 2)[1] + ' /qn /norestart /S'
Start-Process -FilePath $exe -ArgumentList $args -Wait
Start-Sleep -Seconds 10
}
# ─────────────────────────────────────────────────────────────────────────────
# 1. SCREENCONNECT / CONNECTWISE ASIO
# ─────────────────────────────────────────────────────────────────────────────
Write-Host ""
Write-Host "=== ScreenConnect / ConnectWise ==="
# Stop and remove any ScreenConnect services
$svcPattern = 'ScreenConnect|ConnectWise'
Get-Service | Where-Object { $_.DisplayName -match $svcPattern -or $_.Name -match $svcPattern } |
ForEach-Object {
Write-Host "Stopping service: $($_.Name)..."
Stop-Service -Name $_.Name -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 3
}
# Find and uninstall via registry
$scFound = $false
foreach ($key in $uninstallKeys) {
Get-ItemProperty $key -ErrorAction SilentlyContinue |
Where-Object {
$_.DisplayName -match 'ScreenConnect|ConnectWise' -or
$_.Publisher -match 'ScreenConnect|ConnectWise'
} |
ForEach-Object {
$scFound = $true
if ($_.PSChildName -match '^\{') {
Uninstall-ByProductCode -ProductCode $_.PSChildName -DisplayName $_.DisplayName
} elseif ($_.UninstallString) {
Uninstall-ByString -UninstallString $_.UninstallString -DisplayName $_.DisplayName
}
}
}
if (-not $scFound) {
Write-Host "No ScreenConnect/ConnectWise install found in registry."
}
# Kill any remaining processes
Get-Process | Where-Object { $_.Path -match 'ScreenConnect|ConnectWise' } |
Stop-Process -Force -ErrorAction SilentlyContinue
# Remove leftover install directories
$scPaths = @(
'C:\Program Files (x86)\ScreenConnect*',
'C:\Program Files\ScreenConnect*',
'C:\Program Files (x86)\ConnectWise*',
'C:\Program Files\ConnectWise*',
"$env:ProgramData\ScreenConnect*",
"$env:ProgramData\ConnectWise*"
)
foreach ($pattern in $scPaths) {
Get-Item $pattern -ErrorAction SilentlyContinue | ForEach-Object {
Write-Host "Removing: $($_.FullName)"
Remove-Item -Path $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
}
}
# ─────────────────────────────────────────────────────────────────────────────
# 2. BITDEFENDER GRAVITY ZONE
# ─────────────────────────────────────────────────────────────────────────────
Write-Host ""
Write-Host "=== Bitdefender Gravity Zone ==="
# Stop Bitdefender services
$bdServices = @('EPSecurityService', 'EPUpdateService', 'EPIntegrationService',
'BDLiveSrv', 'bdredline', 'ProductAgentService')
foreach ($svcName in $bdServices) {
$svc = Get-Service -Name $svcName -ErrorAction SilentlyContinue
if ($null -ne $svc) {
Write-Host "Stopping service: $svcName..."
Stop-Service -Name $svcName -Force -ErrorAction SilentlyContinue
}
}
# Find and uninstall via registry
$bdFound = $false
foreach ($key in $uninstallKeys) {
Get-ItemProperty $key -ErrorAction SilentlyContinue |
Where-Object {
$_.DisplayName -match 'Bitdefender|GravityZone|Endpoint Security Tools' -or
$_.Publisher -match 'Bitdefender'
} |
ForEach-Object {
$bdFound = $true
if ($_.PSChildName -match '^\{') {
Uninstall-ByProductCode -ProductCode $_.PSChildName -DisplayName $_.DisplayName
} elseif ($_.UninstallString) {
Uninstall-ByString -UninstallString $_.UninstallString -DisplayName $_.DisplayName
}
}
}
if (-not $bdFound) {
Write-Host "No Bitdefender Gravity Zone install found in registry."
}
# Kill any remaining processes
Get-Process | Where-Object { $_.Path -match 'Bitdefender|bdagent|epag|epsecurityservice' } |
Stop-Process -Force -ErrorAction SilentlyContinue
# Remove leftover install directories
$bdPaths = @(
'C:\Program Files\Bitdefender*',
'C:\Program Files (x86)\Bitdefender*',
"$env:ProgramData\Bitdefender*"
)
foreach ($pattern in $bdPaths) {
Get-Item $pattern -ErrorAction SilentlyContinue | ForEach-Object {
Write-Host "Removing: $($_.FullName)"
Remove-Item -Path $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
}
}
# ─────────────────────────────────────────────────────────────────────────────
# 3. CONFIRM
# ─────────────────────────────────────────────────────────────────────────────
Write-Host ""
Write-Output "................................................."
$scRemaining = foreach ($key in $uninstallKeys) {
Get-ItemProperty $key -ErrorAction SilentlyContinue |
Where-Object { $_.DisplayName -match 'ScreenConnect|ConnectWise' }
}
$bdRemaining = foreach ($key in $uninstallKeys) {
Get-ItemProperty $key -ErrorAction SilentlyContinue |
Where-Object { $_.DisplayName -match 'Bitdefender|GravityZone|Endpoint Security Tools' }
}
if (-not $scRemaining) {
Write-Output "ScreenConnect/ConnectWise: successfully removed (or was not installed)."
} else {
Write-Warning "ScreenConnect/ConnectWise: entries still found in registry - reboot may be required."
}
if (-not $bdRemaining) {
Write-Output "Bitdefender Gravity Zone: successfully removed (or was not installed)."
} else {
Write-Warning "Bitdefender Gravity Zone: entries still found in registry - reboot may be required."
}
Write-Output "................................................."
exit 0