starface-outlook-sync-addin/installer/uninstall.ps1

172 lines
6.2 KiB
PowerShell

#Requires -RunAsAdministrator
<#
.SYNOPSIS
Deinstalliert das Starface Outlook Sync Add-in.
.DESCRIPTION
Entfernt Server, Zertifikate, Scheduled Task, Registry-Eintraege und Dateien.
#>
param(
[string]$InstallDir = "$env:ProgramFiles\StarfaceOutlookSync"
)
$ErrorActionPreference = "Stop"
function Write-Header($text) {
Write-Host ""
Write-Host "============================================================" -ForegroundColor Cyan
Write-Host " $text" -ForegroundColor Cyan
Write-Host "============================================================" -ForegroundColor Cyan
Write-Host ""
}
function Write-Step($text) {
Write-Host " [OK] $text" -ForegroundColor Green
}
function Write-Warn($text) {
Write-Host " [!] $text" -ForegroundColor Yellow
}
Write-Header "Starface Outlook Sync - Deinstallation"
# Sicherheitsabfrage
Write-Host " Dies entfernt das Starface Outlook Sync Add-in vollstaendig." -ForegroundColor Yellow
Write-Host " Installationsverzeichnis: $InstallDir" -ForegroundColor Yellow
$confirm = Read-Host " Fortfahren? (j/n)"
if ($confirm -ne "j") {
Write-Host " Abgebrochen." -ForegroundColor Gray
exit 0
}
# ============================================================
# Schritt 1: Scheduled Task stoppen und entfernen
# ============================================================
Write-Header "Schritt 1: Server stoppen"
$taskName = "StarfaceOutlookSyncServer"
$task = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue
if ($task) {
if ($task.State -eq "Running") {
Stop-ScheduledTask -TaskName $taskName
Write-Step "Server gestoppt."
}
Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
Write-Step "Scheduled Task entfernt."
} else {
Write-Warn "Scheduled Task '$taskName' nicht gefunden."
}
# ============================================================
# Schritt 2: Zertifikate entfernen
# ============================================================
Write-Header "Schritt 2: Zertifikate entfernen"
$certInfoPath = Join-Path $InstallDir "cert-info.json"
if (Test-Path $certInfoPath) {
$certInfo = Get-Content $certInfoPath -Raw | ConvertFrom-Json
# Localhost-Zertifikat aus dem persoenlichen Store entfernen
if ($certInfo.localhostThumbprint) {
$cert = Get-ChildItem "Cert:\LocalMachine\My" | Where-Object { $_.Thumbprint -eq $certInfo.localhostThumbprint }
if ($cert) {
Remove-Item $cert.PSPath -Force
Write-Step "Localhost-Zertifikat entfernt."
}
}
# Lokale CA aus dem Root Store entfernen
if ($certInfo.caThumbprint) {
$caCert = Get-ChildItem "Cert:\LocalMachine\Root" | Where-Object { $_.Thumbprint -eq $certInfo.caThumbprint }
if ($caCert) {
Remove-Item $caCert.PSPath -Force
Write-Step "Lokale CA entfernt."
}
# Auch aus dem persoenlichen Store
$caCertMy = Get-ChildItem "Cert:\LocalMachine\My" | Where-Object { $_.Thumbprint -eq $certInfo.caThumbprint }
if ($caCertMy) {
Remove-Item $caCertMy.PSPath -Force
}
}
} else {
Write-Warn "cert-info.json nicht gefunden. Zertifikate muessen ggf. manuell entfernt werden."
}
# ============================================================
# Schritt 3: Outlook Add-in Registrierung entfernen
# ============================================================
Write-Header "Schritt 3: Outlook-Registrierung entfernen"
$outlookVersions = @("16.0", "15.0")
foreach ($ver in $outlookVersions) {
# HKCU (Einzelplatz / aktueller User)
$catalogBasePath = "HKCU:\Software\Microsoft\Office\$ver\WEF\TrustedCatalogs"
if (Test-Path $catalogBasePath) {
$catalogs = Get-ChildItem $catalogBasePath -ErrorAction SilentlyContinue
foreach ($catalog in $catalogs) {
$url = Get-ItemProperty -Path $catalog.PSPath -Name "Url" -ErrorAction SilentlyContinue
if ($url -and $url.Url -like "*StarfaceOutlookSync*") {
Remove-Item $catalog.PSPath -Recurse -Force
Write-Step "Outlook $ver Katalog-Registrierung entfernt (HKCU)."
}
}
}
# HKLM (Terminal Server / alle User)
$catalogBasePathLM = "HKLM:\Software\Microsoft\Office\$ver\WEF\TrustedCatalogs"
if (Test-Path $catalogBasePathLM) {
$catalogs = Get-ChildItem $catalogBasePathLM -ErrorAction SilentlyContinue
foreach ($catalog in $catalogs) {
$url = Get-ItemProperty -Path $catalog.PSPath -Name "Url" -ErrorAction SilentlyContinue
if ($url -and $url.Url -like "*StarfaceOutlookSync*") {
Remove-Item $catalog.PSPath -Recurse -Force
Write-Step "Outlook $ver Katalog-Registrierung entfernt (HKLM)."
}
}
}
}
# ============================================================
# Schritt 4: Firewall-Regel entfernen
# ============================================================
Write-Header "Schritt 4: Firewall-Regel entfernen"
Remove-NetFirewallRule -DisplayName "Starface Outlook Sync" -ErrorAction SilentlyContinue
Write-Step "Firewall-Regel entfernt."
# ============================================================
# Schritt 5: Dateien entfernen
# ============================================================
Write-Header "Schritt 5: Dateien entfernen"
if (Test-Path $InstallDir) {
Remove-Item -Path $InstallDir -Recurse -Force
Write-Step "Installationsverzeichnis entfernt: $InstallDir"
} else {
Write-Warn "Verzeichnis nicht gefunden: $InstallDir"
}
# ============================================================
# Zusammenfassung
# ============================================================
Write-Header "Deinstallation abgeschlossen"
Write-Host " Das Starface Outlook Sync Add-in wurde entfernt." -ForegroundColor Green
Write-Host ""
Write-Host " Hinweis: Falls das Add-in im neuen Outlook manuell" -ForegroundColor Gray
Write-Host " hinzugefuegt wurde, muss es dort auch manuell entfernt werden:" -ForegroundColor Gray
Write-Host " Einstellungen -> Add-Ins verwalten -> Add-In entfernen" -ForegroundColor Gray
Write-Host ""
Write-Host " Das Starface-Zertifikat wurde NICHT entfernt," -ForegroundColor Yellow
Write-Host " da es ggf. von anderen Anwendungen benoetigt wird." -ForegroundColor Yellow
Write-Host ""
Read-Host "Eingabetaste zum Beenden"