18.12.2017

PowerShell Module Manifests

Hallo zusammen! Einer der PowerShell-Fuzzis von netlogix ist mal wieder hier, um was zu erzählen. Diesmal geht’s um die Erstellung von PowerShell-Modulen und Module Manifests.

Was ist ein PowerShell-Modul? Im Prinzip ist das eine Skriptdatei mit der Dateiendung .psm1, die ausgeführt wird, wenn das Modul geladen oder importiert wird. Dieses Skript kann weitere Skripte nachladen und/oder Funktionen definieren.

Dadurch kann ich mir Funktionen genauso wie CMDlets zur Verfügung stellen.

Beispiel:

Wir haben ein Skript geschrieben, das etwas für uns Sinnvolles tut – es prüft, ob die PowerCLI von VMware installiert ist:

Das Skript definiert eine Funktion. Also speichern wir das als .psm1 ab. Damit das Modul nun auch automatisch von der PoSh „gefunden“ werden kann, sollte das Modul in einem Verzeichnis liegen, das genauso heißt wie das Module-File.

Jetzt können wir uns mit Get-Module unser Modul auflisten lassen:

Wie man sieht, steht als ModuleType hier „Script“, da es ein Skriptmodul ist. Bei Version steht „0.0“. Um das zu ändern, gibt es sogenannte „Manifests“. Das ist genaugenommen ein Hashtable bzw. eine beschreibende Datei, die Informationen rund um dieses Modul beinhaltet:

  • Autor
  • Versionsinformationen
  • Voraussetzungen wie die minimal nötige PoSh-Version
  • Aliase
  • u.a.

Eine solche Datei kann man schnell erstellen mit dem CMDlet New-ModuleManifest:

Diese Vorlage können wir nutzen.

Sobald eine solche Datei im Modulordner zu finden ist, wird immer diese statt der Datei mit der Endung .psm1 geladen, wenn das Modul importiert wird. Daher müssen wir nun unbedingt das RootModule mit den zu ladenden Skripten befüllen, damit die Funktion nach dem Import zur Verfügung steht:

Nun ist unser Modul schon etwas „professioneller“ und beinhaltet eine Versionsinformation:

Welche weiteren Elemente eine Manifestdatei unterstützt, finden Sie hier:

https://msdn.microsoft.com/en-us/library/dd878337(v=vs.85).aspx

Happy Scripting!

Sebastian Reitter
Senior Consultant

Unsere Blogs