Manifest Ein PowerShell-Manifest ( .psd1) ist im Grunde nur eine Hashtable mit vordefinierten Keys. Es enthält die Metadaten und Konfiguration zu deinem Modul – also alles, was PowerShell über dein Modul wissen muss, ohne den eigentlichen Code auszuführen. Deshalb liegt es bewusst in einer eigenen Datei, getrennt vom Modul selbst. 🧱 Grundlegende Metadaten Das ist die Identität deines Moduls. Ohne das bist du einfach nur irgendein Skript mit Existenzkrise. RootModule – Hauptdatei ( .psm1 oder .dll) ModuleVersion – Version (z. B. 1.0.0) GUID – Eindeutige ID Author – Ersteller/Entwickler des Moduls CompanyName – Unternehmen Copyright Description – Beschreibung des Moduls 🔗 Abhängigkeiten Hier sagst du: „Ich funktioniere nicht alleine, ich brauche andere.“ RequiredModules  → Externe Abhängigkeiten → Angabe über Modulnamen (PowerShell sucht es selbst) → Müssen im System vorhanden sein (installiert / auffindbar, z.B. über $PSModulePath) → Gehören nicht zu deinem Modul RequiredAssemblies – DLLs ScriptsToProcess – Skripte, die beim Laden ausgeführt werden ModuleList – Nur die Meta-Information welche andere Module zugehörig sind NestedModules → Angabe über Dateien/Pfade (du sagst konkret, was geladen wird) → Interne Bausteine deines Moduls → Werden zusammen mit deinem Modul geladen → Gehören zu deinem Modul dazu 🚀 Export (was nach außen sichtbar ist) Das ist der Teil, wo du entscheidest, was du der Welt zeigst. Oder versteckst. FunctionsToExport CmdletsToExport VariablesToExport AliasesToExport 👉 Klassiker: '*' = alles exportieren oder explizit = bessere Kontrolle 🧠 Kompatibilität & Anforderungen Hier wird’s picky. PowerShellVersion PowerShellHostName PowerShellHostVersion DotNetFrameworkVersion CLRVersion ProcessorArchitecture 📦 Private Daten (der geheime Keller) Alles, was du selbst definierst. PrivateData – Hashtable für eigene Infos Beispiel: PrivateData = @{ PSData = @{ Tags = @('UI','Forms') ProjectUri = 'https://...' } } 🌐 PSData (wichtig für Gallery etc.) Teil von PrivateData, aber so wichtig, dass es eigentlich sein eigenes Ding ist. Tags LicenseUri ProjectUri IconUri ReleaseNotes 🧩 Sonstiges (der „Warum gibt’s das?“ Bereich) Selten gebraucht, aber existiert halt: FileList TypesToProcess FormatsToProcess CompatiblePSEditions ( Desktop, Core) HelpInfoURI 🔧 Mini-Beispiel Damit du nicht nur trockene Theorie hast: @{ RootModule = 'MeinModul.psm1' ModuleVersion = '1.0.0' GUID = '12345678-abcd-1234-abcd-1234567890ab' Author = 'Jonny' Description = 'Mein erstes Modul' FunctionsToExport = @('Get-Thing', 'Set-Thing') PowerShellVersion = '5.1' PrivateData = @{ PSData = @{ Tags = @('Example','Test') } } } Der eigentliche Punkt (den viele übersehen) Du brauchst vielleicht 30% davon wirklich. Der Rest ist: entweder für Publishing oder für Leute, die Kontrolle lieben (oder Angst haben) Wenn du lokal entwickelst: → RootModule, ModuleVersion, FunctionsToExport → fertig, läuft.