<# .SYNOPSIS Test: Pusht eine einzelne Seite um Umlaut-Konvertierung zu pruefen #> $ConfluenceUrl = "https://arija-confluence.jaas.service.deutschebahn.com" $SpaceKey = "BES" $ParentPageId = "581013135" $ApiBase = "$ConfluenceUrl/rest/api" $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # Token aus .secrets $SecretsPath = Join-Path $ScriptDir "..\.secrets" $PAT = $null if (Test-Path $SecretsPath) { Get-Content $SecretsPath | ForEach-Object { if ($_ -match "^CONFLUENCE_TOKEN=(.+)$") { $val = $Matches[1].Trim() if ($val -ne "HIER_TOKEN_EINTRAGEN") { $PAT = $val } } } } if (-not $PAT) { $PAT = Read-Host "Confluence PAT" } $Headers = @{ "Authorization" = "Bearer $PAT"; "Content-Type" = "application/json" } # Fix-Umlauts Funktion (identisch zum Haupt-Script) function Fix-Umlauts($html) { if ($null -eq $html -or $html -eq "") { return $html } $Protect = @( 'Israel','Michael','Raphael','Emmanuel','Manuel','Daniel','Samuel', 'Maurer','Enabler','enabler','Container','container','Cluster','cluster', 'User','user','Tracing','Staging','Logging','Alerting','Monitoring', 'Deployment','deployment','Security','security','Recovery','Discovery', 'Delivery','Pipeline','pipeline','Release','release', 'Performance','performance','Interface','interface', 'Service','service','Feature','feature','Issue','issue', 'value','true','blue','Due','due','Queue','queue', 'Unique','unique','Continue','continue', 'Funnel','Tunnel','tunnel','Buildpacks','Dockerfile', 'OpenSearch','Gherkin','Kubernetes','Helmfile','Renovate', 'Operate','Template','template','Tasklist', 'Smoke','smoke','Analyse','analyse','Analysis', 'Baseline','baseline','Namespace','namespace', 'Codebase','Database','database','Rescue','rescue' ) foreach ($w in $Protect) { $html = $html.Replace($w, "PROTECT_$w") } # Namen $html = $html.Replace('Hoerpel', 'Hörpel') $html = $html.Replace('Ruecker', 'Rücker') $html = $html.Replace('Koehler', 'Köhler') $html = $html.Replace('Goendoer', 'Göndör') # ue $html = $html.Replace('Ueber', 'Über') $html = $html.Replace('ueber', 'über') $html = $html.Replace('Pruef', 'Prüf'); $html = $html.Replace('pruef', 'prüf') $html = $html.Replace('fuehrung', 'führung'); $html = $html.Replace('Fuehrung', 'Führung') $html = $html.Replace('Verfueg', 'Verfüg'); $html = $html.Replace('verfueg', 'verfüg') $html = $html.Replace('Verschluess', 'Verschlüss'); $html = $html.Replace('verschluess', 'verschlüss') $html = $html.Replace('Schluess', 'Schlüss'); $html = $html.Replace('schluess', 'schlüss') $html = $html.Replace('Verknuepf', 'Verknüpf'); $html = $html.Replace('verknuepf', 'verknüpf') $html = $html.Replace('Unterstuetz', 'Unterstütz'); $html = $html.Replace('unterstuetz', 'unterstütz') $html = $html.Replace('Luecke', 'Lücke'); $html = $html.Replace('luecke', 'lücke') $html = $html.Replace('Rueck', 'Rück'); $html = $html.Replace('rueck', 'rück') $html = $html.Replace('Frueh', 'Früh'); $html = $html.Replace('frueh', 'früh') $html = $html.Replace('Nuetzlich', 'Nützlich'); $html = $html.Replace('nuetzlich', 'nützlich') $html = $html.Replace('Abkuerz', 'Abkürz'); $html = $html.Replace('abkuerz', 'abkürz') $html = $html.Replace('wuerde', 'würde'); $html = $html.Replace('Wuerde', 'Würde') $html = $html.Replace('muessen', 'müssen'); $html = $html.Replace('Muessen', 'Müssen') $html = $html.Replace('muesste', 'müsste'); $html = $html.Replace('Muesste', 'Müsste') $html = $html.Replace('koennte', 'könnte'); $html = $html.Replace('Koennte', 'Könnte') $html = $html.Replace('fuer ', 'für '); $html = $html.Replace('Fuer ', 'Für ') # oe $html = $html.Replace('Loesung', 'Lösung'); $html = $html.Replace('loesung', 'lösung') $html = $html.Replace('Erhoeh', 'Erhöh'); $html = $html.Replace('erhoeh', 'erhöh') $html = $html.Replace('noetig', 'nötig'); $html = $html.Replace('Noetig', 'Nötig') $html = $html.Replace('moeglich', 'möglich'); $html = $html.Replace('Moeglich', 'Möglich') $html = $html.Replace('geloest', 'gelöst') $html = $html.Replace('hoechst', 'höchst'); $html = $html.Replace('Hoechst', 'Höchst') $html = $html.Replace('koennen', 'können'); $html = $html.Replace('Koennen', 'Können') $html = $html.Replace('Zugehoer', 'Zugehör'); $html = $html.Replace('zugehoer', 'zugehör') $html = $html.Replace('gehoer', 'gehör') # ae $html = $html.Replace('Aenderung', 'Änderung'); $html = $html.Replace('aenderung', 'änderung') $html = $html.Replace('anfaellig', 'anfällig'); $html = $html.Replace('faellig', 'fällig') $html = $html.Replace('faehig', 'fähig') $html = $html.Replace('traeger', 'träger'); $html = $html.Replace('Traeger', 'Träger') $html = $html.Replace('laenger', 'länger'); $html = $html.Replace('Laenger', 'Länger') $html = $html.Replace('erklaer', 'erklär') $html = $html.Replace('klaer', 'klär'); $html = $html.Replace('Klaer', 'Klär') $html = $html.Replace('verstaerk', 'verstärk') $html = $html.Replace('Verstaend', 'Verständ'); $html = $html.Replace('verstaend', 'verständ') $html = $html.Replace('Abhaengig', 'Abhängig'); $html = $html.Replace('abhaengig', 'abhängig') $html = $html.Replace('haeufig', 'häufig'); $html = $html.Replace('Haeufig', 'Häufig') $html = $html.Replace('laeuft', 'läuft'); $html = $html.Replace('Laeuft', 'Läuft') $html = $html.Replace('waere', 'wäre'); $html = $html.Replace('Waere', 'Wäre') $html = $html.Replace('schaerfen', 'schärfen'); $html = $html.Replace('Schaerfen', 'Schärfen') $html = $html.Replace('aufraeumen', 'aufräumen'); $html = $html.Replace('Aufraeumen', 'Aufräumen') $html = $html.Replace('Verlaenger', 'Verlänger'); $html = $html.Replace('verlaenger', 'verlänger') $html = $html.Replace('Naechst', 'Nächst'); $html = $html.Replace('naechst', 'nächst') $html = $html.Replace('Massnahme', 'Maßnahme'); $html = $html.Replace('massnahme', 'maßnahme') $html = $html.Replace('Groesse', 'Größe'); $html = $html.Replace('groesse', 'größe') $html = $html.Replace('gleichmaessig', 'gleichmäßig') $html = $html -replace '([a-z])taet\b', '$1tät' # Schutz aufheben $html = $html.Replace('PROTECT_', '') return $html } # Fuer Seitentitel: Echte Unicode-Zeichen (PS5.1 kompatibel via Char-Codes) function Fix-Title($title) { $title = $title.Replace('ue', "$([char]0xFC)") $title = $title.Replace('Ue', "$([char]0xDC)") $title = $title.Replace('oe', "$([char]0xF6)") $title = $title.Replace('Oe', "$([char]0xD6)") $title = $title.Replace('ae', "$([char]0xE4)") $title = $title.Replace('Ae', "$([char]0xC4)") return $title } # Test-HTML mit vielen Umlauten $TestHtml = @"

Umlaut-Test

Ueberblick ueber die Qualitaet: Hoechste Prioritaet fuer Massnahmen.

Das Team muesste die Komplexitaet verstaendlich erklaeren koennen.

PersonRolleBewertung
Leon HoerpelDevBug-anfaellig
Dominik RueckerBackend DevVerfuegbar
Jonas KoehlerDevLeistungstraeger
Sebastian GoendoerDev (ehem. STeam)Wenig aktiv
Emmanuel Kontcheu TagneFrontend DevKRITISCH

Naechste Schritte: Abhaengigkeiten klaeren, Loesungen erhoehen, Verschluesselung pruefen.

"@ # Konvertieren und anzeigen $Converted = Fix-Umlauts $TestHtml Write-Host "=== VORHER (Auszug) ===" -ForegroundColor Yellow Write-Host " Ueberblick, Qualitaet, Hoerpel, Goendoer, Emmanuel" Write-Host "" Write-Host "=== NACHHER (Auszug) ===" -ForegroundColor Green # Zeige ein paar konvertierte Stellen if ($Converted -match 'Überblick') { Write-Host " Ueberblick -> OK" -ForegroundColor Green } if ($Converted -match 'Qualität') { Write-Host " Qualitaet -> OK" -ForegroundColor Green } if ($Converted -match 'Hörpel') { Write-Host " Hoerpel -> OK" -ForegroundColor Green } if ($Converted -match 'Göndör') { Write-Host " Goendoer -> OK" -ForegroundColor Green } if ($Converted -match 'Emmanuel') { Write-Host " Emmanuel -> OK (nicht konvertiert)" -ForegroundColor Green } if ($Converted -match 'Maßnahme') { Write-Host " Massnahme -> OK" -ForegroundColor Green } if ($Converted -match 'für ') { Write-Host " fuer -> OK" -ForegroundColor Green } if ($Converted -match 'Abhängig') { Write-Host " Abhaengig -> OK" -ForegroundColor Green } if ($Converted -match 'klär') { Write-Host " klaeren -> OK" -ForegroundColor Green } if ($Converted -match 'Komplexität') { Write-Host " Komplexitaet -> OK" -ForegroundColor Green } # Pruefen ob Emmanuel NICHT kaputt ist if ($Converted -match 'E&') { Write-Host " FEHLER: Emmanuel wurde konvertiert!" -ForegroundColor Red } Write-Host "" Write-Host ">> Pushe Test-Seite nach Confluence..." -ForegroundColor Yellow # Push $SearchUri = "$ApiBase/content?spaceKey=$SpaceKey&title=$([Uri]::EscapeDataString('TEST Umlaut-Pruefung'))&type=page" $SearchResp = Invoke-WebRequest -Uri $SearchUri -Headers $Headers -UseBasicParsing -ErrorAction Stop $SearchData = $SearchResp.Content | ConvertFrom-Json if ($SearchData.results -and $SearchData.results.Count -gt 0) { $PageId = $SearchData.results[0].id $VerResp = Invoke-WebRequest -Uri "$ApiBase/content/$PageId`?expand=version" -Headers $Headers -UseBasicParsing $Version = ($VerResp.Content | ConvertFrom-Json).version.number + 1 $Body = @{ version = @{ number = $Version }; title = "TEST Umlaut-Pruefung"; type = "page"; body = @{ storage = @{ value = $Converted; representation = "storage" } } } | ConvertTo-Json -Depth 10 $Resp = Invoke-WebRequest -Uri "$ApiBase/content/$PageId" -Method Put -Headers $Headers -Body ([System.Text.Encoding]::UTF8.GetBytes($Body)) -UseBasicParsing Write-Host " Aktualisiert: $ConfluenceUrl/pages/viewpage.action?pageId=$PageId" -ForegroundColor Green } else { $Body = @{ type = "page"; title = "TEST Umlaut-Pruefung"; space = @{ key = $SpaceKey }; ancestors = @(@{ id = $ParentPageId }); body = @{ storage = @{ value = $Converted; representation = "storage" } } } | ConvertTo-Json -Depth 10 $Resp = Invoke-WebRequest -Uri "$ApiBase/content" -Method Post -Headers $Headers -Body ([System.Text.Encoding]::UTF8.GetBytes($Body)) -UseBasicParsing $NewId = ($Resp.Content | ConvertFrom-Json).id Write-Host " Erstellt: $ConfluenceUrl/pages/viewpage.action?pageId=$NewId" -ForegroundColor Green } Write-Host "" Write-Host "Pruefe die Seite in Confluence und sag mir ob die Umlaute stimmen!" -ForegroundColor Cyan