<# .SYNOPSIS Installiert das loyos-Add-in fuer PowerPoint auf diesem Rechner. .DESCRIPTION Holt das Manifest von der loyos-Adresse, legt es im Benutzerprofil ab und meldet es bei Office an. Es braucht KEINE Administratorrechte: der Eintrag liegt unter HKCU, also im Profil des angemeldeten Benutzers. Office liest dort beim Start nach, welche Add-ins zusaetzlich angeboten werden sollen. Wertname und Wertdaten sind beide der Pfad zur Manifest-Datei - so legt es auch Microsofts eigenes Werkzeug (office-addin-dev-settings) ab. .PARAMETER Quelle Adresse des Manifests. Vorgabe ist die produktive loyos-Adresse. .PARAMETER Datei Statt aus dem Netz: ein lokales Manifest verwenden. Fuer Tests. .PARAMETER Ziel Ordner, in dem das Manifest landet. Vorgabe: %LOCALAPPDATA%\loyos\ppt-addin .EXAMPLE powershell -ExecutionPolicy Bypass -File .\sideload.ps1 .EXAMPLE .\sideload.ps1 -Datei ..\manifest\manifest.xml #> [CmdletBinding()] param( [string]$Quelle = "https://brave-sky-0c1e89703.6.azurestaticapps.net/manifest.xml", [string]$Datei, [string]$Ziel = (Join-Path $env:LOCALAPPDATA "loyos\ppt-addin") ) $ErrorActionPreference = "Stop" function Schritt($text) { Write-Host " $text" } function Fertig($text) { Write-Host " $text" -ForegroundColor Green } function Warnen($text) { Write-Host " $text" -ForegroundColor Yellow } Write-Host "" Write-Host "loyos – Add-in für PowerPoint installieren" -ForegroundColor Cyan Write-Host "" # --- Laeuft PowerPoint noch? Dann wird der Eintrag erst beim Neustart gelesen. if (Get-Process -Name POWERPNT -ErrorAction SilentlyContinue) { Warnen "PowerPoint läuft noch. Die Installation klappt trotzdem," Warnen "aber das Add-in erscheint erst nach einem Neustart von PowerPoint." Write-Host "" } # --- Manifest besorgen New-Item -ItemType Directory -Force -Path $Ziel | Out-Null $zielDatei = Join-Path $Ziel "manifest.xml" if ($Datei) { if (-not (Test-Path $Datei)) { throw "Manifest nicht gefunden: $Datei" } Schritt "Manifest aus $Datei übernehmen" Copy-Item -Path $Datei -Destination $zielDatei -Force } else { Schritt "Manifest holen von $Quelle" try { Invoke-WebRequest -Uri $Quelle -OutFile $zielDatei -UseBasicParsing } catch { throw "Das Manifest ließ sich nicht laden. Besteht eine Internetverbindung, " + "und ist die Adresse erreichbar?`n$($_.Exception.Message)" } } # --- Pruefen, dass es wirklich ein Office-Manifest ist. Ein abgefangener # Proxy liefert gern eine Anmeldeseite mit Status 200 - die wuerde Office # stillschweigend ignorieren, und niemand wuesste warum. try { $xml = [xml](Get-Content -Path $zielDatei -Raw -Encoding UTF8) } catch { Remove-Item $zielDatei -Force -ErrorAction SilentlyContinue throw "Die geladene Datei ist kein gültiges XML. Vermutlich hat ein Proxy " + "etwas anderes zurückgegeben." } if (-not $xml.OfficeApp) { Remove-Item $zielDatei -Force -ErrorAction SilentlyContinue throw "Die geladene Datei ist kein Office-Add-in-Manifest." } $name = $xml.OfficeApp.DisplayName.DefaultValue $version = $xml.OfficeApp.Version Fertig "Manifest geprüft: $name $version" # --- Bei Office anmelden $schluessel = "HKCU:\Software\Microsoft\Office\16.0\WEF\Developer" if (-not (Test-Path $schluessel)) { Schritt "Registry-Pfad anlegen" New-Item -Path $schluessel -Force | Out-Null } # Alte Eintraege auf dasselbe Add-in entfernen, sonst sammeln sich Dubletten # an, wenn der Ordner einmal ein anderer war. $vorhanden = (Get-Item $schluessel).Property foreach ($eintrag in $vorhanden) { if ($eintrag -ne $zielDatei -and $eintrag -like "*loyos*ppt-addin*manifest.xml") { Schritt "Alten Eintrag entfernen: $eintrag" Remove-ItemProperty -Path $schluessel -Name $eintrag -Force } } New-ItemProperty -Path $schluessel -Name $zielDatei -Value $zielDatei ` -PropertyType String -Force | Out-Null Fertig "Bei Office angemeldet" Write-Host "" Write-Host "Fertig. So geht es weiter:" -ForegroundColor Cyan Write-Host " 1. PowerPoint schließen und neu starten" Write-Host " 2. Einfügen → Add-Ins → Meine Add-Ins" Write-Host " 3. Unter 'Entwickler-Add-Ins' auf 'loyos' klicken" Write-Host " 4. Im Add-in auf 'Anmelden' – danach merkt es sich die Anmeldung" Write-Host "" Write-Host "Zum Entfernen: sideload-entfernen.ps1" Write-Host ""