# WinSetup Bootstrapper # Wird unter der Wurzel-URL ausgeliefert und per irm https:// | iex gestartet. # Laedt das komplette Bundle (WinSetup.ps1 + modules + sqlite3.exe) in einen Temp-Ordner # und startet das Menue. So gibt der Einzeiler den vollen Funktionsumfang, obwohl irm|iex # selbst nur eine Datei holt. # # WICHTIG: $BaseUrl unten auf die tatsaechliche Subdomain setzen (ohne abschliessenden Slash). $ErrorActionPreference = 'Stop' $BaseUrl = 'https://w.nils.my' # <-- anpassen, z.B. https://winsetup.test.de # Ausfuehrung fuer diesen Prozess freigeben (die geladenen .ps1 tragen sonst die # "Mark-of-the-Web" und werden unter RemoteSigned/AllSigned blockiert). try { Set-ExecutionPolicy -Scope Process Bypass -Force -ErrorAction SilentlyContinue } catch { } [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $dir = Join-Path $env:TEMP ('WinSetup_' + [guid]::NewGuid().ToString('N').Substring(0,8)) New-Item -ItemType Directory -Path $dir -Force | Out-Null New-Item -ItemType Directory -Path (Join-Path $dir 'modules') -Force | Out-Null $textFiles = @( 'WinSetup.ps1', 'modules/Crypto.ps1', 'modules/UserData.ps1', 'modules/Taskbar.ps1' ) foreach ($f in $textFiles) { $url = "$BaseUrl/$f" $dst = Join-Path $dir ($f -replace '/', '\') Invoke-WebRequest -Uri $url -OutFile $dst -UseBasicParsing } # sqlite3.exe (Binaer) - separat, damit klar ist dass es binaer geladen wird Invoke-WebRequest -Uri "$BaseUrl/sqlite3.exe" -OutFile (Join-Path $dir 'sqlite3.exe') -UseBasicParsing # Mark-of-the-Web von allen geladenen Dateien entfernen (Guertel und Hosentraeger) Get-ChildItem -LiteralPath $dir -Recurse -File | Unblock-File -ErrorAction SilentlyContinue # Menue starten (interaktiv). $PSScriptRoot des Skripts = $dir, dadurch findet WinSetup.ps1 # seine Module und sqlite3.exe. WINSETUP_HOME wird fuer die Selbst-Elevation (Admin) gesetzt, # damit das elevierte Fenster das Bundle im selben Temp-Ordner wiederfindet. $env:WINSETUP_HOME = $dir & (Join-Path $dir 'WinSetup.ps1')