If you need to remove the Atera Agent from your end-user devices after your trial has expired (or after deactivating your account), use this user-submitted script. Big ups to David Yoder for the contribution!
This article provides the removal script and gives a brief description of the functions within.
Remove the Agent (Windows)
Run this PowerShell script to remove the Atera Agent from your devices.
Note:
- This script will work only on Windows devices with updated PowerShell versions (it will not work on Windows 7).
- To run remotely, you'll need a Domain Controller for each network, PSExec, or other RMM tool.
- Admin privileges are required for the script to work. You must run the script as Administrator.
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 $_ }
The PowerShell script explained (briefly)
The agent removal script is made up of several functions, explained below:
-
Get-UninstallCodes: Retrieves the MSI package codes from the uninstall key for:
- Atera Agent
- Splashtop for RMM
- Splashtop Streamer
-
Get-ProductKeys: Retrieves the product keys from the following products:
- Atera Agent
- Splashtop for RMM
- Splashtop Streamer
- Get-ServiceStatus: Retrieves all running services.
- Stop-RunningService: Stops services retrieved by the 'Get-ServiceStatus' function.
- Remove-StoppedService: Removes services stopped by the 'Stop-RunningService' function.
- Stop-RunningProcess: Stops processes (Atera Agent and Splashtop Streamer) from running.
-
Remove-Path: Removes all files from the following 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-AllExeFiles: Searches for the relevant .exe files under Atera Networks and Splashtop Streamer — including their child processes — to ensure they've been removed.
Remove the Agent (Mac)
Run the following commands to do a full clean-up for Mac devices.
cd "/Library/Application Support" sudo rm -rf com.atera* sudo rm -rf /Library/LaunchDaemons/com.atera.ateraagent.plist sudo rm -rf /Applications/AteraAgent.app
Remove the Agent (Linux)
You must run this command in the Terminal to remove the Atera agent from your Linux device.
/usr/lib/atera-agent/uninstall.sh