Skip to main content

Manifest (.psd1)

Was ist ein Manifest?

Ein PowerShell-Manifest (.psd1) istbeschreibt imein GrundePowerShell-Modul.

nur eine Hashtable mit vordefinierten Keys. Es enthält

Während die Metadateneigentliche und Konfiguration zu deinem Modul – also alles, was PowerShell über dein Modul wissen muss, ohne den eigentlichen Code auszuführen. Deshalb liegt es bewusstProgrammlogik in einer eigenen.psm1-Datei Datei,liegt, getrenntenthält vomdas Manifest Informationen über das Modul selbst.

Dazu gehören beispielsweise

    Version Autor Abhängigkeiten exportierte Befehle unterstützte PowerShell-Versionen Lizenzinformationen

    Das Manifest enthält keinen ausführbaren Programmcode. Es dient ausschließlich als Beschreibung und Konfiguration eines Moduls.


    Grundlegende Metadaten

    Allgemein

    Das ist die Identität deines Moduls. Ohne das bist du einfach nur irgendein Skript mit Existenzkrise.

    @{
        RootModule        = "TestModul.psm1"
        ModuleVersion     = "1.7.0"
        GUID              = "ege0799e-734e-451d-9bb1-34983dd82f05"
        Author            = "ProgramMaster"
        CompanyName       = "Microsoft"
        Copyright         = "Microsoft i guess"
        Description       = "Ich beschreibe wundervoll, was das für ein Modul es ist"
    }
    RootModule
      RootModule –

      Hauptdatei (.psm1 oder .dll)

      ModuleVersion
      –

      Version (z. B. 1.0.0)

      GUID
      –

      Eindeutige ID

      Author
      –

      Ersteller/Entwickler des Moduls

      CompanyName
      –

      Unternehmen

      Unternehmen Copyright

      Urheberrechte

      –
      Description
      Wem gehören die Urheberrechte 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.