Wer das Toolkit testweise installiert hatte, konnte es nur von Hand wieder abraeumen - zwei Aufgaben im Aufgabenplaner, ein laufender Prozess, zwei Ordner. Das ist jetzt ein Skript. Die Daten bleiben per Vorgabe stehen: in der Datenbank liegen Chatverlaeufe, und die sind nach einer versehentlichen Deinstallation weg. -AuchDaten raeumt auch die ab. Getestet an einer laufenden Installation: Aufgaben weg, Prozess beendet, Programm geloescht, Port 4792 frei. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AhVSfMFdWnXKCv5JfLnArZ
79 lines
2.6 KiB
PowerShell
79 lines
2.6 KiB
PowerShell
# Entfernt abdulive wieder.
|
|
#
|
|
# .\uninstall.ps1 Programm und Autostart weg, Daten bleiben
|
|
# .\uninstall.ps1 -AuchDaten alles weg, auch Datenbank und Clips
|
|
#
|
|
# Die Daten bleiben absichtlich per Vorgabe stehen: in der Datenbank liegen
|
|
# Chatverlaeufe, und die sind nach einer versehentlichen Deinstallation nicht
|
|
# wiederherstellbar. Wer neu installiert, findet seine Einrichtung wieder.
|
|
|
|
[CmdletBinding()]
|
|
param(
|
|
[string]$Ziel = (Join-Path $env:LOCALAPPDATA 'Programs\abdulive'),
|
|
[switch]$AuchDaten
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
$daten = Join-Path $env:LOCALAPPDATA 'abdulive'
|
|
|
|
function Schritt($text) { Write-Host "==> $text" -ForegroundColor Cyan }
|
|
function Hinweis($text) { Write-Host " $text" -ForegroundColor DarkGray }
|
|
|
|
Schritt 'Autostart entfernen'
|
|
$aufgaben = Get-ScheduledTask -TaskName 'abdulive', 'abdulive-update' -ErrorAction SilentlyContinue
|
|
if ($aufgaben) {
|
|
foreach ($a in $aufgaben) {
|
|
try { Stop-ScheduledTask -TaskName $a.TaskName -ErrorAction SilentlyContinue } catch { }
|
|
Unregister-ScheduledTask -TaskName $a.TaskName -Confirm:$false
|
|
Hinweis "Aufgabe `"$($a.TaskName)`" entfernt."
|
|
}
|
|
} else {
|
|
Hinweis 'Keine Aufgaben gefunden.'
|
|
}
|
|
|
|
Schritt 'Laufenden Daemon beenden'
|
|
$prozesse = Get-Process node -ErrorAction SilentlyContinue |
|
|
Where-Object { $_.Path -and $_.Path.StartsWith($Ziel, 'OrdinalIgnoreCase') }
|
|
if ($prozesse) {
|
|
foreach ($p in $prozesse) {
|
|
Stop-Process -Id $p.Id -Force
|
|
Hinweis "node.exe (PID $($p.Id)) beendet."
|
|
}
|
|
# Windows gibt die Dateisperren nicht sofort frei
|
|
Start-Sleep -Milliseconds 800
|
|
} else {
|
|
Hinweis 'Lief nicht.'
|
|
}
|
|
|
|
Schritt 'Programm entfernen'
|
|
if (Test-Path $Ziel) {
|
|
Remove-Item -Recurse -Force $Ziel
|
|
Hinweis $Ziel
|
|
} else {
|
|
Hinweis 'War nicht installiert.'
|
|
}
|
|
|
|
if ($AuchDaten) {
|
|
Schritt 'Daten entfernen'
|
|
if (Test-Path $daten) {
|
|
Remove-Item -Recurse -Force $daten
|
|
Hinweis "$daten (Datenbank, Clips, Sprachmodell, Protokolle)"
|
|
} else {
|
|
Hinweis 'Nichts da.'
|
|
}
|
|
} elseif (Test-Path $daten) {
|
|
$mb = [math]::Round((Get-ChildItem $daten -Recurse -File -ErrorAction SilentlyContinue |
|
|
Measure-Object Length -Sum).Sum / 1MB)
|
|
Write-Host ''
|
|
Write-Host "Die Daten bleiben liegen ($mb MB):" -ForegroundColor Yellow
|
|
Write-Host " $daten"
|
|
Write-Host ' Darin: Datenbank mit Chatverlaeufen, Clips, Sprachmodell, Einrichtung.'
|
|
Write-Host ''
|
|
Write-Host 'Auch die weg:'
|
|
Write-Host " Remove-Item -Recurse -Force '$daten'"
|
|
}
|
|
|
|
Write-Host ''
|
|
Write-Host 'abdulive ist entfernt.' -ForegroundColor Green
|
|
Write-Host ''
|