- Dynamic Sidebar mit window.COURSES_MANIFEST für 13 Kurse (216 Kapitel) - Kurswechsler Dropdown mit Direktnavigation - Fortschrittsanzeige mit Solved-Checkmarks (✓) aus localStorage - Responsive Off-Canvas Drawer mit Floating Action Button (☰ Kapitel) & Backdrop auf Mobile/Tablets - Web-IDE Topbar Drawer-Button (☰ Kapitel) für unterbrechungsfreien Vollbild-Editor - Saubere Bereinigung redundanter statischer Legacy-Sidebars |
||
|---|---|---|
| .. | ||
| aufgabe.ps1 | ||
| index.html | ||
| musterloesung.ps1 | ||
| README.md | ||
| test_aufgabe.ps1 | ||
PS 13: Enterprise Modul-Entwicklung & Manifeste (.psd1) 📦
Willkommen zu Modul 13 des PowerShell 7+ DevOps-Kurses!
Wer professionelle Automatisierungswerkzeuge für Teams und CI/CD-Pipelines baut, packt seinen Code nicht in unstrukturierte monolithische Skripte, sondern in wiederverwendbare PowerShell-Module. Ein professionelles Modul trennt interne Hilfsfunktionen (Private) von der offiziellen Nutzerschnittstelle (Public) und wird durch ein Modul-Manifest (.psd1) versioniert.
💡 1. Das Wichtigste in Kürze
A. Das Standard-Modullayout
MyEnterpriseModule/
├── Public/ # Exportierte Cmdlets für den Benutzer
│ ├── Get-CloudResource.ps1
│ └── New-CloudDeployment.ps1
├── Private/ # Interne Hilfsfunktionen (nicht exportiert!)
│ └── Format-AuthHeader.ps1
├── Tests/ # Pester v5 Unit Tests
│ └── MyEnterpriseModule.Tests.ps1
├── MyEnterpriseModule.psm1 # Der Modul-Code-Loader
└── MyEnterpriseModule.psd1 # Das Modul-Manifest mit Metadaten
B. Das Modul-Manifest (.psd1)
Das Manifest ist eine strukturierte PowerShell-Hashtable mit Metadaten über Autor, Version, GUID und exportierte Funktionen:
@{
RootModule = 'MyEnterpriseModule.psm1'
ModuleVersion = '1.2.0'
GUID = '8e5d326c-d2c6-4b8f-8b9a-7c98e6a5d412'
Author = 'DevOps Cloud Team'
Description = 'Automatisierungs-Toolkit für Hybrid-Cloud Umgebungen'
PowerShellVersion = '7.0'
FunctionsToExport = @('Get-CloudResource', 'New-CloudDeployment')
CmdletsToExport = @()
}
C. Der universelle .psm1 Loader
Anstatt tausende Zeilen Code in eine einzige unübersichtliche .psm1-Datei zu schreiben, lädt der Loader alle Unterdateien dynamisch und exportiert gezielt nur die Public-Funktionen:
# 1. Private Hilfsfunktionen dot-sourcen
Get-ChildItem "$PSScriptRoot/Private/*.ps1" | ForEach-Object { . $_.FullName }
# 2. Public Funktionen dot-sourcen und exportieren
$publicFunctions = Get-ChildItem "$PSScriptRoot/Public/*.ps1" | ForEach-Object {
. $_.FullName
$_.BaseName
}
Export-ModuleMember -Function $publicFunctions
🎼 Die didaktische Analogie: "Das Restaurant mit Showküche"
- Der Gastraum (Public Functions):
Die Speisekarte und die Kellner. Der Gast (Benutzer deines Moduls) sieht und bestellt nur die offiziellen Gerichte (z.B.Invoke-CloudAudit). - Die Küche im Hinterzimmer (Private Functions):
Spülmaschine, Schneidebretter und geheime Gewürzmischungen. Extrem wichtig, aber für den Gast unsichtbar und geschützt vor versehentlicher Fehlbedienung. - Die Gewerbeanmeldung & Zertifikate (
.psd1):
Hygienepass, Inhabername, Versionsnummer und Öffnungszeiten.
🎯 Aufgaben & Teilziele in aufgabe.ps1
- TODO 1:
New-ModuleStructure
Erstelle das standardisierte Modul-Verzeichnislayout mitPublic/,Private/,Tests/und den.psm1/.psd1Dateien. - TODO 2:
Build-ModuleManifestContent
Generiere einen wohlgeformten.psd1Manifest-String mit Version, GUID undFunctionsToExport. - TODO 3:
Invoke-ModuleLoader
Implementiere die Ladelogik, die Private/Public-Dateien einbindet und nur Public-Funktionen exportiert. - TODO 4:
Test-ModuleCompliance
Schreibe einen automatisierten Compliance-Linter, der Modul-Ordner auf Vollständigkeit und Versionierung prüft.
🧪 Tests ausführen
Invoke-Pester ./test_aufgabe.ps1