Was sind Powershell Module?

PowerShell-Module sind Pakete von PowerShell-Funktionen, Cmdlets, Variablen, Aliase, Anbieter und anderen Skriptelementen, die zusammengefasst und als Einheit verteilt werden. Sie dienen dazu, die Wiederverwendbarkeit von Code zu erhöhen, die Organisation zu verbessern und die Zusammenarbeit zwischen Entwicklern zu erleichtern.

Module bestehen in der Regel aus mindestens einer PowerShell-Skriptdatei (PSM1), die den Code für die Funktionen und Cmdlets enthält, sowie einer Modul-Manifestdatei (PSD1), die Metadaten und Informationen über das Modul, wie Autor, Version, Abhängigkeiten und Beschreibung, enthält.

PowerShell-Module können von Drittanbietern erstellt oder von der PowerShell-Community bereitgestellt werden. Viele Module sind über den PowerShell Gallery verfügbar, einem zentralen Repository für PowerShell-Module, das von Microsoft verwaltet wird. Sie können Module von der PowerShell Gallery mit dem Befehl Install-Module herunterladen und installieren.

Einige der Vorteile von PowerShell-Modulen sind:

  1. Wiederverwendbarkeit: Module ermöglichen die Wiederverwendung von Code in verschiedenen Skripten und Projekten, ohne dass der Code dupliziert werden muss.
  2. Organisation: Module können dazu beitragen, den Code besser zu strukturieren und die Lesbarkeit zu verbessern.
  3. Zusammenarbeit: Module erleichtern die Zusammenarbeit zwischen Entwicklern, indem sie es ermöglichen, Code in kleinere, überschaubare Teile aufzuteilen.
  4. Versionierung und Abhängigkeiten: Module unterstützen die Versionierung und das Management von Abhängigkeiten, sodass Sie sicherstellen können, dass Ihre Skripte mit den richtigen Versionen von Modulen und deren Abhängigkeiten kompatibel sind.

Insgesamt bieten PowerShell-Module eine effektive Möglichkeit, Code zu organisieren, zu verwalten und wiederzuverwenden, wodurch die Qualität und Wartbarkeit von PowerShell-Skripten und -Projekten verbessert wird.

Vor- und Nachteile von Powershell Module

Es gibt mehrere Gründe, warum es sinnvoll ist, Funktionen in Module auszulagern. Hier sind einige Vorteile und Nachteile:

Vorteile:

  1. Wiederverwendbarkeit: Module ermöglichen es Ihnen, Funktionen in verschiedenen Skripten und Projekten wiederzuverwenden, ohne den Code duplizieren zu müssen. Dadurch wird die Codebasis einfacher zu warten und zu aktualisieren.
  2. Organisation: Durch das Auslagern von Funktionen in Module können Sie Ihren Code besser organisieren. Jedes Modul kann eine spezifische Aufgabe oder einen bestimmten Zweck haben, wodurch die Struktur und Lesbarkeit Ihres Codes verbessert wird.
  3. Zusammenarbeit: Module erleichtern die Zusammenarbeit zwischen Entwicklern, da sie es ermöglichen, Code in kleinere, überschaubare Teile aufzuteilen. So können mehrere Entwickler gleichzeitig an verschiedenen Modulen arbeiten, ohne sich gegenseitig zu beeinflussen.
  4. Versionierung und Abhängigkeiten: Module unterstützen Versionierung und Abhängigkeiten, sodass Sie sicherstellen können, dass Ihre Skripte mit den richtigen Versionen von Modulen und deren Abhängigkeiten kompatibel sind.
  5. Testbarkeit: Das Auslagern von Funktionen in Module erleichtert das Schreiben von Tests und das Durchführen von Unit-Tests. Sie können einzelne Module testen, ohne den gesamten Code ausführen zu müssen.

Nachteile:

  1. Komplexität: Die Verwendung von Modulen kann zu einer erhöhten Komplexität führen, insbesondere wenn mehrere Module miteinander interagieren oder voneinander abhängen. Es kann schwieriger werden, den Überblick über die Beziehungen zwischen Modulen zu behalten.
  2. Ladezeit: Das Laden von Modulen kann die Ausführungsgeschwindigkeit von Skripten beeinflussen, insbesondere wenn mehrere Module importiert werden müssen. Dies kann jedoch durch gezieltes Laden der benötigten Module und Optimierung der Modulstruktur minimiert werden.
  3. Wartung: Obwohl das Auslagern von Funktionen in Module die Wartung erleichtert, kann es dennoch zusätzliche Arbeit bedeuten, insbesondere wenn mehrere Versionen von Modulen verwaltet werden müssen.

Insgesamt überwiegen die Vorteile von Modulen die Nachteile, insbesondere wenn es um größere Projekte und Zusammenarbeit geht. Durch das Auslagern von Funktionen in Module können Sie Ihren Code besser organisieren, warten und wiederverwenden.

Erstellen eines Moduls

Schrittweise Anleitung

Um PowerShell-Funktionen in ein Modul auszulagern, folgen Sie diesen Schritten:

  1. Erstellen Sie ein neues Verzeichnis für Ihr Modul:
New-Item -ItemType Directory -Path "C:\Users\<username>\Documents\WindowsPowerShell\Modules\<ModuleName>"

Ersetzen Sie <username> durch Ihren Benutzernamen und <ModuleName> durch den gewünschten Modulnamen.

  1. Erstellen Sie eine neue PowerShell-Skriptdatei (PSM1) für Ihr Modul:
New-Item -ItemType File -Path "C:\Users\<username>\Documents\WindowsPowerShell\Modules\<ModuleName>\<ModuleName>.psm1"
  1. Öffnen Sie die erstellte PSM1-Datei in einem Texteditor oder einer integrierten Entwicklungsumgebung (IDE) wie Visual Studio Code.
  2. Fügen Sie Ihre Funktionen in die PSM1-Datei ein. Zum Beispiel:
function Get-HelloWorld {
    [CmdletBinding()]
    param()

    Write-Output "Hello, World!"
}
  1. Speichern und schließen Sie die PSM1-Datei.
  2. Erstellen Sie eine Modul-Manifestdatei (PSD1) für Ihr Modul:
New-ModuleManifest -Path "C:\Users\<username>\Documents\WindowsPowerShell\Modules\<ModuleName>\<ModuleName>.psd1" -RootModule "<ModuleName>.psm1"
  1. Öffnen Sie die PSD1-Datei in einem Texteditor oder einer IDE, um zusätzliche Informationen wie Autor, Beschreibung und Version hinzuzufügen. Speichern und schließen Sie die Datei.
  2. Schließen Sie die PowerShell-Konsole und öffnen Sie sie erneut, damit die Änderungen wirksam werden.
  3. Importieren Sie Ihr Modul mit dem Import-Module-Befehl:
Import-Module <ModuleName>
  1. Jetzt können Sie Ihre Funktionen aus dem Modul verwenden:
Get-HelloWorld

Durch das Auslagern von PowerShell-Funktionen in ein Modul können Sie Ihren Code besser organisieren und wiederverwenden. Sie können diese Funktionen dann einfach in verschiedenen Skripten und Projekten verwenden, indem Sie das entsprechende Modul importieren.

Modul-Manifestdatei

Eine Modul-Manifestdatei ist eine Datei mit der Erweiterung „.psd1“, die Metadaten und Informationen über ein PowerShell-Modul enthält. Diese Datei beschreibt das Modul, seine Abhängigkeiten, Autor, Version, Funktionen, Aliase und andere wichtige Informationen.

Einige der Informationen, die in einer Modul-Manifestdatei enthalten sein können, sind:

  • Modulname
  • Autor
  • Beschreibung
  • Version
  • Abhängigkeiten (andere Module, die benötigt werden)
  • Die Haupt-Modul-Datei (in der Regel eine PSM1-Datei)
  • Exportierte Funktionen, Cmdlets, Aliase und Variablen
  • Benötigte Assemblies
  • Lizenzen und Urheberrechte

Pfade

PowerShell-Module und Modul-Manifestdateien sollten in einem der folgenden Standardverzeichnisse abgelegt werden, damit PowerShell sie automatisch finden und laden kann:

  1. Benutzerspezifischer Modulpfad: C:\Users\<username>\Documents\WindowsPowerShell\Modules
  2. Systemweiter Modulpfad: C:\Program Files\WindowsPowerShell\Modules
  3. Systemweiter Modulpfad (für alle Benutzer): C:\Windows\system32\WindowsPowerShell\v1.0\Modules

PowerShell sucht in diesen Verzeichnissen, die in der $env:PSModulePath-Umgebungsvariable definiert sind, nach verfügbaren Modulen. Sie können zusätzliche Verzeichnisse zu $env:PSModulePath hinzufügen, wenn Sie Module an einem benutzerdefinierten Ort speichern möchten. Um einen benutzerdefinierten Pfad hinzuzufügen, führen Sie den folgenden Befehl aus:

$env:PSModulePath = $env:PSModulePath + ";C:\MyCustomModulePath"

Ersetzen Sie „C:\MyCustomModulePath“ durch den gewünschten Pfad. Beachten Sie jedoch, dass diese Änderung nur für die aktuelle PowerShell-Sitzung gilt. Um den Pfad dauerhaft hinzuzufügen, müssen Sie die Umgebungsvariable „PSModulePath“ auf Systemebene ändern.

Get-Command

Verwendung eines Moduls

Verwendung im Powershell Prompt

Einmalige Einbindung

Öffnen Sie die PowerShell-Konsole und importieren Sie das Modul „MyModule“:

Import-Module MyModule

Verwenden Sie die Funktion „Get-HelloWorld“ direkt im PowerShell-Prompt:

Get-HelloWorld

Nachdem Sie das Modul importiert haben, können Sie auf alle Funktionen im Modul zugreifen, genau wie auf die eingebauten Cmdlets und Funktionen in PowerShell. Sie müssen das Modul nur einmal pro Sitzung importieren, und danach können Sie alle darin enthaltenen Funktionen und Cmdlets frei nutzen.

dauerhafte Einbindung

Es gibt eine Möglichkeit, auf den Inhalt eines Moduls dauerhaft im PowerShell-Prompt zuzugreifen, indem Sie das Modul automatisch bei der Eröffnung jeder neuen PowerShell-Sitzung importieren. Sie können dies erreichen, indem Sie den Import-Module-Befehl in Ihre PowerShell-Profil-Datei einfügen.

Hier sind die Schritte, um ein Modul automatisch in jeder PowerShell-Sitzung zu importieren:

  1. Öffnen Sie PowerShell und führen Sie den folgenden Befehl aus, um den Pfad zur Profildatei für den aktuellen Benutzer zu ermitteln:
$profile
  1. Überprüfen Sie, ob die Profildatei bereits vorhanden ist. Wenn nicht, erstellen Sie sie:
if (!(Test-Path -Path $profile)) {
    New-Item -ItemType File -Path $profile -Force
}
  1. Öffnen Sie die Profildatei in einem Texteditor oder einer integrierten Entwicklungsumgebung (IDE) wie Visual Studio Code:
code $profile

Wenn Sie Visual Studio Code nicht installiert haben, ersetzen Sie code durch den Befehl zum Öffnen Ihres bevorzugten Texteditors.

  1. Fügen Sie den folgenden Code in die Profildatei ein, um das Modul automatisch zu importieren:
Import-Module <ModuleName>

Ersetzen Sie <ModuleName> durch den Namen des Moduls, das Sie importieren möchten.

  1. Speichern und schließen Sie die Profildatei.
  2. Schließen Sie die PowerShell-Konsole und öffnen Sie sie erneut, damit die Änderungen wirksam werden.

Jetzt wird das Modul automatisch in jeder neuen PowerShell-Sitzung importiert, und Sie können auf alle Funktionen und Cmdlets im Modul dauerhaft zugreifen. Beachten Sie jedoch, dass das Hinzufügen vieler Module zur Profildatei die Startzeit von PowerShell-Sitzungen verlängern kann, insbesondere wenn die Module groß sind oder viele Abhängigkeiten haben.

Verwendung im Powershell Skript

Angenommen, Sie haben ein Modul namens „MyModule“ mit einer Funktion „Get-HelloWorld“. Erstellen Sie ein PowerShell-Skript mit dem Namen „MyScript.ps1“ und fügen Sie den folgenden Code ein:

# Importieren des Moduls
Import-Module MyModule

# Verwendung der Funktion aus dem Modul
Get-HelloWorld

Führen Sie das Skript aus, indem Sie es in der PowerShell-Konsole ausführen:

.\MyScript.ps1

Benennung von Funktionen

Damit man nicht die Fehlermeldung „WARNING: The names of some imported commands from the module ‚Modul_Video‘ include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.“ bekommt, sollte man die Cmdlets so umbenennen, dass sie den empfohlenen Verben entsprechen. Ändern Sie den Namen des Cmdlets im Modul-Code und stellen Sie sicher, dass alle Verweise darauf im Code ebenfalls aktualisiert werden. Nachdem Sie die Änderungen vorgenommen haben, sollte die Warnmeldung beim erneuten Importieren des Moduls nicht mehr angezeigt werden.

Will man die Cmdlets nicht umbenennen, dann man auch den -DisableNameChecking-Parameter verwenden. Dieser Parameter verhindert, dass PowerShell während des Importvorgangs Verben überprüft und entsprechende Warnungen ausgibt. Hier ist ein Beispiel, wie Sie den Parameter verwenden können:

> Import-Module ‚C:\xxx.psm1‘ -DisableNameChecking

Beachten Sie, dass das Unterdrücken der Warnung nicht empfohlen wird, da es das Problem nicht wirklich behebt. Die bevorzugte Methode besteht darin, die Verben in Ihrem Modul an die empfohlenen Verben anzupassen, um eine bessere Benutzererfahrung und Konsistenz mit anderen PowerShell-Cmdlets zu gewährleisten.