99 lines
3.7 KiB
Bash
99 lines
3.7 KiB
Bash
#!/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}" |