diff --git a/install_newt-msp-site-win_v2.sh b/install_newt-msp-site-win_v2.sh index 65e119e..bf933cd 100644 --- a/install_newt-msp-site-win_v2.sh +++ b/install_newt-msp-site-win_v2.sh @@ -1,7 +1,7 @@ <# .SYNOPSIS Windows-Installer für den Newt-Client (MAIEREDV Managed Site Client). - Kompatibel mit Windows Server (BITS-Download & TLS 1.2). + Optimiert für Windows Server (BITS, TLS 1.2, sc.exe Fix). #> param([string]$mode = "install") @@ -15,6 +15,7 @@ $InstallDir = "C:\Program Files\me-msp-newt" $ServiceName = "MAIEREDV-Managed-Site-Client" $Symlink = "$InstallDir\newt_latest.exe" $TaskName = "Newt-Updater" +# Ersetze diesen Link durch deine finale Gitea-URL $GiteaUrl = "https://gitea.vmd55888.de/manuel.maier/update-install-newt/raw/branch/main/install_newt-msp-site_v2.ps1" # Helfer-Funktionen @@ -24,7 +25,7 @@ function Get-LatestVersion { try { $url = "https://api.github.com/repos/$Repo/releases/latest" $json = Invoke-RestMethod -Uri $url -UseBasicParsing - return $json.tag_name # Gibt z.B. "v1.9.0" zurück + return $json.tag_name } catch { Write-Log "FEHLER: Konnte Version nicht abrufen." "Red" exit 1 @@ -36,7 +37,7 @@ function Download-Newt { $ArchSuffix = if ([Environment]::Is64BitOperatingSystem) { "windows_amd64.exe" } else { "windows_386.exe" } - # URL-Fix: Das 'v' für den Download-Pfad entfernen (v1.9.0 -> 1.9.0) + # URL-Pfad fixen (v entfernen) $VersionOnly = $FullVersion.TrimStart('v') $Url = "https://github.com/$Repo/releases/download/$VersionOnly/newt_$ArchSuffix" $Target = "$InstallDir\newt_$VersionOnly.exe" @@ -45,7 +46,6 @@ function Download-Newt { Write-Log "Download von: $Url" "Cyan" try { - # BITS umgeht die IE-Sicherheitskonfiguration auf Windows Servern Start-BitsTransfer -Source $Url -Destination $Target -ErrorAction Stop Copy-Item -Path $Target -Destination $Symlink -Force Write-Log "Installation erfolgreich: $Target" "Green" @@ -65,12 +65,31 @@ function Setup-Service { if ([string]::IsNullOrWhiteSpace($PangolinID)) { Write-Log "FEHLER: ID darf nicht leer sein!" "Red"; exit 1 } $ArgList = "--id $PangolinID --secret $PangolinSecret --endpoint $PangolinEndpoint" - # PowerShell Wrapper verhindert Timeouts beim Dienst-Start + # Wrapper für den Binärpfad $BinaryPath = "powershell.exe -WindowStyle Hidden -Command `"$Symlink $ArgList`"" Write-Log "Erstelle Windows Dienst..." "Cyan" - & sc.exe create $ServiceName binPath= $BinaryPath start= auto DisplayName= "MAIEREDV Managed Site Client" - Start-Service $ServiceName + + # sc.exe braucht zwingend ein Leerzeichen NACH dem Gleichheitszeichen. + # Das Array-Format stellt sicher, dass PowerShell diese nicht wegoptimiert. + $scArgs = @( + "create", $ServiceName, + "binPath=", $BinaryPath, + "DisplayName=", "MAIEREDV Managed Site Client", + "start=", "auto" + ) + + & sc.exe $scArgs + + # Kleiner Puffer für die Registrierung + Start-Sleep -Seconds 2 + + if (Get-Service $ServiceName -ErrorAction SilentlyContinue) { + Start-Service $ServiceName + Write-Log "Dienst erfolgreich gestartet." "Green" + } else { + Write-Log "FEHLER: Dienst konnte nicht erstellt werden." "Red" + } } else { Write-Log "Dienst existiert bereits. Starte neu..." "Yellow" Restart-Service $ServiceName @@ -83,12 +102,11 @@ function Setup-UpdateTask { $Action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument $ActionCommand $Trigger = New-ScheduledTaskTrigger -Daily -At 3am - # Task als SYSTEM-Nutzer registrieren Register-ScheduledTask -Action $Action -Trigger $Trigger -TaskName $TaskName -User "SYSTEM" -Force | Out-Null Write-Log "Update-Task fuer 03:00 Uhr erstellt." "Green" } -# --- Ablauf-Steuerung --- +# --- Hauptlogik --- switch ($mode) { "install" { $v = Get-LatestVersion @@ -109,15 +127,15 @@ switch ($mode) { } } "uninstall" { - Write-Log "Deinstallation wird gestartet..." "Yellow" + Write-Log "Deinstallation..." "Yellow" if (Get-Service $ServiceName -ErrorAction SilentlyContinue) { Stop-Service $ServiceName -Force & sc.exe delete $ServiceName } Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false -ErrorAction SilentlyContinue - Write-Log "Dienst und Updater entfernt." "Green" + Write-Log "Dienst und Task entfernt." "Green" } default { - Write-Log "Unbekannter Modus: $mode. Nutze install, update oder uninstall." "Red" + Write-Log "Modus unbekannt: $mode" "Red" } } \ No newline at end of file