Freigeben über


Importieren eines PowerShell-Moduls

Nachdem Sie ein Modul auf einem System installiert haben, möchten Sie das Modul wahrscheinlich importieren. Beim Importieren handelt es sich um den Prozess, mit dem das Modul in den aktiven Arbeitsspeicher geladen wird, 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 von Import-Module Cmdlet importieren. In PowerShell 3.0 kann PowerShell implizit ein Modul 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 Ihres 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 Importmodul- Cmdlet zum Importieren von Modulen. Wenn dieses Cmdlet ausgeführt wird, sucht Windows PowerShell nach dem angegebenen Modul in den verzeichnissen, die in der variablen PSModulePath angegeben sind. Wenn das angegebene Verzeichnis gefunden wird, sucht Windows PowerShell nach Dateien in der folgenden Reihenfolge: Modulmanifestdateien (.psd1), Skriptmoduldateien (.psm1), Binärmoduldateien (.dll). Weitere Informationen zum Hinzufügen von Verzeichnissen zur Suche finden Sie unter about_PSModulePath. Der folgende Code beschreibt, wie ein Modul importiert wird:

Import-Module myModule

Wenn sich myModule im PSModulePathbefindet, würde PowerShell myModule in den aktiven Speicher laden. Wenn sich myModule nicht auf einem PSModulePath Pfad befindet, können Sie PowerShell dennoch explizit mitteilen, wo sie zu finden ist:

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

Sie können auch den parameter -Verbose verwenden, um zu identifizieren, was aus dem Modul exportiert wird und was in den aktiven Arbeitsspeicher importiert wird. Sowohl Exporte als auch Importe beschränken, was dem Benutzer offengelegt wird: Der Unterschied besteht darin, wer die Sichtbarkeit steuert. Im Wesentlichen werden Exporte durch Code innerhalb des Moduls gesteuert. Im Gegensatz dazu werden Importe vom Import-Module Aufruf gesteuert. Weitere Informationen finden Sie unter Einschränken von Elementen, dieimportiert werden, weiter unten.

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 Umgebungsvariable enthalten ist. Wenn Sie das Modul jedoch nicht in einem gültigen Pfad speichern, können Sie es trotzdem mit der expliziten option Import-Module laden, wie oben beschrieben.

Die folgenden Aktionen lösen den automatischen Import eines Moduls aus, auch bekannt als "Modul automatisch laden".

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

  • Verwenden des cmdlets Get-Command zum Abrufen des Befehls. Wenn Sie z. B. Get-Command Get-JobTrigger eingeben, wird das PSScheduledJob Modul importiert, das das Cmdlet Get-JobTrigger enthält. Ein Get-Command Befehl, der Wildcardzeichen enthält, wird als Ermittlung betrachtet und löst nicht den Import eines Moduls aus.

  • Verwenden sie das Cmdlet Get-Help, um Hilfe zu einem Cmdlet zu erhalten. Beispielsweise importiert die Eingabe Get-Help Get-WinEvent das Modul "Microsoft.PowerShell.Diagnostics", das das cmdlet Get-WinEvent enthält.

Um das automatische Importieren von Modulen zu unterstützen, ruft das cmdlet Get-Command 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 Sitzungsstatus für das Modul erstellt, und ein System.Management.Automation.PSModuleInfo-Objekt wird im Arbeitsspeicher erstellt. Für jedes importierte Modul wird ein Sitzungsstatus erstellt (dazu gehören das Stammmodul und alle geschachtelten Module). Die Elemente, die aus dem Stammmodul exportiert werden, einschließlich aller Elemente, die von geschachtelten Modulen in das Stammmodul exportiert wurden, werden dann in den Sitzungszustand des Aufrufers importiert.

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

Warnung

Wenn der Name eines exportierten Elements ein nicht genehmigtes Verb verwendet oder wenn der Name des Elements eingeschränkte Zeichen verwendet, wird eine Warnung angezeigt, wenn das cmdlet Import-Module ausgeführt wird.

Standardmäßig gibt das cmdlet Import-Module keine Objekte an die Pipeline zurück. Das Cmdlet unterstützt jedoch einen PassThru--Parameter, der verwendet werden kann, um ein System.Management.Automation.PSModuleInfo-Objekt für jedes importierte Modul zurückzugeben. Um die 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 wurden. Standardmäßig werden Variablen und Aliase nicht exportiert. Verwenden Sie zum Einschränken der exportierten Member ein Modulmanifest. Verwenden Sie zum Einschränken der importierten Member die folgenden Parameter des Cmdlets Import-Module.

  • Function: Dieser Parameter schränkt die exportierten Funktionen ein. (Wenn Sie ein Modulmanifest verwenden, lesen Sie den Schlüssel "FunctionsToExport".)

  • ` Cmdlet-: Dieser Parameter schränkt die exportierten Cmdlets ein (Wenn Sie ein Modulmanifest verwenden, lesen Sie den Schlüssel "CmdletsToExport".)

  • Variable: Dieser Parameter schränkt die exportierten Variablen ein (Wenn Sie ein Modulmanifest verwenden, lesen Sie den Schlüssel "VariablesToExport".)

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

Siehe auch

Schreiben eines Windows PowerShell-Moduls