Freigeben über


Grundlegendes zu einem Windows PowerShell-Modul

Ein Modul ist eine Reihe verwandter Windows PowerShell-Funktionen, gruppiert als praktische Einheit (in der Regel in einem einzigen Verzeichnis gespeichert). Indem Sie einen Satz verwandter Skriptdateien, Assemblys und zugehöriger Ressourcen als Modul definieren, können Sie auf Ihren Code verweisen, laden, beibehalten und freigeben, was sie sonst noch einfacher machen würden.

Der Hauptzweck eines Moduls besteht darin, die Modularisierung (dh Wiederverwendung und Abstraktion) von Windows PowerShell-Code zu ermöglichen. Die einfachste Methode zum Erstellen eines Moduls besteht beispielsweise darin, einfach ein Windows PowerShell-Skript als .psm1-Datei zu speichern. Auf diese Weise können Sie die Funktionen und Variablen im Skript steuern (z. B. öffentlich oder privat machen). Durch das Speichern des Skripts als .psm1 Datei können Sie auch den Umfang bestimmter Variablen steuern. Schließlich können Sie auch Cmdlets wie Install-Module- verwenden, um Ihr Skript als Bausteine für größere Lösungen zu organisieren, zu installieren und zu verwenden.

Modulkomponenten und -typen

Ein Modul besteht aus vier grundlegenden Komponenten:

  1. Eine Art Codedatei – in der Regel ein PowerShell-Skript oder eine verwaltete Cmdlet-Assembly.

  2. Alles andere, was die oben genannte Codedatei benötigt, z. B. zusätzliche Assemblys, Hilfedateien oder Skripts.

  3. Eine Manifestdatei, die die oben genannten Dateien beschreibt, sowie Metadaten wie Autor- und Versionsverwaltungsinformationen speichert.

  4. Ein Verzeichnis, das alle oben genannten Inhalte enthält und sich befindet, wo PowerShell sie vernünftig finden kann.

    Hinweis

    Keiner dieser Komponenten ist selbst notwendig. Beispielsweise kann ein Modul technisch nur ein Skript sein, das in einer .psm1 Datei gespeichert ist. Sie können auch über ein Modul verfügen, das nichts als eine Manifestdatei ist, die hauptsächlich für Organisationszwecke verwendet wird. Sie können auch ein Skript schreiben, das dynamisch ein Modul erstellt und daher kein Verzeichnis zum Speichern benötigt. In den folgenden Abschnitten werden die Typen von Modulen beschrieben, die Sie abrufen können, indem Sie die verschiedenen möglichen Teile eines Moduls miteinander mischen und abgleichen.

Skriptmodule

Wie der Name schon sagt, ist ein Skriptmodul eine Datei (.psm1), die einen gültigen Windows PowerShell-Code enthält. Skriptentwickler und -administratoren können diese Art von Modul verwenden, um Module zu erstellen, deren Mitglieder Funktionen, Variablen und mehr enthalten. Im Herzen ist ein Skriptmodul einfach ein Windows PowerShell-Skript mit einer anderen Erweiterung, mit dem Administratoren Import-, Export- und Verwaltungsfunktionen verwenden können.

Darüber hinaus können Sie eine Manifestdatei verwenden, um andere Ressourcen in Ihr Modul einzuschließen, z. B. Datendateien, andere abhängige Module oder Laufzeitskripts. Manifestdateien eignen sich auch zum Nachverfolgen von Metadaten wie dokumenterstellungs- und Versionsverwaltungsinformationen.

Schließlich muss ein Skriptmodul wie jedes andere Modul, das nicht dynamisch erstellt wird, in einem Ordner gespeichert werden, den PowerShell vernünftigerweise ermitteln kann. In der Regel befindet sich dies auf dem PowerShell-Modulpfad; Bei Bedarf können Sie jedoch explizit beschreiben, wo Ihr Modul installiert ist. Weitere Informationen finden Sie unter Schreiben eines PowerShell-Skriptmoduls.

Binärmodule

Ein binäres Modul ist eine .NET Framework-Assembly (.dll), die kompilierten Code enthält, z. B. C#. Cmdlet-Entwickler können diesen Modultyp verwenden, um Cmdlets, Anbieter und vieles mehr zu teilen. (Vorhandene Snap-Ins können auch als Binärmodule verwendet werden.) Im Vergleich zu einem Skriptmodul können Sie mit einem Binärmodul Cmdlets erstellen, die schneller sind oder Features (z. B. Multithreading) verwenden, die in Windows PowerShell-Skripts nicht so einfach zu codieren sind.

Wie bei Skriptmodulen können Sie eine Manifestdatei einfügen, um zusätzliche Ressourcen zu beschreiben, die Ihr Modul verwendet, und Metadaten zu Ihrem Modul nachzuverfolgen. Ebenso sollten Sie Ihr Binärmodul wahrscheinlich an einer beliebigen Stelle entlang des PowerShell-Modulpfads in einem Ordner installieren. Weitere Informationen finden Sie unter How to How to Write a PowerShell Binary Module.

Manifestmodule

Ein Manifestmodul ist ein Modul, das eine Manifestdatei verwendet, um alle zugehörigen Komponenten zu beschreiben, hat jedoch keine Art von Kernassembly oder Skript. (Formal lässt ein Manifestmodul das ModuleToProcess oder RootModule Element des Manifests leer.) Sie können jedoch weiterhin die anderen Features eines Moduls verwenden, z. B. die Möglichkeit, abhängige Assemblys zu laden oder bestimmte Skripts vor der Verarbeitung automatisch auszuführen. Sie können ein Manifestmodul auch als bequeme Möglichkeit zum Packen von Ressourcen verwenden, die von anderen Modulen verwendet werden, z. B. geschachtelte Module, Assemblys, Typen oder Formate. Weitere Informationen finden Sie unter Schreiben eines PowerShell-Modulmanifests.

Dynamische Module

Ein dynamisches Modul ist ein Modul, das nicht aus einer Datei geladen oder in dieser gespeichert wird. Stattdessen werden sie dynamisch von einem Skript mithilfe des Cmdlets New-Module erstellt. Dieser Modultyp ermöglicht es einem Skript, ein Modul bei Bedarf zu erstellen, das nicht geladen oder im beständigen Speicher gespeichert werden muss. Ein dynamisches Modul soll in seiner Natur kurzlebig sein und kann daher nicht über das Cmdlet Get-Module zugegriffen werden. Ebenso benötigen sie in der Regel keine Modulmanifeste oder benötigen wahrscheinlich permanente Ordner, um ihre zugehörigen Assemblys zu speichern.

Modulmanifeste

Ein Modulmanifest ist eine .psd1 Datei, die eine Hashtabelle enthält. Die Schlüssel und Werte in der Hashtabelle führen die folgenden Aktionen aus:

  • Beschreiben sie den Inhalt und die Attribute des Moduls.

  • Definieren Sie die Voraussetzungen.

  • Bestimmen Sie, wie die Komponenten verarbeitet werden.

    Manifeste sind für ein Modul nicht erforderlich. Module können auf Skriptdateien (.ps1), Skriptmoduldateien (.psm1), Manifestdateien (.psd1), Formatierungs- und Typdateien (.ps1xml), Cmdlet- und Anbieterassemblys (.dll), Ressourcendateien, Hilfedateien, Lokalisierungsdateien oder andere Datei- oder Ressourcentypen verweisen, die als Teil des Moduls gebündelt sind. Für ein internationalisiertes Skript enthält der Modulordner auch eine Reihe von Nachrichtenkatalogdateien. Wenn Sie dem Modulordner eine Manifestdatei hinzufügen, können Sie auf die mehrere Dateien als einzelne Einheit verweisen, indem Sie auf das Manifest verweisen.

    Das Manifest selbst beschreibt die folgenden Informationskategorien:

  • Metadaten zum Modul, z. B. die Modulversionsnummer, der Autor und die Beschreibung.

  • Erforderliche Komponenten zum Importieren des Moduls, z. B. die Windows PowerShell-Version, die ClR-Version (Common Language Runtime) und die erforderlichen Module.

  • Verarbeiten von Direktiven wie Skripts, Formaten und Zu verarbeitenden Typen.

  • Einschränkungen für die Elemente des zu exportierenden Moduls, z. B. aliase, Funktionen, Variablen und Cmdlets, die exportiert werden sollen.

    Weitere Informationen finden Sie unter Schreiben eines PowerShell-Modulmanifests.

Speichern und Installieren eines Moduls

Nachdem Sie ein Skript, ein Binärmodul oder ein Manifestmodul erstellt haben, können Sie Ihre Arbeit an einem Speicherort speichern, auf den andere Personen darauf zugreifen können. Ihr Modul kann beispielsweise im Systemordner gespeichert werden, in dem Windows PowerShell installiert ist, oder es kann in einem Benutzerordner gespeichert werden.

Im Allgemeinen können Sie bestimmen, wo Sie Ihr Modul installieren sollten, indem Sie einen der in der $Env:PSModulePath Variablen gespeicherten Pfade verwenden. Die Verwendung eines dieser Pfade bedeutet, dass PowerShell Ihr Modul automatisch finden und laden kann, wenn ein Benutzer einen Aufruf an das Modul in ihrem Code vorgibt. Wenn Sie Ihr Modul an einer anderen Stelle speichern, können Sie PowerShell explizit informieren, indem Sie den Speicherort Ihres Moduls als Parameter übergeben, wenn Sie Install-Moduleaufrufen.

Unabhängig davon wird der Pfad des Ordners als Basis- des Moduls (ModuleBase) bezeichnet, und der Name der Skript-, Binär- oder Manifestmoduldatei sollte mit dem Namen des Modulordners identisch sein, mit den folgenden Ausnahmen:

  • Dynamische Module, die vom Cmdlet New-Module erstellt werden, können mithilfe des Name Parameters des Cmdlets benannt werden.

  • Module, die vom Befehl Import-Module -Assembly aus Assemblyobjekten importiert werden, werden gemäß der folgenden Syntax benannt: "dynamic_code_module_" + assembly.GetName().

    Weitere Informationen finden Sie unter Installieren eines PowerShell-Moduls und about_PSModulePath.

Modul-Cmdlets und -Variablen

Die folgenden Cmdlets und Variablen werden von Windows PowerShell zum Erstellen und Verwalten von Modulen bereitgestellt.

New-Module Cmdlet Erstellt dieses Cmdlet ein neues dynamisches Modul, das nur im Arbeitsspeicher vorhanden ist. Das Modul wird aus einem Skriptblock erstellt, und seine exportierten Member, z. B. deren Funktionen und Variablen, sind sofort in der Sitzung verfügbar und bleiben bis zum Schließen der Sitzung verfügbar.

New-ModuleManifest Cmdlet Dieses Cmdlet erstellt eine neue Modulmanifestdatei (.psd1), füllt ihre Werte auf und speichert die Manifestdatei im angegebenen Pfad. Dieses Cmdlet kann auch verwendet werden, um eine Modulmanifestvorlage zu erstellen, die manuell ausgefüllt werden kann.

Import-Module Cmdlet Dieses Cmdlet fügt der aktuellen Sitzung mindestens ein Modul hinzu.

Cmdlet Get-Module Dieses Cmdlet ruft Informationen zu den Modulen ab, die in die aktuelle Sitzung importiert werden können.

Export-ModuleMember Cmdlet Dieses Cmdlet gibt die Modulmember (z. B. Cmdlets, Funktionen, Variablen und Aliase) an, die aus einer Skriptmoduldatei (.psm1) oder aus einem dynamischen Modul exportiert werden, das mithilfe des cmdlets New-Module erstellt wurde.

Remove-Module Cmdlet Dieses Cmdlet entfernt Module aus der aktuellen Sitzung.

Test-ModuleManifest Cmdlet Dieses Cmdlet überprüft, ob ein Modulmanifest die Komponenten eines Moduls genau beschreibt, indem überprüft wird, ob die Dateien, die in der Modulmanifestdatei (.psd1) aufgeführt sind, tatsächlich in den angegebenen Pfaden vorhanden sind.

$PSScriptRoot Diese Variable enthält das Verzeichnis, aus dem das Skriptmodul ausgeführt wird. Es ermöglicht Skripts die Verwendung des Modulpfads für den Zugriff auf andere Ressourcen.

$Env:PSModulePath Diese Umgebungsvariable enthält eine Liste der Verzeichnisse, in denen Windows PowerShell-Module gespeichert sind. Windows PowerShell verwendet den Wert dieser Variablen, wenn Module automatisch importiert und Hilfethemen für Module aktualisiert werden.

Siehe auch

Schreiben eines Windows PowerShell-Moduls