Si necesitas eliminar el Agente de Atera de los dispositivos de tus usuarios finales después de que haya expirado tu prueba (o tras desactivar tu cuenta), utiliza este script enviado por un usuario. ¡Un gran agradecimiento a David Yoder por su contribución!
Este artículo proporciona el script de eliminación y ofrece una breve descripción de las funciones incluidas.
Eliminar el Agente (Windows)
Ejecuta este script de PowerShell para eliminar el Agente de Atera de tus dispositivos.
Nota:
- Este script solo funcionará en dispositivos Windows con versiones actualizadas de PowerShell (no funcionará en Windows 7).
- Para ejecutarlo de forma remota, necesitarás un Controlador de Dominio para cada red, PSExec u otra herramienta RMM.
- Se requieren privilegios de administrador para que el script funcione. Debes ejecutarlo como Administrador.
Function Get-UninstallCodes ([string]$DisplayName) {
'HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall', 'HKLM:SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall' | ForEach-Object {
Get-ChildItem -Path $_ -ErrorAction SilentlyContinue | ForEach-Object {
If ( $(Get-ItemProperty -Path $_.PSPath -Name 'DisplayName' -ErrorAction SilentlyContinue) -and ($(Get-ItemPropertyValue -Path $_.PSPath -Name 'DisplayName' -ErrorAction SilentlyContinue) -eq $DisplayName) ) {
$str = (Get-ItemPropertyValue -Path $_.PSPath -Name 'UninstallString')
$UninstallCodes.Add($str.Substring(($str.Length - 37),36)) | Out-Null
}
}
}
}
Function Get-ProductKeys ([string]$ProductName) {
Get-ChildItem -Path 'HKCR:Installer\Products' | ForEach-Object {
If ( $(Get-ItemProperty -Path $_.PSPath -Name 'ProductName' -ErrorAction SilentlyContinue) -and ($(Get-ItemPropertyValue -Path $_.PSPath -Name 'ProductName' -ErrorAction SilentlyContinue) -eq $ProductName) ) {
$ProductKeys.Add($_.PSPath.Substring(($_.PSPath.Length - 32))) | Out-Null
}
}
}
Function Get-ServiceStatus ([string]$Name) { (Get-Service -Name $Name -ErrorAction SilentlyContinue).Status }
Function Stop-RunningService ([string]$Name) {
If ( $(Get-ServiceStatus -Name $Name) -eq "Running" ) { Write-Output "Stopping : ${Name} service" ; Stop-Service -Name $Name -Force }
}
Function Remove-StoppedService ([string]$Name) {
$s = (Get-ServiceStatus -Name $Name)
If ( $s ) {
If ( $s -eq "Stopped" ) {
Write-Output "Deleting : ${Name} service"
Start-Process "sc.exe" -ArgumentList "delete ${Name}" -Wait
}
} Else { Write-Output "Not Found: ${Name} service" }
}
Function Stop-RunningProcess ([string]$Name) {
$p = (Get-Process -Name $_ -ErrorAction SilentlyContinue)
If ( $p ) { Write-Output "Stopping : ${Name}.exe" ; $p | Stop-Process -Force }
Else { Write-Output "Not Found: ${Name}.exe is not running"}
}
Function Remove-Path ([string]$Path) {
If ( Test-Path $Path ) {
Write-Output "Deleting : ${Path}"
Remove-Item $Path -Recurse -Force
} Else { Write-Output "Not Found: ${Path}" }
}
Function Get-AllExeFiles ([string]$Path) {
If ( Test-Path $Path ) {
Get-ChildItem -Path $Path -Filter *.exe -Recurse | ForEach-Object { $ExeFiles.Add($_.BaseName) | Out-Null }
}
}
# Mount HKEY_CLASSES_ROOT registry hive
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT | Out-Null
#######
# START: Information gathering
#######
# Get MSI package codes from the uninstall key
$UninstallCodes = New-Object System.Collections.ArrayList
'AteraAgent', 'Splashtop for RMM', 'Splashtop Streamer' | ForEach-Object { Get-UninstallCodes -DisplayName $_ }
# Get product keys from the list of installed products
$ProductKeys = New-Object System.Collections.ArrayList
'AteraAgent', 'Splashtop for RMM', 'Splashtop Streamer' | ForEach-Object { Get-ProductKeys -ProductName $_ }
# Define all the directories we'll need to cleanup at the end of this script
$Directories = @(
"${Env:ProgramFiles}\ATERA Networks",
"${Env:ProgramFiles(x86)}\ATERA Networks",
"${Env:ProgramFiles}\Splashtop\Splashtop Remote\Server",
"${Env:ProgramFiles(x86)}\Splashtop\Splashtop Remote\Server",
"${Env:ProgramFiles}\Splashtop\Splashtop Software Updater",
"${Env:ProgramFiles(x86)}\Splashtop\Splashtop Software Updater",
"${Env:ProgramData}\Splashtop\Splashtop Software Updater"
)
# Get all possible relevant exe files so we can make sure they're closed later on
$ExeFiles = New-Object System.Collections.ArrayList
"${Env:ProgramFiles}\ATERA Networks" | ForEach-Object { Get-AllExeFiles -Path $_ }
# Define a list of services we need to stop and delete (if necessary)
$ServiceList = @(
'AteraAgent',
'SplashtopRemoteService',
'SSUService'
)
# Define a list of registry keys we'll delete
$RegistryKeys = @(
'HKLM:SOFTWARE\ATERA Networks',
'HKLM:SOFTWARE\Splashtop Inc.',
'HKLM:SOFTWARE\WOW6432Node\Splashtop Inc.'
)
#######
# END: Information gathering
#######
# Uninstall each MSI package code in $UninstallCodes
$UninstallCodes | ForEach-Object { Write-Output "Uninstall: ${_}" ; Start-Process "msiexec.exe" -ArgumentList "/X{${_}} /qn" -Wait }
# Stop services if they're still running
$ServiceList | ForEach-Object { Stop-RunningService -Name $_ }
# Terminate all relevant processes that may still be running
$ExeFiles.Add('reg') | Out-Null
$ExeFiles | ForEach-Object { Stop-RunningProcess $_ }
# Delete services if they're still present
$ServiceList | ForEach-Object { Remove-StoppedService -Name $_ }
# Delete products from MSI installer registry
$ProductKeys | ForEach-Object { Remove-Path -Path "HKCR:Installer\Products\${_}" }
# Unmount HKEY_CLASSES_ROOT registry hive
Remove-PSDrive -Name HKCR
# Delete registry keys
$RegistryKeys | ForEach-Object { Remove-Path -Path $_ }
# Delete remaining directories
#Write-Host "Waiting for file locks to be freed" ; Start-Sleep -Seconds 4
$Directories | ForEach-Object { Remove-Path -Path $_ }
Explicación breve del script de PowerShell
El script para eliminar el agente está compuesto por varias funciones, que se explican a continuación:
-
Get-UninstallCodes: Obtiene los códigos de paquete MSI desde la clave de desinstalación para:
- Atera Agent
- Splashtop for RMM
- Splashtop Streamer
-
Get-ProductKeys: Obtiene las claves de producto de los siguientes productos:
- Atera Agent
- Splashtop for RMM
- Splashtop Streamer
- Get-ServiceStatus: Obtiene todos los servicios en ejecución.
- Stop-RunningService: Detiene los servicios obtenidos por la función 'Get-ServiceStatus'.
- Remove-StoppedService: Elimina los servicios detenidos por la función 'Stop-RunningService'.
- Stop-RunningProcess: Detiene los procesos (Atera Agent y Splashtop Streamer) que estén en ejecución.
-
Remove-Path: Elimina todos los archivos de los siguientes directorios.
- {Env:ProgramFiles}\ATERA Networks
- {Env:ProgramFiles(x86)}\ATERA Networks
- {Env:ProgramFiles}\Splashtop\Splashtop Remote\Server
- {Env:ProgramFiles(x86)}\Splashtop\Splashtop Remote\Server
- {Env:ProgramFiles}\Splashtop\Splashtop Software Updater
- {Env:ProgramFiles(x86)}\Splashtop\Splashtop Software Updater
- {Env:ProgramData}\Splashtop\Splashtop Software Updater
- Get-AllExeFiles: Busca los archivos .exe relevantes bajo Atera Networks y Splashtop Streamer — incluyendo sus procesos secundarios — para asegurarse de que se hayan eliminado.
Eliminar el Agente (Mac)
Ejecuta los siguientes comandos para hacer una limpieza completa en dispositivos Mac:
V1
cd "/Library/Application Support"
sudo rm -rf com.atera*
sudo rm -rf /Library/LaunchDaemons/com.atera.ateraagent.plist
sudo rm -rf /Applications/AteraAgent.appV2
sudo launchctl unload /Library/LaunchDaemons/com.atera.agent.plist 2>/dev/null
sudo launchctl stop com.atera.agent
sudo rm -rf /Library/Application\ Support/com.atera*
sudo rm -f /Library/LaunchDaemons/com.atera*
sudo rm -rf /Applications/AteraAgent.app
sudo pkgutil --forget com.atera.ateraagent
sudo pkgutil --forget com.atera.agent
Eliminar el Agente (Linux)
Debes ejecutar este comando en la Terminal para eliminar el agente de Atera de tu dispositivo Linux.
/usr/lib/atera-agent/uninstall.sh