# Installiert abdulive auf dem Stream-PC. # # Der uebliche Weg, ein Befehl: # irm https://git.zeasy.dev/ZeasyAlex/abdulive/raw/branch/main/scripts/install.ps1 | iex # # Oder aus einem entpackten Paket heraus, wenn das Netz nicht mitspielt: # .\install.ps1 # # Der Einzeiler funktioniert nur, weil das Repo oeffentlich ist. Solange es # privat war, antwortete git.zeasy.dev auf jede Adresse mit einer Umleitung # auf /user/login - `iex` fuehrte dann die Anmeldeseite als PowerShell aus. # Deshalb prueft das Skript unten, ob wirklich JSON zurueckkommt. # # Ohne Administratorrechte, mit Absicht: Programm und Daten liegen im Profil # des Benutzers, damit auch Updates ohne Rueckfrage durchlaufen. Siehe # ADR-0007. [CmdletBinding()] param( # Wird nur gebraucht, wenn nicht aus einem entpackten Paket heraus # installiert wird. Dort liegen abdulive.json und die ZIP-Datei. [string]$Quelle = 'https://git.zeasy.dev/ZeasyAlex/abdulive/releases/download/latest', [string]$Ziel = (Join-Path $env:LOCALAPPDATA 'Programs\abdulive'), [switch]$KeinAutostart, # Das Sprachmodell ist 465 MB. Ohne es entstehen Clips ohne Untertitel. [switch]$OhneModell, [switch]$KeinBrowser ) $ErrorActionPreference = 'Stop' $daten = Join-Path $env:LOCALAPPDATA 'abdulive' # Experimentelle Warnungen abschalten - node:sqlite meldet sich sonst bei # jedem Aufruf auf stderr. $env:NODE_OPTIONS = '--disable-warning=ExperimentalWarning' function Ruf { <# Ein natives Programm aufrufen, ohne dass seine stderr-Ausgabe das Skript beendet. Windows PowerShell 5.1 verpackt jede stderr-Zeile in einen ErrorRecord; zusammen mit ErrorActionPreference = 'Stop' bricht dann alles ab, sobald das Programm auch nur eine Warnung schreibt. #> param([string]$Datei, [string[]]$Argumente) $alt = $ErrorActionPreference $ErrorActionPreference = 'Continue' try { # Out-Host, damit die Ausgabe sichtbar bleibt, aber nicht zum # Rueckgabewert wird. Ohne das kommt statt des Exit-Codes ein Array # aus allen Ausgabezeilen zurueck - und jeder Vergleich damit ist # falsch, ohne dass es auffaellt. & $Datei @Argumente | Out-Host return $LASTEXITCODE } finally { $ErrorActionPreference = $alt } } 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 } 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*(