$ErrorActionPreference = "Stop" $ProgressPreference = "SilentlyContinue" $identity = [Security.Principal.WindowsIdentity]::GetCurrent() $principal = New-Object Security.Principal.WindowsPrincipal($identity) $isAdmin = $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) if (-not $isAdmin) { throw "Bitte PowerShell als Administrator starten und den Befehl erneut ausfuehren." } $existingService = Get-Service -Name "tacticalrmm" -ErrorAction SilentlyContinue if ($null -ne $existingService) { if ($existingService.Status -ne "Running") { Start-Service -Name "tacticalrmm" } Write-Host "Tactical RMM ist bereits installiert." -ForegroundColor Yellow return } $deploymentUrl = "https://rmm-api.pape.rocks/clients/a4c93e74-caae-42e6-a0c6-da3348da7f22/deploy/" $tempDirectory = Join-Path $env:ProgramData "TacticalRMM\temp" $installerPath = Join-Path $tempDirectory "rmm-enrollment.exe" [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 New-Item -ItemType Directory -Path $tempDirectory -Force | Out-Null try { Write-Host "Lade den aktuellen Tactical-RMM-Agenten herunter ..." Invoke-WebRequest -UseBasicParsing -Uri $deploymentUrl -OutFile $installerPath $installer = Get-Item $installerPath if ($installer.Length -lt 100KB) { throw "Der heruntergeladene Installer ist unerwartet klein. Installation abgebrochen." } $hash = (Get-FileHash -Path $installerPath -Algorithm SHA256).Hash Write-Host "Installer SHA256: $hash" $process = Start-Process -FilePath $installerPath -ArgumentList "--silent" -Wait -PassThru if ($process.ExitCode -ne 0) { throw "Der Tactical-RMM-Installer wurde mit Exit-Code $($process.ExitCode) beendet." } $service = Get-Service -Name "tacticalrmm" -ErrorAction SilentlyContinue if ($null -eq $service) { throw "Die Installation wurde beendet, aber der Tactical-RMM-Dienst wurde nicht gefunden." } Write-Host "Tactical RMM wurde erfolgreich installiert und unter Pape / Enrollment registriert." -ForegroundColor Green } finally { Remove-Item -Path $installerPath -Force -ErrorAction SilentlyContinue }