Add uninstall script for ScreenConnect/ConnectWise and Bitdefender Gravity Zone
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
b5c093ad83
commit
a80d04b01a
@@ -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
|
||||
Reference in New Issue
Block a user