Importieren eines PowerShell-Moduls

Nachdem Sie ein Modul auf einem System installiert haben, möchten Sie das Modul wahrscheinlich importieren. Beim Importieren wird das Modul in den aktiven Arbeitsspeicher geladen, sodass ein Benutzer in seiner PowerShell-Sitzung auf dieses Modul zugreifen kann. In PowerShell 2.0 können Sie ein neu installiertes PowerShell-Modul mit einem Aufruf des Cmdlets Import-Module importieren. In PowerShell 3.0 kann PowerShell ein Modul implizit importieren, wenn eine der Funktionen oder Cmdlets im Modul von einem Benutzer aufgerufen wird. Beachten Sie, dass beide Versionen davon ausgehen, dass Sie Ihr Modul an einem Speicherort installieren, an dem PowerShell es finden kann. Weitere Informationen finden Sie unter Installieren eines PowerShell-Moduls. Sie können ein Modulmanifest verwenden, um einzuschränken, welche Teile Des Moduls exportiert werden, und Sie können Parameter des Import-Module Aufrufs verwenden, um einzuschränken, welche Teile importiert werden.

Importieren eines Snap-In (PowerShell 1.0)

Module waren in PowerShell 1.0 nicht vorhanden: Stattdessen mussten Sie Snap-Ins registrieren und verwenden. Es wird jedoch nicht empfohlen, diese Technologie zu diesem Zeitpunkt zu verwenden, da Module im Allgemeinen einfacher zu installieren und zu importieren sind. Weitere Informationen finden Sie unter Erstellen eines Windows PowerShell Snap-Ins.

Importieren eines Moduls mit Import-Module (PowerShell 2.0)

PowerShell 2.0 verwendet das entsprechend benannte Import-Module-Cmdlet, um Module zu importieren. Wenn dieses Cmdlet ausgeführt wird, sucht Windows PowerShell innerhalb der in der Variablen angegebenen Verzeichnisse nach dem angegebenen PSModulePath Modul. Wenn das angegebene Verzeichnis gefunden wird, sucht Windows PowerShell nach Dateien in der folgenden Reihenfolge: Modulmanifestdateien (PSD1), Skriptmoduldateien (PSM1), binäre Moduldateien (.dll). Weitere Informationen zum Hinzufügen von Verzeichnissen zur Suche finden Sie unter about_PSModulePath. Im folgenden Code wird beschrieben, wie ein Modul importiert wird:

Import-Module myModule

Unter der Annahme, dass sich myModule im PSModulePath befindet, lädt PowerShell myModule in den aktiven Arbeitsspeicher. Wenn sich myModule nicht in einem PSModulePath Pfad befindet, können Sie PowerShell trotzdem explizit mitteilen, wo es zu finden ist:

Import-Module -Name C:\myRandomDirectory\myModule -Verbose

Sie können auch den -Verbose -Parameter verwenden, um zu ermitteln, was aus dem Modul exportiert wird und was in den aktiven Arbeitsspeicher importiert wird. Sowohl Exporte als auch Importe schränken ein, was für den Benutzer verfügbar gemacht wird: Der Unterschied besteht darin, wer die Sichtbarkeit steuert. Im Wesentlichen werden Exporte durch Code innerhalb des Moduls gesteuert. Im Gegensatz dazu werden Importe durch den Import-Module Aufruf gesteuert. Weitere Informationen finden Sie weiter unten unter Einschränken importierter Elemente.

Implizites Importieren eines Moduls (PowerShell 3.0)

Ab Windows PowerShell 3.0 werden Module automatisch importiert, wenn ein Cmdlet oder eine Funktion im Modul in einem Befehl verwendet wird. Dieses Feature funktioniert für jedes Modul in einem Verzeichnis, das im Wert der PSModulePath-Umgebungsvariablen enthalten ist. Wenn Sie Ihr Modul jedoch nicht unter einem gültigen Pfad speichern, können Sie es mithilfe der oben beschriebenen expliziten Import-Module-Option laden.

Die folgenden Aktionen lösen den automatischen Import eines Moduls aus, das auch als "automatisches Laden von Modulen" bezeichnet wird.

  • Verwenden eines Cmdlets in einem Befehl. Wenn Sie beispielsweise eingeben, Get-ExecutionPolicy wird das Microsoft.PowerShell.Security-Modul importiert, das das Get-ExecutionPolicy Cmdlet enthält.

  • Verwenden sie das Cmdlet Get-Command, um den Befehl abzurufen. Wenn Sie z. B. eingeben, Get-Command Get-JobTrigger wird das PSScheduledJob-Modul importiert, das das Get-JobTrigger Cmdlet enthält. Ein Get-Command Befehl, der Platzhalterzeichen enthält, wird als Ermittlung betrachtet und löst keinen Import eines Moduls aus.

  • Verwenden des Cmdlets Get-Help, um Hilfe zu einem Cmdlet zu erhalten. Wenn Sie beispielsweise eingeben, Get-Help Get-WinEvent wird das Microsoft.PowerShell.Diagnostics-Modul importiert, das das Get-WinEvent Cmdlet enthält.

Um den automatischen Import von Modulen zu unterstützen, ruft das Get-Command Cmdlet alle Cmdlets und Funktionen in allen installierten Modulen ab, auch wenn das Modul nicht in die Sitzung importiert wird. Weitere Informationen finden Sie im Hilfethema zum Cmdlet Get-Command.

Der Importvorgang

Wenn ein Modul importiert wird, wird ein neuer Sitzungszustand für das Modul erstellt, und ein System.Management.Automation.PSModuleInfo-Objekt wird im Arbeitsspeicher erstellt. Für jedes importierte Modul wird ein Sitzungszustand erstellt (einschließlich des Stammmoduls und aller geschachtelten Module). Die Elemente, die aus dem Stammmodul exportiert werden, einschließlich aller Member, die von geschachtelten Modulen in das Stammmodul exportiert wurden, werden dann in den Sitzungszustand des Aufrufers importiert.

Die Metadaten von Membern, die aus einem Modul exportiert werden, verfügen über eine ModuleName-Eigenschaft. Diese Eigenschaft wird mit dem Namen des Moduls aufgefüllt, das sie exportiert hat.

Warnung

Wenn der Name eines exportierten Members ein nicht genehmigtes Verb verwendet oder wenn der Name des Members eingeschränkte Zeichen verwendet, wird beim Ausführen des Cmdlets Import-Module eine Warnung angezeigt.

Standardmäßig gibt das Cmdlet Import-Module keine Objekte an die Pipeline zurück. Das Cmdlet unterstützt jedoch einen PassThru-Parameter, mit dem ein System.Management.Automation.PSModuleInfo-Objekt für jedes importierte Modul zurückgegeben werden kann. Um eine Ausgabe an den Host zu senden, sollten Benutzer das Cmdlet Write-Host ausführen.

Einschränken der importierten Elemente

Wenn ein Modul mithilfe des Cmdlets Import-Module importiert wird, werden standardmäßig alle exportierten Modulmember in die Sitzung importiert, einschließlich aller Befehle, die von einem geschachtelten Modul in das Modul exportiert werden. Standardmäßig werden Variablen und Aliase nicht exportiert. Verwenden Sie ein Modulmanifest,um die exportierten Member einzuschränken. Um die importierten Member einzuschränken, verwenden Sie die folgenden Parameter des Import-Module Cmdlets.

  • Funktion: Dieser Parameter schränkt die exportierten Funktionen ein. (Wenn Sie ein Modulmanifest verwenden, sehen Sie sich den FunctionsToExport-Schlüssel an.)

  • `Cmdlet: Dieser Parameter schränkt die cmdlets ein, die exportiert werden (wenn Sie ein Modulmanifest verwenden, lesen Sie den CmdletsToExport-Schlüssel.)

  • Variable: Dieser Parameter schränkt die variablen ein, die exportiert werden (wenn Sie ein Modulmanifest verwenden, lesen Sie den VariablesToExport-Schlüssel.)

  • Alias: Dieser Parameter schränkt die exportierten Aliase ein (wenn Sie ein Modulmanifest verwenden, lesen Sie den AliasesToExport-Schlüssel).)

Weitere Informationen

Schreiben eines Windows PowerShell-Moduls