175 lines
7.4 KiB
PowerShell
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
|