Files
ScoutIT/RustDeskUI.ps1
2026-04-21 14:53:27 -05:00

111 lines
5.2 KiB
PowerShell

# ScoutIT Remote Support (RustDesk) - Uninstall Script
$ErrorActionPreference = 'SilentlyContinue'
#https://rustdesk.com/build/tasks/483f98f9-8070-48d3-8303-3995118e55b2/files/scoutit-remotesupport.msi
# ── Config ────────────────────────────────────────────────────────────────────
$rustdeskInstallDir = 'C:\Program Files\ScoutIT-RemoteSupport'
$rustdeskService = 'ScoutIT-RemoteSupport'
$rustdeskMsiName = 'estudio-scoutit-remotesupport' # used to find uninstall key in registry
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Write-Host "Starting ScoutIT Remote Support uninstall..."
# ── Stop and unregister the service ──────────────────────────────────────────
$svc = Get-Service -Name $rustdeskService -ErrorAction SilentlyContinue
if ($null -ne $svc) {
Write-Host "Stopping ScoutIT Remote Support service..."
Stop-Service -Name $rustdeskService -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 3
# Attempt graceful service uninstall via exe first
$rustdeskExe = Get-ChildItem $rustdeskInstallDir -Filter '*.exe' -ErrorAction SilentlyContinue |
Select-Object -First 1
if ($rustdeskExe) {
Write-Host "Unregistering service via exe..."
Start-Process -FilePath $rustdeskExe.FullName -ArgumentList '--uninstall-service' -Wait
Start-Sleep -Seconds 5
}
} else {
Write-Host "Service '$rustdeskService' not found - may already be removed."
}
# ── MSI uninstall via registry ProductCode ───────────────────────────────────
Write-Host "Looking for MSI uninstall entry in registry..."
$uninstallKeys = @(
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
)
$productCode = $null
foreach ($key in $uninstallKeys) {
$match = Get-ItemProperty $key -ErrorAction SilentlyContinue |
Where-Object { $_.DisplayName -match 'scoutit|remotesupport|rustdesk' -or
$_.Publisher -match 'scoutit|rustdesk' } |
Select-Object -First 1
if ($match) {
$productCode = $match.PSChildName
Write-Host "Found uninstall entry: $($match.DisplayName) [$productCode]"
break
}
}
if ($productCode) {
Write-Host "Running MSI uninstall..."
Start-Process -FilePath "msiexec.exe" `
-ArgumentList "/x `"$productCode`" /qn /norestart" `
-Wait
Start-Sleep -Seconds 10
Write-Host "MSI uninstall complete."
} else {
Write-Warning "No MSI uninstall entry found in registry. Falling back to manual removal."
}
# ── Kill any remaining processes ─────────────────────────────────────────────
Write-Host "Killing any remaining RustDesk processes..."
Get-Process | Where-Object { $_.Path -match 'ScoutIT-RemoteSupport|rustdesk|scoutit' } |
Stop-Process -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 2
# ── Remove install directory ──────────────────────────────────────────────────
if (Test-Path $rustdeskInstallDir) {
Write-Host "Removing install directory: $rustdeskInstallDir"
Remove-Item -Path $rustdeskInstallDir -Recurse -Force -ErrorAction SilentlyContinue
if (Test-Path $rustdeskInstallDir) {
Write-Warning "Directory still exists - may have locked files. You may need to reboot and re-run."
} else {
Write-Host "Install directory removed."
}
} else {
Write-Host "Install directory not found - already removed."
}
# ── Remove leftover AppData / config ─────────────────────────────────────────
$appDataPaths = @(
"$env:APPDATA\ScoutIT-RemoteSupport",
"$env:APPDATA\RustDesk",
"$env:ProgramData\ScoutIT-RemoteSupport",
"$env:ProgramData\RustDesk"
)
foreach ($path in $appDataPaths) {
if (Test-Path $path) {
Write-Host "Removing: $path"
Remove-Item -Path $path -Recurse -Force -ErrorAction SilentlyContinue
}
}
# ── Confirm ───────────────────────────────────────────────────────────────────
$svcFinal = Get-Service -Name $rustdeskService -ErrorAction SilentlyContinue
$dirFinal = Test-Path $rustdeskInstallDir
Write-Output "................................................."
if ($null -eq $svcFinal -and -not $dirFinal) {
Write-Output "ScoutIT Remote Support successfully uninstalled."
} else {
if ($null -ne $svcFinal) { Write-Warning "Service '$rustdeskService' still present." }
if ($dirFinal) { Write-Warning "Install directory still present - reboot may be required." }
}
Write-Output "................................................."
exit 0