@echo off :: Techniverse Fernwartung - Online Version :: Laedt RustDesk direkt von GitHub, konfiguriert den Server und startet :: Der Nutzer braucht NUR diese eine Datei. title Techniverse Fernwartung - Online chcp 65001 >nul 2>&1 set "PS1=%TEMP%\techniverse-starter.ps1" :: PS1 aus dem eingebetteten Block extrahieren (alles zwischen BEGIN_PS1 und END_PS1) setlocal set "FOUND=" (for /f "usebackq delims=" %%a in ("%~f0") do ( if defined FOUND ( if "%%a"==":: END_PS1" (goto :run_ps1) echo(%%a ) if "%%a"==":: BEGIN_PS1" set "FOUND=1" )) > "%PS1%" :run_ps1 endlocal powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%PS1%" del "%PS1%" >nul 2>&1 exit /b :: BEGIN_PS1 $ErrorActionPreference = 'Stop' $Host.UI.RawUI.WindowTitle = 'Techniverse Fernwartung' # ========================== KONFIGURATION =========================== # Server-Adresse (Rendezvous + Relay) $srv = 'fernwartung.techniverse.net' # Oeffentlicher Schluessel des Servers $key = 'uE3lJCcnk21qN0VUdqtwJG6QAnpahdB5b2gVe40oMbU=' # API-Server (optional) - Nur setzen wenn ein eigener API-Server vorhanden ist # Beispiel: $api = 'api.beispiel.de' $api = '' # ==================================================================== $tmp = Join-Path $env:TEMP 'techniverse-fernwartung' $cfgDir = Join-Path $env:APPDATA 'RustDesk\config' $cfg2 = Join-Path $cfgDir 'RustDesk2.toml' $cfg2Bak = Join-Path $cfgDir 'RustDesk2.toml.techniverse-bak' $installDir = Join-Path $env:LOCALAPPDATA 'rustdesk' $hadBackup = $false try { Write-Host '' Write-Host ' ==============================================' -F DarkCyan Write-Host ' Techniverse Fernwartung (Online)' -F DarkCyan Write-Host ' ==============================================' -F DarkCyan Write-Host '' Get-Process rustdesk* -EA 0 | Stop-Process -Force -EA 0 Start-Sleep 2 New-Item -ItemType Directory $tmp -Force | Out-Null $exe = Join-Path $tmp 'rustdesk.exe' Write-Host " [1/4] Ermittle aktuelle RustDesk-Version..." -F White [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $ProgressPreference = 'SilentlyContinue' $rel = Invoke-RestMethod -Uri 'https://api.github.com/repos/rustdesk/rustdesk/releases/latest' -UseBasicParsing $ver = $rel.tag_name -replace '^v','' $asset = $rel.assets | Where-Object { $_.name -like 'rustdesk-*-x86_64.exe' } | Select-Object -First 1 if (-not $asset) { throw 'Kein passender Download fuer x86_64 im neuesten Release gefunden.' } $url = $asset.browser_download_url Write-Host " Aktuelle Version: $ver" -F DarkGray Write-Host " $url" -F DarkGray Write-Host ' (Das kann einen Moment dauern...)' -F DarkGray Invoke-WebRequest -Uri $url -OutFile $exe -UseBasicParsing $ProgressPreference = 'Continue' if (-not (Test-Path $exe)) { throw 'Download fehlgeschlagen' } $mb = [math]::Round((Get-Item $exe).Length/1MB,1) Write-Host " Heruntergeladen: $mb MB" -F DarkGray Write-Host ' [2/4] Sichere bestehende Konfiguration...' -F White New-Item -ItemType Directory $cfgDir -Force | Out-Null if (Test-Path $cfg2) { Copy-Item $cfg2 $cfg2Bak -Force $hadBackup = $true Write-Host ' Backup erstellt.' -F DarkGray } else { Write-Host ' Keine bestehende Konfiguration.' -F DarkGray } Write-Host ' [3/4] Konfiguriere Server...' -F White $toml = @" rendezvous_server = "$srv" nat_type = 1 serial = 0 [options] custom-rendezvous-server = "$srv" relay-server = "$srv" key = "$key" "@ if ($api) { $toml += "`napi-server = `"$api`"" } Set-Content -Path $cfg2 -Value $toml -Encoding UTF8 Write-Host ' [4/4] Starte RustDesk...' -F White Start-Process $exe Write-Host ' Warte auf Start...' -F DarkGray Start-Sleep 8 if (-not (Get-Process rustdesk* -EA 0)) { throw 'RustDesk konnte nicht gestartet werden.' } Write-Host '' Write-Host ' ==============================================' -F DarkCyan Write-Host ' RustDesk laeuft.' -F White Write-Host ' Teile deine ID mit dem Techniverse-Support.' -F White Write-Host '' Write-Host ' Schliesse RustDesk um die Sitzung zu beenden.' -F DarkYellow Write-Host ' Dieses Fenster NICHT schliessen.' -F Red Write-Host ' ==============================================' -F DarkCyan Write-Host '' Write-Host ' !! ACHTUNG - BETRUGSWARNUNG !!' -F Red Write-Host ' Teile deine ID und dein Einmalpasswort' -F DarkYellow Write-Host ' NUR mit Personen, denen du vertraust!' -F DarkYellow Write-Host ' RustDesk wird haeufig fuer Betrug missbraucht.' -F DarkYellow Write-Host ' Techniverse wird dich NIE unaufgefordert' -F DarkYellow Write-Host ' nach deiner ID oder deinem Passwort fragen.' -F DarkYellow Write-Host '' do { Start-Sleep 2 } while (Get-Process rustdesk* -EA 0) } catch { Write-Host "`n FEHLER: $_" -F Red Write-Host ' Bitte kontaktiere den Techniverse-Support.' -F DarkYellow Write-Host '' Read-Host ' Druecke Enter zum Beenden' } finally { Write-Host "`n Raeume auf..." -F DarkYellow Get-Process rustdesk* -EA 0 | Stop-Process -Force -EA 0 Start-Sleep 3 if (Test-Path $cfg2Bak) { Copy-Item $cfg2Bak $cfg2 -Force Remove-Item $cfg2Bak -Force -EA 0 } elseif (Test-Path $cfg2) { Remove-Item $cfg2 -Force -EA 0 } if (Test-Path $installDir) { Remove-Item $installDir -Recurse -Force -EA 0 } if (-not $hadBackup) { $rdAD = Join-Path $env:APPDATA 'RustDesk' if (Test-Path $rdAD) { Remove-Item $rdAD -Recurse -Force -EA 0 } } if (Test-Path $tmp) { Remove-Item $tmp -Recurse -Force -EA 0 } Write-Host ' Aufgeraeumt. Bis zum naechsten Mal.' -F DarkGreen Start-Sleep 3 } :: END_PS1