# 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