#requires -RunAsAdministrator <# ============================================================================== BrowserDesk KnowledgeBase — Client vollstaendig deinstallieren ============================================================================== KB-ID : KB-0003 Zweck : BrowserDesk restlos von einem Windows-Rechner entfernen — Dienst-Task, Prozesse, Programm-, Daten- und Cache-Verzeichnisse, Autostart-Eintraege. Danach ist keine Spur mehr auf dem Geraet; es verbindet sich nicht mehr. Ziel : Windows-Client. ADMINISTRATOR-Rechte noetig. Aufruf (auf dem Zielrechner, PowerShell als Admin): .\uninstall-browserdesk-client.ps1 # alles entfernen (Standard) .\uninstall-browserdesk-client.ps1 -KeepData # Protokolle/Identitaet behalten # (%ProgramData%\BrowserDesk) Was passiert: 1) Scheduled Tasks (BrowserDeskUnattended / BrowserDeskWatchdog / *BrowserDesk*) beenden + loeschen 2) Prozesse beenden (BrowserDesk / browserdesk_client / bd-watchdog / bd-uia) 3) Autostart entfernen (Run-Registry pro Benutzer + Startup-Verknuepfungen) 4) Verzeichnisse loeschen (pro Benutzer UND im SYSTEM-Profil): %ProgramFiles%\BrowserDesk, %LOCALAPPDATA%\BrowserDesk, %LOCALAPPDATA%\warp\packages\*BrowserDesk* (haeufigste Altlast), %ProgramData%\BrowserDesk (nur ohne -KeepData) 5) Verifikation: keine Tasks, keine Prozesse, keine Verzeichnisse mehr Danach: In der Admin-Konsole (browserdesk.de/admin) das Geraet loeschen bzw. per CleanUp entfernen — es meldet sich nicht mehr. ============================================================================== #> param( [switch]$KeepData ) $ErrorActionPreference = "SilentlyContinue" function Say($m){ Write-Host "==> $m" -ForegroundColor Cyan } function Ok ($m){ Write-Host " $m" -ForegroundColor DarkGray } Say "BrowserDesk wird deinstalliert ..." # ---------- 1) Tasks stoppen + loeschen ---------------------------------------------- Say "Scheduled Tasks stoppen + entfernen" foreach ($t in @("BrowserDeskUnattended","BrowserDeskWatchdog")) { schtasks /End /TN $t 2>$null | Out-Null schtasks /Delete /TN $t /F 2>$null | Out-Null } Get-ScheduledTask -ErrorAction SilentlyContinue | Where-Object { $_.TaskName -like "*BrowserDesk*" } | ForEach-Object { schtasks /End /TN $_.TaskName 2>$null; schtasks /Delete /TN $_.TaskName /F 2>$null } | Out-Null # ---------- 2) Prozesse beenden ------------------------------------------------------ Say "Prozesse beenden" foreach ($p in @("BrowserDesk","browserdesk_client","bd-watchdog","bd-uia")) { Get-Process -Name $p -ErrorAction SilentlyContinue | Stop-Process -Force } Start-Sleep -Seconds 2 # ---------- 3) Autostart entfernen --------------------------------------------------- Say "Autostart-Eintraege entfernen" # HKCU Run pro geladenem Benutzer-Hive + der aktuelle; Werte, die auf BrowserDesk zeigen. $runPaths = @("HKCU:\Software\Microsoft\Windows\CurrentVersion\Run", "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run", "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run") foreach ($rp in $runPaths) { if (Test-Path $rp) { (Get-Item $rp).Property | ForEach-Object { $val = (Get-ItemProperty $rp $_).$_ if ("$_" -like "*BrowserDesk*" -or "$val" -like "*BrowserDesk*") { Remove-ItemProperty -Path $rp -Name $_ -Force; Ok "Run entfernt: $_" } } } } # Startup-Verknuepfungen (pro Benutzer + All Users) $startupDirs = @("$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup", "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Startup") Get-ChildItem "C:\Users" -Directory -ErrorAction SilentlyContinue | ForEach-Object { $startupDirs += "$($_.FullName)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" } foreach ($sd in ($startupDirs | Select-Object -Unique)) { Get-ChildItem "$sd\*BrowserDesk*.lnk" -ErrorAction SilentlyContinue | ForEach-Object { Remove-Item $_.FullName -Force; Ok "Startup-Verknuepfung entfernt: $($_.Name)" } } # Startmenue-Eintraege: der Ordner "BrowserDesk" fuer alle Benutzer (MSI seit 11.09.2026 und der Client # selbst legen ihn dort an), dazu die flache Alt-Verknuepfung frueherer MSI-Fassungen und die # pro-Benutzer-Verknuepfungen der frueheren %LOCALAPPDATA%-Installation. $menuItems = @("$env:ProgramData\Microsoft\Windows\Start Menu\Programs\BrowserDesk", "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\BrowserDesk.lnk") Get-ChildItem "C:\Users" -Directory -ErrorAction SilentlyContinue | ForEach-Object { $menuItems += "$($_.FullName)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\BrowserDesk.lnk" $menuItems += "$($_.FullName)\Desktop\BrowserDesk.lnk" } foreach ($mi in $menuItems) { if (Test-Path $mi) { Remove-Item $mi -Recurse -Force -ErrorAction SilentlyContinue; Ok "Startmenue-Eintrag entfernt: $mi" } } # ---------- 4) Verzeichnisse loeschen ------------------------------------------------ Say "Verzeichnisse loeschen (Programm, Daten, warp-Cache — pro Benutzer + SYSTEM)" $dirs = @("$env:ProgramFiles\BrowserDesk", "${env:ProgramFiles(x86)}\BrowserDesk") if (-not $KeepData) { $dirs += "$env:ProgramData\BrowserDesk" } else { Ok "-KeepData: %ProgramData%\BrowserDesk (Identitaet/Protokolle) bleibt erhalten" } $localRoots = @() Get-ChildItem "C:\Users" -Directory -ErrorAction SilentlyContinue | ForEach-Object { $localRoots += "$($_.FullName)\AppData\Local" } $localRoots += "C:\Windows\System32\config\systemprofile\AppData\Local" $localRoots += "C:\Windows\SysWOW64\config\systemprofile\AppData\Local" foreach ($lr in ($localRoots | Select-Object -Unique)) { $dirs += "$lr\BrowserDesk" Get-ChildItem "$lr\warp\packages" -ErrorAction SilentlyContinue | Where-Object { $_.Name -like "*BrowserDesk*" } | ForEach-Object { $dirs += $_.FullName } } $dirs | Select-Object -Unique | ForEach-Object { if (Test-Path $_) { Remove-Item -LiteralPath $_ -Recurse -Force; Ok "geloescht: $_" } } # ---------- 5) Verifikation ---------------------------------------------------------- Say "Verifikation" $taskLeft = @(Get-ScheduledTask -ErrorAction SilentlyContinue | Where-Object { $_.TaskName -like "*BrowserDesk*" }).Count $procLeft = @(Get-Process -Name "BrowserDesk","browserdesk_client","bd-watchdog","bd-uia" -ErrorAction SilentlyContinue).Count $dirLeft = @($dirs | Select-Object -Unique | Where-Object { Test-Path $_ }).Count Ok ("Tasks uebrig: {0}" -f $taskLeft) Ok ("Prozesse uebrig: {0}" -f $procLeft) Ok ("Verzeichnisse uebrig:{0}" -f $dirLeft) if ($taskLeft -eq 0 -and $procLeft -eq 0 -and $dirLeft -eq 0) { Write-Host "==> BrowserDesk vollstaendig entfernt." -ForegroundColor Green } else { Write-Host "==> Es sind Reste uebrig (siehe oben) — ggf. Rechner neu starten und erneut ausfuehren." -ForegroundColor Yellow } Write-Host "==> Zum Schluss: das Geraet in der Admin-Konsole (browserdesk.de/admin) loeschen." -ForegroundColor Cyan