diff --git a/me-rustdeskhost-installer.sh b/me-rustdeskhost-installer.sh new file mode 100644 index 0000000..424496f --- /dev/null +++ b/me-rustdeskhost-installer.sh @@ -0,0 +1,99 @@ +#!/bin/bash +# ===================================================== +# Proxmox RustDesk Master Installer +# Führt die RustDesk-Installation auf ausgewählten Windows-VMs aus +# Enter = alle, oder Index-Zahlen wie 0 2 3 +# ===================================================== + +BOLD="\033[1m" +GREEN="\033[32m" +YELLOW="\033[33m" +CYAN="\033[36m" +RED="\033[31m" +RESET="\033[0m" +INDENT=" " + +# Hier den direkten Link zur RustDesk .exe hinterlegen +# (Tipp: Am besten die exe auf deiner eigenen Gitea ablegen, dann gibt es keine Download-Limits) +RUSTDESK_URL="https://me-gitea.maieredv.cloud/manuel.maier/software/raw/branch/main/rustdesk.exe" + +# ---- Root Check ---- +if [[ $EUID -ne 0 ]]; then + echo -e "${RED}${BOLD}${INDENT}Bitte als Root ausführen!${RESET}" + exit 1 +fi + +# ---- Alle VMs abfragen und nur Windows filtern ---- +echo -e "${CYAN}${BOLD}${INDENT}Lese alle Windows VMs aus...${RESET}" + +WINDOWS_VMS=() +mapfile -t ALL_VMS < <(qm list | awk 'NR>1 {print $1, $2}') + +for vm in "${ALL_VMS[@]}"; do + VMID=$(echo $vm | awk '{print $1}') + VMNAME=$(echo $vm | awk '{print $2}') + + OSTYPE=$(qm config "$VMID" 2>/dev/null | grep -i "^ostype:" | awk '{print $2}') + # Prüfen, ob ostype mit "win" beginnt + if [[ "$OSTYPE" =~ ^win ]]; then + WINDOWS_VMS+=("$VMID $VMNAME") + fi +done + +if [ ${#WINDOWS_VMS[@]} -eq 0 ]; then + echo -e "${YELLOW}${INDENT}Keine Windows VMs gefunden.${RESET}" + exit 1 +fi + +# ---- Gefundene Windows VMs anzeigen ---- +echo -e "${CYAN}${BOLD}${INDENT}Gefundene Windows VMs:${RESET}" +for i in "${!WINDOWS_VMS[@]}"; do + echo -e "${INDENT}[${YELLOW}$i${RESET}] ${WINDOWS_VMS[$i]}" +done + +# ---- Auswahl der VMs ---- +echo +read -p "${INDENT}Welche VMs sollen installiert werden? (Enter = alle, z.B. 0 2 3): " CHOICE + +SELECTED=() +if [[ -z "$CHOICE" ]]; then + SELECTED=("${WINDOWS_VMS[@]}") +else + for index in $CHOICE; do + if [[ $index =~ ^[0-9]+$ ]] && [[ -n "${WINDOWS_VMS[$index]}" ]]; then + SELECTED+=("${WINDOWS_VMS[$index]}") + else + echo -e "${RED}${INDENT}Ungültiger Index: $index${RESET}" + fi + done +fi + +# ---- Installation auf ausgewählten VMs ---- +for vm in "${SELECTED[@]}"; do + VMID=$(echo $vm | awk '{print $1}') + VMNAME=$(echo $vm | awk '{print $2}') + + echo -e "\n${CYAN}${BOLD}${INDENT}----------------------------------------${RESET}" + echo -e "${GREEN}${INDENT}Installiere RustDesk auf VMID $VMID ($VMNAME)...${RESET}" + + echo -e "${INDENT} -> Erstelle C:\\TMP..." + # Force verhindert einen Fehler, falls der Ordner schon existiert + qm guest exec $VMID -- powershell -Command "New-Item -ItemType Directory -Force -Path 'C:\TMP'" >/dev/null 2>&1 + + echo -e "${INDENT} -> Lade RustDesk Installer herunter..." + qm guest exec $VMID -- powershell -Command "Invoke-WebRequest -Uri '$RUSTDESK_URL' -OutFile 'C:\TMP\rustdesk_installer.exe'" >/dev/null 2>&1 + + echo -e "${INDENT} -> Starte Silent-Installation..." + # --silent-install installiert den Background-Service und startet RustDesk unsichtbar + qm guest exec $VMID -- cmd /c "C:\TMP\rustdesk_installer.exe --silent-install" >/dev/null 2>&1 + + echo -e "${INDENT} -> Entferne Desktop-Verknüpfung..." + qm guest exec $VMID -- powershell -Command "Remove-Item -Path 'C:\Users\Public\Desktop\RustDesk.lnk' -ErrorAction SilentlyContinue" >/dev/null 2>&1 + + # Optional aufbauen: Installer danach direkt wieder löschen + # qm guest exec $VMID -- powershell -Command "Remove-Item -Path 'C:\TMP\rustdesk_installer.exe' -ErrorAction SilentlyContinue" >/dev/null 2>&1 + + echo -e "${GREEN}${INDENT} -> Fertig mit VMID $VMID ($VMNAME)!${RESET}" +done + +echo -e "\n${GREEN}${BOLD}${INDENT}✅ Installation auf allen ausgewählten Windows-VMs abgeschlossen!${RESET}" \ No newline at end of file