# Installiert abdulive auf dem Stream-PC. # # .\install.ps1 # # Aus einem entpackten Paket heraus ausfuehren - install.ps1 liegt darin neben # node.exe. # # Einen `irm ... | iex`-Einzeiler gibt es bewusst nicht: git.zeasy.dev verlangt # instanzweit eine Anmeldung und antwortet auf jede Adresse mit einer Umleitung # auf /user/login. `iex` fuehrt die Anmeldeseite dann als PowerShell aus, mit # einer Fehlermeldung, aus der niemand die Ursache ablesen kann. Wer eine # Ablage ohne Anmeldung hat, gibt sie mit -Quelle an; dann laedt das Skript # das Paket selbst. # # Ohne Administratorrechte, mit Absicht: Programm und Daten liegen im Profil # des Benutzers, damit auch Updates ohne Rueckfrage durchlaufen. Siehe # ADR-0007. [CmdletBinding()] param( # Nur noetig, wenn nicht aus einem entpackten Paket heraus installiert # wird. Dort muessen abdulive.json und die ZIP-Datei ohne Anmeldung # erreichbar sein. [string]$Quelle, [string]$Ziel = (Join-Path $env:LOCALAPPDATA 'Programs\abdulive'), [switch]$KeinAutostart ) $ErrorActionPreference = 'Stop' $daten = Join-Path $env:LOCALAPPDATA 'abdulive' function Schritt($text) { Write-Host "==> $text" -ForegroundColor Cyan } function Hinweis($text) { Write-Host " $text" -ForegroundColor DarkGray } # ---------------------------------------------------------------- Pruefen Schritt 'Umgebung pruefen' if ([Environment]::Is64BitOperatingSystem -ne $true) { throw 'Das Paket gibt es nur fuer 64-Bit-Windows.' } $obs = Get-Process obs64, obs -ErrorAction SilentlyContinue Hinweis ("OBS laeuft: " + $(if ($obs) { 'ja' } else { 'nein - macht nichts, wird spaeter gebraucht' })) # ---------------------------------------------------------------- Quelle $hier = if ($PSScriptRoot) { $PSScriptRoot } else { $null } $ausPaket = $hier -and (Test-Path (Join-Path $hier 'node.exe')) if ($ausPaket) { Schritt "Installiere aus dem entpackten Paket ($hier)" $quellordner = $hier } elseif (-not $Quelle) { Write-Host '' Write-Host 'Dieses Skript liegt nicht neben einem Paket, und -Quelle ist nicht gesetzt.' -ForegroundColor Red Write-Host '' Write-Host 'Entweder:' Write-Host ' - das Paket herunterladen, entpacken und darin install.ps1 ausfuehren' Write-Host ' - oder eine Ablage angeben, unter der abdulive.json ohne Anmeldung liegt:' Write-Host ' .\install.ps1 -Quelle https://.../abdulive' Write-Host '' exit 1 } else { Schritt 'Lade das aktuelle Paket' $tmp = Join-Path $env:TEMP ("abdulive-" + [guid]::NewGuid().ToString('N').Substring(0, 8)) New-Item -ItemType Directory -Force -Path $tmp | Out-Null # Nicht auf die Form der Ausnahme verlassen: `-MaximumRedirection 0` wirft # in Windows PowerShell 5.1 eine WebException ganz ohne `Response`, und ein # Zugriff auf .Response.StatusCode laeuft dann selbst auf die Nase. # Stattdessen holen, was kommt, und den Inhalt ansehen. try { $antwort = Invoke-WebRequest "$Quelle/abdulive.json" -UseBasicParsing -ErrorAction Stop } catch { Write-Host '' Write-Host "$Quelle/abdulive.json ist nicht erreichbar." -ForegroundColor Red Write-Host " $($_.Exception.Message)" Write-Host '' exit 1 } # Eine Anmeldeseite ist HTML und kommt mit Status 200 an, wenn der Umleitung # gefolgt wurde. Genau das ist bei git.zeasy.dev passiert. $typ = [string]$antwort.Headers['Content-Type'] $anfang = [string]$antwort.Content if ($typ -like 'text/html*' -or $anfang -match '(?i)^\s*(