Files
Orchestrator/bahn/project-audit/scripts/confluence-push-personal.ps1
ankn a5f8fb49ab Migrate all repos into monorepo context folders
Bahn: aisupport, Analyse-O2C-C2S, awesome-bahn-mcp-servers, beam-mcp,
      Confluence_Bot, db-planet-mcp-server, O2C-Harness, project-audit,
      Projekt-KIQ-HP, teamlandkarte-mcp
Dhive: Jury-Voting
Privat: CV, NoteGraph (NOTE: NoteGraph needs complete redo after consolidation)
Shared: AI-Orchestrator, OrgMyLife, power_skills_and_more
Shared/references: symphony (read-only)

Bahn repos remain available as independent remotes - this monorepo
pulls them in via subtree, the originals are untouched.
2026-06-30 20:39:52 +02:00

296 lines
20 KiB
PowerShell

<#
.SYNOPSIS
Pusht die Personal- und Bug-Analyse als Confluence-Seite
.USAGE
powershell -ExecutionPolicy Bypass -File ".\project-audit\scripts\confluence-push-personal.ps1"
#>
$ConfluenceUrl = "https://arija-confluence.jaas.service.deutschebahn.com"
$SpaceKey = "BES"
$ParentPageId = "581013135"
$ApiBase = "$ConfluenceUrl/rest/api"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Write-Host "============================================================"
Write-Host " Personal- und Bug-Analyse -> Confluence"
Write-Host "============================================================"
$PAT = Read-Host "Confluence PAT"
$Headers = @{ "Authorization" = "Bearer $PAT"; "Content-Type" = "application/json" }
function Create-Or-Update-Page {
param([string]$Title, [string]$HtmlBody, [string]$ParentId)
# Umlaute automatisch konvertieren
$HtmlBody = Fix-Umlauts $HtmlBody
$SearchUri = "$ApiBase/content?spaceKey=$SpaceKey&title=$([Uri]::EscapeDataString($Title))&type=page"
try {
$SearchResp = Invoke-WebRequest -Uri $SearchUri -Headers $Headers -UseBasicParsing -ErrorAction Stop
$SearchData = $SearchResp.Content | ConvertFrom-Json
} catch {
Write-Host " FEHLER bei Suche: $($_.Exception.Message)" -ForegroundColor Red
return $null
}
if ($SearchData.results -and $SearchData.results.Count -gt 0) {
$PageId = $SearchData.results[0].id
try {
$VerResp = Invoke-WebRequest -Uri "$ApiBase/content/$PageId`?expand=version,body.storage" -Headers $Headers -UseBasicParsing -ErrorAction Stop
$VerData = $VerResp.Content | ConvertFrom-Json
$Version = $VerData.version.number + 1
} catch { $Version = $SearchData.results[0].version.number + 1 }
Write-Host " Aktualisiere (ID: $PageId, Version: $Version)..." -NoNewline
$Body = @{
version = @{ number = $Version }
title = $Title
type = "page"
body = @{ storage = @{ value = $HtmlBody; representation = "storage" } }
} | ConvertTo-Json -Depth 10
try {
$Resp = Invoke-WebRequest -Uri "$ApiBase/content/$PageId" -Method Put -Headers $Headers -Body ([System.Text.Encoding]::UTF8.GetBytes($Body)) -UseBasicParsing -ErrorAction Stop
Write-Host " OK" -ForegroundColor Green
return ($Resp.Content | ConvertFrom-Json).id
} catch {
Write-Host " FEHLER: $($_.Exception.Message)" -ForegroundColor Red
return $null
}
} else {
Write-Host " Erstelle neue Seite..." -NoNewline
$Body = @{
type = "page"
title = $Title
space = @{ key = $SpaceKey }
ancestors = @(@{ id = $ParentId })
body = @{ storage = @{ value = $HtmlBody; representation = "storage" } }
} | ConvertTo-Json -Depth 10
try {
$Resp = Invoke-WebRequest -Uri "$ApiBase/content" -Method Post -Headers $Headers -Body ([System.Text.Encoding]::UTF8.GetBytes($Body)) -UseBasicParsing -ErrorAction Stop
Write-Host " OK" -ForegroundColor Green
return ($Resp.Content | ConvertFrom-Json).id
} catch {
Write-Host " FEHLER: $($_.Exception.Message)" -ForegroundColor Red
return $null
}
}
}
# ============================================================
# SEITE: Personal- und Bug-Analyse
# ============================================================
Write-Host ""
Write-Host ">> Seite 22: Personal- und Bug-Analyse" -ForegroundColor Yellow
$PersonalHtml = @"
<h2>Personal- und Bug-Analyse pathOS</h2>
<p><strong>Stand:</strong> 2026-04-27 | <strong>Quellen:</strong> Jira (90d + 12M), Rollen-Mapping (BO-Input), Tenure-Daten</p>
<ac:structured-macro ac:name="info"><ac:rich-text-body>
<p>Diese Analyse korreliert Personaldaten (Rollen, Tenure, Aktivitaet) mit Bug-Raten und Qualitaetskennzahlen pro Team und Entwickler.</p>
</ac:rich-text-body></ac:structured-macro>
<h3>Team-Gesundheit im Ueberblick</h3>
<table>
<tr><th>Team</th><th>Personen</th><th>Kern-Devs</th><th>Bug-Rate (90d)</th><th>Bug-Rate (12M)</th><th>Trend</th><th>Bewertung</th></tr>
<tr style="background:#f8cecc;"><td><strong>Team 404</strong></td><td>10</td><td>7</td><td>33%</td><td>25%</td><td>&#8593; Steigend</td><td>KRITISCH</td></tr>
<tr style="background:#d5e8d4;"><td><strong>Team CIB</strong></td><td>13</td><td>6</td><td>20%</td><td>23%</td><td>&#8595; Sinkend</td><td>GUT</td></tr>
<tr style="background:#d5e8d4;"><td><strong>Team Zero</strong></td><td>9</td><td>6</td><td>15%</td><td>15%</td><td>&#8594; Stabil</td><td>GUT</td></tr>
<tr style="background:#fff2cc;"><td><strong>OPs Squad</strong></td><td>7+ rot.</td><td>2 fest</td><td>31%</td><td>27%</td><td>&#8595; Sinkend</td><td>BEOBACHTEN</td></tr>
<tr style="background:#fff2cc;"><td><strong>DevOps</strong></td><td>7</td><td>3</td><td>9%</td><td>7%</td><td>&#8594; Stabil</td><td>OK (SPOF)</td></tr>
</table>
<h3>Team 404 (Portal) &#8212; KRITISCH</h3>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<p>Hoechste Bug-Rate (33%), steigend seit Go-Live. Portal ist kundenseitig &#8212; Bugs werden direkt von EVUs gemeldet.</p>
</ac:rich-text-body></ac:structured-macro>
<table>
<tr><th>Person</th><th>Rolle</th><th>Seit</th><th>Issues (90d)</th><th>Bug-Anteil</th><th>Done%</th><th>Bewertung</th></tr>
<tr style="background:#d5e8d4;"><td>Ana Cvitkovic</td><td>Business Engineer</td><td>2021-08</td><td>78</td><td>niedrig</td><td>hoch</td><td>TOP &#8212; Anker des Teams</td></tr>
<tr><td>Jasmin Keskin</td><td>Frontend Dev</td><td>2021-08</td><td>45</td><td>42%</td><td>mittel</td><td>Bug-anfaellig</td></tr>
<tr style="background:#f8cecc;"><td>Emmanuel Kontcheu Tagne</td><td>Frontend Dev</td><td>2021-08</td><td>42</td><td>69%</td><td>mittel</td><td>KRITISCH</td></tr>
<tr><td>Diego Da Costa Souza</td><td>Frontend Dev</td><td>2021-09</td><td>41</td><td>mittel</td><td>mittel</td><td>Spring Boot 4 Portal</td></tr>
<tr style="background:#f8cecc;"><td>Leon Hoerpel</td><td>Dev</td><td>?</td><td>35</td><td>71%</td><td>mittel</td><td>KRITISCH</td></tr>
<tr><td>Dominik Ruecker</td><td>Backend Dev</td><td>?</td><td>31</td><td>mittel</td><td>mittel</td><td></td></tr>
<tr style="background:#d5e8d4;"><td>Annette Halbhuber</td><td>Lead Dev</td><td>2021-09</td><td>26</td><td>niedrig</td><td>hoch</td><td>Stabil, Lead</td></tr>
<tr style="background:#d5e8d4;"><td>Simon Reitinger</td><td>Dev</td><td>2025-11</td><td>15</td><td>0%</td><td>100%</td><td>Exzellenter Start</td></tr>
<tr><td>Marcel Hufgard</td><td>PO</td><td>2021-12</td><td>8</td><td>&#8212;</td><td>&#8212;</td><td>Product Owner</td></tr>
<tr style="background:#fff2cc;"><td>Luca Caracciolo</td><td>QA</td><td>2021-09</td><td>5</td><td>&#8212;</td><td>&#8212;</td><td>Wenig aktiv</td></tr>
</table>
<p><strong>Kernproblem:</strong> Emmanuel (69% Bugs) und Leon (71% Bugs) arbeiten beide im Frontend. Das Portal-Frontend hat ein systematisches Qualitaetsproblem. QA (Luca) ist wenig aktiv &#8212; Testabdeckung unzureichend.</p>
<h3>Team CIB (Prozesse/Backend) &#8212; Erfolgsgeschichte</h3>
<ac:structured-macro ac:name="tip"><ac:rich-text-body>
<p>Bug-Rate von 36% (Jan) auf 9% (Apr) gesunken. Backend stabilisiert sich nach Go-Live.</p>
</ac:rich-text-body></ac:structured-macro>
<table>
<tr><th>Person</th><th>Rolle</th><th>Seit</th><th>Issues (90d)</th><th>Bug-Anteil</th><th>Done%</th><th>Bewertung</th></tr>
<tr style="background:#d5e8d4;"><td>Bishara Jaser</td><td>Dev</td><td>2022-08</td><td>73</td><td>niedrig</td><td>93%</td><td>TOP &#8212; Leistungstraeger</td></tr>
<tr style="background:#d5e8d4;"><td>Saurav Kumar</td><td>Dev</td><td>2022-01</td><td>48</td><td>8%</td><td>94%</td><td>TOP &#8212; niedrigste Bug-Rate</td></tr>
<tr style="background:#d5e8d4;"><td>Jonas Koehler</td><td>Dev</td><td>?</td><td>34</td><td>niedrig</td><td>100%</td><td>Exzellent</td></tr>
<tr><td>Dong-Won Han</td><td>Dev</td><td>2021-09</td><td>20</td><td>mittel</td><td>mittel</td><td>Veteran</td></tr>
<tr><td>Hans-Henning Ramberger</td><td>Dev</td><td>2024-05</td><td>16</td><td>mittel</td><td>mittel</td><td>Auch OPs</td></tr>
<tr><td>Vasileios Dimitriadis</td><td>Dev</td><td>2023-11</td><td>11</td><td>mittel</td><td>mittel</td><td>Wenig aktiv</td></tr>
<tr><td>Christian Meins</td><td>PO</td><td>2021-10</td><td>9</td><td>&#8212;</td><td>&#8212;</td><td>Product Owner</td></tr>
<tr><td>Harry Braun</td><td>Dev</td><td>2023-01</td><td>5</td><td>mittel</td><td>mittel</td><td>SB4 SV</td></tr>
<tr><td>Olaf Becken</td><td>Business Engineer</td><td>2024-05</td><td>5</td><td>&#8212;</td><td>&#8212;</td><td></td></tr>
<tr style="background:#fff2cc;"><td>Alexander Petioky</td><td>Dev</td><td>2021-10</td><td>1</td><td>&#8212;</td><td>&#8212;</td><td>Kaum aktiv</td></tr>
</table>
<p><strong>Kern-Trio:</strong> Bishara + Saurav + Jonas (155 Issues, &gt;93% Done). Deren Arbeitsweise sollte als Vorbild fuer andere Teams dienen.</p>
<h3>Team Zero (TAF/TAP) &#8212; Stabil</h3>
<ac:structured-macro ac:name="tip"><ac:rich-text-body>
<p>Niedrigste Bug-Rate (15%), stabiler Output. Beste SonarQube-Qualitaet (4.2 Smells/1K, 91.8% Coverage).</p>
</ac:rich-text-body></ac:structured-macro>
<table>
<tr><th>Person</th><th>Rolle</th><th>Seit</th><th>Issues (90d)</th><th>Bug-Anteil</th><th>Bewertung</th></tr>
<tr style="background:#d5e8d4;"><td>Steven Meixner</td><td>Dev</td><td>2022-07</td><td>64 + 27 OPs</td><td>niedrig</td><td>TOP &#8212; Allrounder (SPOF!)</td></tr>
<tr style="background:#d5e8d4;"><td>Bing Shi</td><td>Dev</td><td>2022-04</td><td>63</td><td>niedrig</td><td>Stark</td></tr>
<tr style="background:#d5e8d4;"><td>Frank Lemke</td><td>Dev</td><td>2022-12</td><td>49</td><td>niedrig</td><td>Auch OPs</td></tr>
<tr><td>Kathrin Schleich</td><td>Dev</td><td>2021-09</td><td>27</td><td>niedrig</td><td>Auch OPs</td></tr>
<tr style="background:#fff2cc;"><td>Michael Weisberg</td><td>Test</td><td>2024-11</td><td>23</td><td>&#8212;</td><td>52% offen</td></tr>
<tr><td>Bernd Klebl</td><td>PO</td><td>2021-09</td><td>16</td><td>&#8212;</td><td>Auch OPs</td></tr>
<tr style="background:#f8cecc;"><td>Norbert Maurer</td><td>Dev</td><td>2021-11</td><td>12</td><td>&#8212;</td><td>83% offen &#8212; ausgeschieden?</td></tr>
</table>
<h3>DevOps &#8212; SPOF-Risiko</h3>
<ac:structured-macro ac:name="warning"><ac:rich-text-body>
<p><strong>Jan Lubenow = 39% aller DevOps-Issues</strong> &#8212; kritischster Single Point of Failure im gesamten Programm.</p>
</ac:rich-text-body></ac:structured-macro>
<table>
<tr><th>Person</th><th>Rolle</th><th>Seit</th><th>Issues (90d)</th><th>Anteil</th></tr>
<tr style="background:#f8cecc;"><td><strong>Jan Lubenow</strong></td><td>Lead Dev</td><td>2022-09</td><td>114</td><td>39%</td></tr>
<tr><td>David Steinkopff</td><td>Dev</td><td>2023-03</td><td>18</td><td>6%</td></tr>
<tr><td>Henrik Scholl</td><td>Dev</td><td>2024-10</td><td>10</td><td>3%</td></tr>
<tr><td>Christian Prause</td><td>Dev</td><td>?</td><td>7</td><td>2%</td></tr>
<tr><td>Patrick Lewandowski</td><td>Dev</td><td>?</td><td>6</td><td>2%</td></tr>
<tr><td>Michael Mh Jahn</td><td>Dev</td><td>?</td><td>6</td><td>2%</td></tr>
<tr><td>Sebastian Goendoer</td><td>Dev</td><td>?</td><td>3</td><td>1%</td></tr>
</table>
<h3>Tenure vs. Bug-Rate &#8212; Korrelation</h3>
<table>
<tr><th>Team</th><th>Hypothese: Laenger dabei = weniger Bugs?</th><th>Ergebnis</th></tr>
<tr><td>Team 404</td><td>Emmanuel (56 Monate, 69% Bugs), Simon (5 Monate, 0% Bugs)</td><td><strong>WIDERLEGT</strong> &#8212; Systematisches Problem</td></tr>
<tr><td>Team CIB</td><td>Saurav (51 Monate, 8% Bugs), Bishara (44 Monate, niedrig)</td><td><strong>BESTAETIGT</strong> &#8212; Erfahrung + gute Prozesse</td></tr>
<tr><td>Team Zero</td><td>Alle Veteranen niedrige Bug-Rate, beste SonarQube-Werte</td><td><strong>BESTAETIGT</strong> &#8212; Stabiles Team + Praktiken</td></tr>
</table>
<p><strong>Fazit:</strong> Tenure allein erklaert die Bug-Rate nicht. Team 404 hat ein systematisches Frontend-Qualitaetsproblem, das nicht durch Erfahrung geloest wird. CIB und Zero zeigen, dass gute Prozesse + Erfahrung zusammen wirken.</p>
<h3>Risiko-Matrix Personal</h3>
<h4>KRITISCH (sofort handeln)</h4>
<table>
<tr><th>Risiko</th><th>Person(en)</th><th>Impact</th><th>Massnahme</th></tr>
<tr style="background:#f8cecc;"><td>SPOF DevOps</td><td>Jan Lubenow (39%)</td><td>Deployment, CI/CD, Infra</td><td>Wissenstransfer, Dokumentation</td></tr>
<tr style="background:#f8cecc;"><td>SPOF Zero/OPs</td><td>Steven Meixner (91 Issues)</td><td>TAF/TAP + Infrastruktur</td><td>Entlastung, Backup aufbauen</td></tr>
<tr style="background:#f8cecc;"><td>Bug-Verursacher 404</td><td>Emmanuel (69%), Leon (71%)</td><td>Portal-Qualitaet</td><td>Code-Reviews, Pair Programming</td></tr>
</table>
<h4>HOCH (kurzfristig)</h4>
<table>
<tr><th>Risiko</th><th>Person(en)</th><th>Impact</th><th>Massnahme</th></tr>
<tr style="background:#fff2cc;"><td>QA-Engpass 404</td><td>Luca Caracciolo (5 Issues)</td><td>Testabdeckung Portal</td><td>Aktivieren oder ersetzen</td></tr>
<tr style="background:#fff2cc;"><td>Test-Backlog Zero</td><td>Michael Weisberg (52% offen)</td><td>Testabdeckung TAF/TAP</td><td>Priorisierung</td></tr>
<tr style="background:#fff2cc;"><td>Inaktive Mitglieder</td><td>Norbert Maurer, Alexander Petioky</td><td>Offene Issues, Wissen</td><td>Status klaeren</td></tr>
</table>
<h3>Top 5 Massnahmen (priorisiert)</h3>
<ol>
<li><strong>Jan Lubenow entlasten</strong> &#8212; Wissenstransfer auf David Steinkopff + Henrik Scholl. DevOps-Runbook beschleunigen. Ziel: Kein Einzelner &gt;25% der Issues.</li>
<li><strong>Portal-Qualitaet steigern (404)</strong> &#8212; Code-Reviews fuer Emmanuel/Leon verstaerken. Frontend-Testautomatisierung ausbauen. QA aktivieren. Fehlermeldungen-Konzept umsetzen.</li>
<li><strong>Steven Meixner entlasten</strong> &#8212; OPs-Rotation auf CIB/404 ausweiten. Steven soll sich auf Zero-Kernarbeit konzentrieren.</li>
<li><strong>Inaktive klaeren</strong> &#8212; Norbert Maurer (Zero), Alexander Petioky (CIB), Sebastian Goendoer (OPs): Status klaeren, offene Issues umverteilen.</li>
<li><strong>CIB Best Practices teilen</strong> &#8212; Bishara/Saurav/Jonas als Mentoren. Deren Arbeitsweise (&gt;93% Done, &lt;10% Bugs) als Vorbild fuer 404.</li>
</ol>
"@
# Umlaute: Nutze gleiche Funktion wie confluence-push.ps1
# Schritt 1: Englische Woerter schuetzen, Schritt 2: Ersetzen, Schritt 3: Schutz aufheben
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&ouml;rpel')
$html = $html.Replace('Ruecker', 'R&uuml;cker')
$html = $html.Replace('Koehler', 'K&ouml;hler')
$html = $html.Replace('Goendoer', 'G&ouml;nd&ouml;r')
# ue
$html = $html.Replace('Ueber', '&Uuml;ber')
$html = $html.Replace('ueber', '&uuml;ber')
$html = $html.Replace('Pruef', 'Pr&uuml;f'); $html = $html.Replace('pruef', 'pr&uuml;f')
$html = $html.Replace('fuehrung', 'f&uuml;hrung'); $html = $html.Replace('Fuehrung', 'F&uuml;hrung')
$html = $html.Replace('Verfueg', 'Verf&uuml;g'); $html = $html.Replace('verfueg', 'verf&uuml;g')
$html = $html.Replace('Verschluess', 'Verschl&uuml;ss'); $html = $html.Replace('verschluess', 'verschl&uuml;ss')
$html = $html.Replace('Schluess', 'Schl&uuml;ss'); $html = $html.Replace('schluess', 'schl&uuml;ss')
$html = $html.Replace('Verknuepf', 'Verkn&uuml;pf'); $html = $html.Replace('verknuepf', 'verkn&uuml;pf')
$html = $html.Replace('Unterstuetz', 'Unterst&uuml;tz'); $html = $html.Replace('unterstuetz', 'unterst&uuml;tz')
$html = $html.Replace('Luecke', 'L&uuml;cke'); $html = $html.Replace('luecke', 'l&uuml;cke')
$html = $html.Replace('Rueck', 'R&uuml;ck'); $html = $html.Replace('rueck', 'r&uuml;ck')
$html = $html.Replace('Frueh', 'Fr&uuml;h'); $html = $html.Replace('frueh', 'fr&uuml;h')
$html = $html.Replace('Nuetzlich', 'N&uuml;tzlich'); $html = $html.Replace('nuetzlich', 'n&uuml;tzlich')
$html = $html.Replace('Abkuerz', 'Abk&uuml;rz'); $html = $html.Replace('abkuerz', 'abk&uuml;rz')
$html = $html.Replace('wuerde', 'w&uuml;rde'); $html = $html.Replace('Wuerde', 'W&uuml;rde')
$html = $html.Replace('muessen', 'm&uuml;ssen'); $html = $html.Replace('Muessen', 'M&uuml;ssen')
$html = $html.Replace('fuer ', 'f&uuml;r '); $html = $html.Replace('Fuer ', 'F&uuml;r ')
# oe
$html = $html.Replace('Loesung', 'L&ouml;sung'); $html = $html.Replace('loesung', 'l&ouml;sung')
$html = $html.Replace('Erhoeh', 'Erh&ouml;h'); $html = $html.Replace('erhoeh', 'erh&ouml;h')
$html = $html.Replace('noetig', 'n&ouml;tig'); $html = $html.Replace('Noetig', 'N&ouml;tig')
$html = $html.Replace('moeglich', 'm&ouml;glich'); $html = $html.Replace('Moeglich', 'M&ouml;glich')
$html = $html.Replace('geloest', 'gel&ouml;st')
$html = $html.Replace('hoechst', 'h&ouml;chst'); $html = $html.Replace('Hoechst', 'H&ouml;chst')
$html = $html.Replace('koennen', 'k&ouml;nnen'); $html = $html.Replace('Koennen', 'K&ouml;nnen')
$html = $html.Replace('Zugehoer', 'Zugeh&ouml;r'); $html = $html.Replace('zugehoer', 'zugeh&ouml;r')
$html = $html.Replace('gehoer', 'geh&ouml;r')
# ae
$html = $html.Replace('Aenderung', '&Auml;nderung'); $html = $html.Replace('aenderung', '&auml;nderung')
$html = $html.Replace('anfaellig', 'anf&auml;llig'); $html = $html.Replace('faellig', 'f&auml;llig')
$html = $html.Replace('faehig', 'f&auml;hig')
$html = $html.Replace('traeger', 'tr&auml;ger'); $html = $html.Replace('Traeger', 'Tr&auml;ger')
$html = $html.Replace('laenger', 'l&auml;nger'); $html = $html.Replace('Laenger', 'L&auml;nger')
$html = $html.Replace('erklaer', 'erkl&auml;r')
$html = $html.Replace('klaer', 'kl&auml;r'); $html = $html.Replace('Klaer', 'Kl&auml;r')
$html = $html.Replace('verstaerk', 'verst&auml;rk')
$html = $html.Replace('Verstaend', 'Verst&auml;nd'); $html = $html.Replace('verstaend', 'verst&auml;nd')
$html = $html.Replace('Abhaengig', 'Abh&auml;ngig'); $html = $html.Replace('abhaengig', 'abh&auml;ngig')
$html = $html.Replace('haeufig', 'h&auml;ufig'); $html = $html.Replace('Haeufig', 'H&auml;ufig')
$html = $html.Replace('laeuft', 'l&auml;uft'); $html = $html.Replace('Laeuft', 'L&auml;uft')
$html = $html.Replace('waere', 'w&auml;re'); $html = $html.Replace('Waere', 'W&auml;re')
$html = $html.Replace('schaerfen', 'sch&auml;rfen'); $html = $html.Replace('Schaerfen', 'Sch&auml;rfen')
$html = $html.Replace('aufraeumen', 'aufr&auml;umen'); $html = $html.Replace('Aufraeumen', 'Aufr&auml;umen')
$html = $html.Replace('Verlaenger', 'Verl&auml;nger'); $html = $html.Replace('verlaenger', 'verl&auml;nger')
$html = $html.Replace('Naechst', 'N&auml;chst'); $html = $html.Replace('naechst', 'n&auml;chst')
$html = $html.Replace('Massnahme', 'Ma&szlig;nahme'); $html = $html.Replace('massnahme', 'ma&szlig;nahme')
$html = $html.Replace('Groesse', 'Gr&ouml;&szlig;e'); $html = $html.Replace('groesse', 'gr&ouml;&szlig;e')
$html = $html.Replace('gleichmaessig', 'gleichm&auml;&szlig;ig')
$html = $html -replace '([a-z])taet\b', '$1t&auml;t'
# Schutz aufheben
$html = $html.Replace('PROTECT_', '')
return $html
}
$PageId = Create-Or-Update-Page -Title "22. Personal- und Bug-Analyse" -HtmlBody $PersonalHtml -ParentId $ParentPageId
Write-Host ""
if ($PageId) {
Write-Host "FERTIG! $ConfluenceUrl/pages/viewpage.action?pageId=$PageId" -ForegroundColor Green
} else {
Write-Host "FEHLER beim Erstellen der Seite" -ForegroundColor Red
}