diff --git a/4-Uninstall-ScreenConnect-and-Bitdefender.ps1 b/4-Uninstall-ScreenConnect-and-Bitdefender.ps1 new file mode 100644 index 0000000..b615ab9 --- /dev/null +++ b/4-Uninstall-ScreenConnect-and-Bitdefender.ps1 @@ -0,0 +1,174 @@ +# 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