Skip to main content

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 – Andere Module von außerhalb werden geladen
  • RequiredAssemblies – DLLs
  • ScriptsToProcess – Skripte, die beim Laden ausgeführt werden
  • ModuleList – Nur die Meta-Information welche andere Module zugehörig sind
  • NestedModules – Weitere Module innerhalb deines Moduls die vorher geladen werden

🚀 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.