Skip to content

Instantly share code, notes, and snippets.

@ak9999
Created September 21, 2019 23:48
Show Gist options
  • Select an option

  • Save ak9999/e68da02d7957bd7db2a2a647f76d50be to your computer and use it in GitHub Desktop.

Select an option

Save ak9999/e68da02d7957bd7db2a2a647f76d50be to your computer and use it in GitHub Desktop.
Uninstall LabTech and ScreenConnect Agents: For those who are having a hard time uninstalling the LabTech Agent from their computer, the first script will remove the LabTech Agent, and the second will remove ScreenConnect aka (ConnectWise Control).
$url = "https://s3.amazonaws.com/assets-cp/assets/Agent_Uninstaller.zip"
$output = "C:\Windows\Temp\Agent_Uninstaller.zip"
(New-Object System.Net.WebClient).DownloadFile($url, $output)
# The below usage of Expand-Archive is only possible with PowerShell 5.0+
# Expand-Archive -LiteralPath C:\Windows\Temp\Agent_Uninstaller.zip -DestinationPath C:\Windows\Temp\LTAgentUninstaller -Force
# Use .NET instead
[System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null
# Now we can expand the archive
[System.IO.Compression.ZipFile]::ExtractToDirectory('C:\Windows\Temp\Agent_Uninstaller.zip', 'C:\Windows\Temp\LTAgentUninstaller')
Start-Process -FilePath "C:\Windows\Temp\LTAgentUninstaller\Agent_Uninstall.exe"
wmic product where "name like 'ScreenConnect Client%%'" call uninstall /nointeractive
@realchrisolin

realchrisolin commented May 12, 2026

Copy link
Copy Markdown

While the script seems to work fine, I'm leery about how generic and unaffiliated the $url link appears to be with ConnectWise. Is there any official documentation or support that shows this isn't some random file that someone could swap out at any time for a malicious version?

Does a powershell command that doesn't connect to any web resources work instead? Dunno about any "official documentation or support", but it has the benefit of working.

( Get-WmiObject -Class Win32_Product | Where-Object{$_.Name -like 'ConnectWise Automate*'} ) | ForEach-Object {
& msiexec /x $_.IdentifyingNumber /quiet /qn /norestart
}

@ak9999

ak9999 commented May 12, 2026

Copy link
Copy Markdown
Author

At the time that I wrote these scripts, I was trying to clean up old agents that would not uninstall, did not show up under Win32_Product queries, didn’t have clean registry entries for the agents. And I had to get it done across thousands of endpoints, without downtime.

If you are a subscriber to ConnectWise Automate, go to the link in your Automate interface for the agent uninstaller and compare it to the one in the script above, that should resolve your doubts. I know it’s frustrating to trust a “random URL”, but that’s how you can verify it. Again, I haven’t used ConnectWise Automate in years, I just left this up here to help others.

@realchrisolin Your script is the “happy path” where everything is clean. I didn’t have that scenario. The Agent Uninstaller works no matter if whoever installed the agent made it so it would only uninstall if the server told the agent to uninstall itself, or if the agent got corrupted, or if the registry is broken.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment