about_Modules

Kurze Beschreibung

Erläutert, wie PowerShell-Module installiert, importiert und verwendet werden.

Lange Beschreibung

PowerShell ist sowohl eine Befehlsshell als auch eine Skriptsprache. Befehle in PowerShell werden als Skripts, Funktionen oder Cmdlets implementiert. Die Sprache enthält Schlüsselwörter, die die Struktur und Logik der Verarbeitung und andere Ressourcen bereitstellen, z. B. Variablen, Anbieter, Aliase.

Ein Modul ist eine eigenständige wiederverwendbare Einheit, die Cmdlets, Anbieter, Funktionen, Variablen und andere Ressourcen enthalten kann. Standardmäßig lädt PowerShell automatisch ein installiertes Modul, wenn Sie einen Befehl aus dem Modul zum ersten Mal verwenden. Sie können das Verhalten des automatischen Modulladevorgangs mithilfe der Variablen $PSModuleAutoloadingPreferencekonfigurieren. Weitere Informationen finden Sie unter about_Preference_Variables.

Sie können Module auch während einer PowerShell-Sitzung manuell laden oder entladen. Um ein Modul zu laden oder neu zu laden, verwenden Sie Import-Module. Verwenden Sie das Remove-Module Cmdlet, um ein Modul zu entladen.

PowerShell enthält eine Basisgruppe von Modulen. Jeder kann neue Module mit C# oder der PowerShell-Skriptsprache selbst erstellen. Module, die in C# als kompilierte .NET-Assemblys geschrieben wurden, werden als systemeigene Module bezeichnet. In PowerShell geschriebene Module werden als Skriptmodule bezeichnet.

In diesem Artikel wird erläutert, wie PowerShell-Module verwendet werden. Informationen zum Erstellen von PowerShell-Modulen finden Sie unter Schreiben eines PowerShell-Moduls.

Hinweis

Vor PowerShell 3.0 wurden Cmdlets und Anbieter in PowerShell-Snap-Ins verpackt. Ab PowerShell 3.0 wird das Microsoft.PowerShell.Core-Snap-In standardmäßig jeder Sitzung hinzugefügt. Dies ist das einzige Snap-In, das in PowerShell verbleibt. Alle anderen Snap-Ins wurden in Module konvertiert. Das Erstellen neuer Snap-Ins wird nicht mehr unterstützt.

Standardmodulspeicherorte

PowerShell speichert Module an den folgenden Standardspeicherorten:

  • Unter Windows
    • Bereich "Alle Benutzer" – $env:ProgramFiles\PowerShell\Modules
    • Aktueller Benutzerbereich - $HOME\Documents\PowerShell\Modules
    • Mit PowerShell ausgelieferte Module – $PSHOME\Modules
  • Unter Linux und macOS
    • Bereich "Alle Benutzer" – /usr/local/share/powershell/Modules
    • Aktueller Benutzerbereich - $HOME/.local/share/powershell/Modules
    • Mit PowerShell ausgelieferte Module – $PSHOME/Modules

Standardmäßig ist der Modules Ordner für den aktuellen Benutzer nicht vorhanden. Wenn Sie ein Modul im CurrentUser Bereich mit oder Install-PSResourceinstalliert Install-Module haben, erstellen diese Cmdlets den Modules Ordner für den aktuellen Benutzer. Wenn der Ordner nicht vorhanden ist, können Sie ihn manuell erstellen.

Verwenden Sie den folgenden Befehl, um einen Modules Ordner für den aktuellen Benutzer zu erstellen:

$folder = New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules

Diese Speicherorte werden automatisch in die $env:PSModulePath Umgebungsvariable eingeschlossen. Weitere Informationen zu den Standardmodulspeicherorten finden Sie unter about_PSModulePath.

Automatisches Laden des Moduls

Wenn Sie einen Befehl zum ersten Mal aus einem installierten Modul ausführen, importiert PowerShell dieses Modul automatisch (lädt) dieses Modul. Das Modul muss an den in der $env:PSModulePath Umgebungsvariablen angegebenen Speicherorten gespeichert werden.

Das automatische Laden von Modulen ermöglicht ihnen die Verwendung von Befehlen in einem Modul ohne Setup- oder Profilkonfiguration. Jedes der folgenden Beispiele bewirkt, dass das CimCmdlets-Modul , das enthält Get-CimInstance, in Ihre Sitzung importiert wird.

  • Ausführen des Befehls

    Get-CimInstance Win32_OperatingSystem
    
  • Abrufen des Befehls

    Get-Command Get-CimInstance
    
  • Hilfe für den Befehl abrufen

    Get-Help Get-CimInstance
    

Wenn Sie mit einem Platzhalterzeichen (*) verwendenGet-Command, importiert PowerShell keine Module. Sie können Wildcards für die Befehlsermittlung verwenden, ohne Module zu laden, die Sie in Ihrer Sitzung möglicherweise nicht benötigen.

Manuelles Importieren eines Moduls

Das manuelle Importieren eines Moduls ist erforderlich, wenn ein Modul nicht an den von der $env:PSModulePath Umgebungsvariablen angegebenen Speicherorten installiert wird oder wenn das Modul als eigenständige .dll Datei oder .psm1 nicht als paketiertes Modul bereitgestellt wird.

Außerdem importieren Befehle, die PowerShell-Anbieter verwenden, kein Modul automatisch. Wenn Sie beispielsweise einen Befehl verwenden, der das WSMan: Laufwerk erfordert, z. B. das Get-PSSessionConfiguration Cmdlet, müssen Sie möglicherweise das Import-Module Cmdlet ausführen, um das Microsoft.WSMan.Management-Modul zu importieren, das das WSMan: Laufwerk enthält.

Möglicherweise möchten Sie auch ändern, wie das Modul in Ihrer Sitzung importiert wird. Beispielsweise fügt der Präfixparameter Import-Module dem Substantivteil der aus dem Modul importierten Cmdlets ein unverwechselbares Präfix hinzu. Der Parameter NoClobber verhindert, dass das Modul Befehle hinzufügt, die vorhandene Befehle in der Sitzung ausblenden oder ersetzen. Weitere Informationen finden Sie unter Verwalten von Namenskonflikten.

Im folgenden Beispiel wird das BitsTransfer-Modul in die aktuelle Sitzung importiert.

Import-Module BitsTransfer

Verwenden Sie den vollqualifizierten Pfad zum Modulordner, um ein Modul zu importieren, das sich nicht in Ihrem $env:PSModulePathModul befindet. Geben Sie beispielsweise Folgendes ein, um das TestCmdlets-Modul im C:\ps-test Verzeichnis zu Ihrer Sitzung hinzuzufügen:

Import-Module C:\ps-test\TestCmdlets

Verwenden Sie den vollqualifizierten Pfad zur Moduldatei im Befehl, um eine Moduldatei zu importieren, die nicht in einem Modulordner enthalten ist. Geben Sie z. B. Folgendes ein, um das modul TestCmdlets.dll im C:\ps-test Verzeichnis zu Ihrer Sitzung hinzuzufügen:

Import-Module C:\ps-test\TestCmdlets.dll

Weitere Informationen zum Hinzufügen von Modulen zu Ihrer Sitzung finden Sie unter Import-Module.

Importieren eines Moduls am Anfang jeder Sitzung

Der Import-Module Befehl importiert Module in Ihre aktuelle PowerShell-Sitzung. Um ein Modul in jede von Ihnen gestartete PowerShell-Sitzung zu importieren, fügen Sie den Import-Module Befehl zu Ihrem PowerShell-Profil hinzu.

Weitere Informationen zu Profilen finden Sie unter about_Profiles.

Installieren eines veröffentlichten Moduls

Ein veröffentlichtes Modul ist ein Modul, das aus einem registrierten Repository wie dem PowerShell-Katalog verfügbar ist. Die PowerShellGet - und Microsoft.PowerShell.PSResourceGet-Module bieten Cmdlets zum Suchen, Installieren und Veröffentlichen von PowerShell-Modulen in einem registrierten Repository.

Das PowerShellGet-Modul ist in PowerShell 5.0 und höheren Versionen enthalten. Das Microsoft.PowerShell.PSResourceGet-Modul ist in PowerShell 7.4 und höher enthalten und ist der bevorzugte Paket-Manager für PowerShell. Microsoft.PowerShell.PSResourceGet kann parallel mit PowerShellGet in älteren Versionen von PowerShell installiert werden. Verwenden Sie das Install-Module Cmdlet, Install-PSResource um Module aus dem PowerShell-Katalog zu installieren.

 Get-Command Install-Module, Install-PSResource
CommandType  Name                Version    Source
-----------  ----                -------    ------
Function     Install-Module      2.9.0      PowerShellGet
Cmdlet       Install-PSResource  1.0.0      Microsoft.PowerShell.PSResourceGet

Weitere Informationen finden Sie unter PowerShellGet Overview.

Manuelles Installieren eines Moduls

Sie können ein Modul manuell installieren, indem Sie den Modulinhalt aus einem anderen Ordner kopieren. Dieser Ordner kann sich an einem anderen Speicherort auf dem lokalen Computer befinden oder auf einem anderen Computer installiert sein. Um ein Modul manuell zu installieren, kopieren Sie den gesamten Modulordner an einen neuen Speicherort, der in Ihrem $env:PSModulePathModul enthalten ist.

Verwenden Sie in PowerShell das Copy-Item Cmdlet. Führen Sie beispielsweise den folgenden Befehl aus, um den MyModule Ordner aus C:\PSTestzu kopieren:

$modulePath = $HOME\Documents\PowerShell\Modules\MyModule
Copy-Item -Path C:\PSTest\MyModule\* -Destination $modulePath -Recurse

Sie können ein Modul an einem beliebigen Speicherort installieren, aber wenn Sie Ihre Module an einem Standardspeicherort installieren, sind sie leichter zu verwalten.

Suchen von installierten Modulen

Das Get-Module Cmdlet ruft die PowerShell-Module ab, die in der aktuellen PowerShell-Sitzung geladen werden.

Get-Module

Die aufgeführten Module können Module enthalten, die von einem beliebigen Speicherort importiert wurden, nicht nur aus $env:PSModulePath.

Verwenden Sie den folgenden Befehl, um Module auflisten, die in der $env:PSModulePathDatei installiert sind:

Get-Module -ListAvailable

Dieser Befehl ruft alle Module ab, die in $env:PSModulePathder aktuellen Sitzung installiert sind, nicht nur die Module, die in die aktuelle Sitzung importiert werden. Dieser Befehl listet keine Module auf, die an anderen Speicherorten installiert sind.

Weitere Informationen finden Sie unter Get-Module.

Auflisten der Befehle in einem Modul

Verwenden Sie das Get-Command Cmdlet, um alle verfügbaren Befehle zu finden. Sie können die Parameter des Get-Command Cmdlets verwenden, um Befehle wie Modul, Name und Substantiv zu filtern.

Um alle Befehle in einem Modul zu finden, geben Sie Folgendes ein:

Get-Command -Module <module-name>

Um beispielsweise die Befehle im BitsTransfer-Modul zu finden, geben Sie Folgendes ein:

Get-Command -Module BitsTransfer

Weitere Informationen zum Get-Command Cmdlet finden Sie unter "Get-Command".

Ein Modul entfernen

Wenn Sie ein Modul entfernen, werden die vom Modul hinzugefügten Befehle aus der Sitzung gelöscht. Mit dem folgenden Befehl wird beispielsweise das BitsTransfer-Modul aus der aktuellen Sitzung entfernt.

Remove-Module BitsTransfer

Entfernen einrd Moduld kehrt den Vorgang des Modulimports um. Durch das Entfernen eines Moduls wird das Modul nicht deinstalliert. Weitere Informationen finden Sie unter Remove-Module.

Befehle können Ihrer Sitzung aus Modulen und Snap-Ins hinzugefügt werden. Module können alle Arten von Befehlen hinzufügen, einschließlich Cmdlets, Anbieter und Funktionen sowie Elemente, z. B. Variablen, Aliase und PowerShell-Laufwerke. Snap-Ins können nur Cmdlets und Anbieter hinzufügen.

Verwenden Sie vor dem Entfernen eines Moduls aus Ihrer Sitzung die folgenden Befehle, um zu bestimmen, welches Modul Sie entfernen möchten.

Verwenden Sie beispielsweise den folgenden Befehl, um die Quelle der Get-Date Und Get-Help Cmdlets zu finden:

Get-Command Get-Date, Get-Help -All |
    Select-Object -Property Name, CommandType, Module ,PSSnapIn

Die folgende Ausgabe zeigt, dass sich das Get-Help Cmdlet im Microsoft.PowerShell.Core-Snap-In befindet. Dieses Snap-In kann nicht aus der Sitzung entfernt werden.

Name     CommandType Module                       PSSnapIn
----     ----------- ------                       --------
Get-Date    Function
Get-Date      Cmdlet Microsoft.PowerShell.Utility
Get-Help      Cmdlet                              Microsoft.PowerShell.Core

Es gibt zwei Quellen für Get-Date. Eine ist eine Funktion und das andere ist ein Cmdlet im Modul "Microsoft.PowerShell.Utility ". Sie können das Modul mithilfe von Remove-Module. Um die Funktion zu entfernen, können Sie sie vom Function: Laufwerk löschen.

Remove-Item Function:Get-Date

Weitere Informationen zum Function: Laufwerk finden Sie unter about_Function_Provider.

Verwalten von Namenskonflikten

Namenskonflikte treten auf, wenn mehrere Befehle in der Sitzung denselben Namen haben. Das Importieren eines Moduls bewirkt einen Namenskonflikt, wenn Befehle im Modul die gleichen Namen wie die Befehle oder Elemente in der Sitzung haben.

Import-Module möglicherweise Befehle hinzufügen, die Befehle in der aktuellen Sitzung ausblenden und ersetzen. Namenskonflikte können dazu führen, dass Befehle ausgeblendet oder ersetzt werden. Befehlsersetzung tritt auf, wenn das importierte Modul einen Befehl mit demselben Namen wie ein vorhandener Befehl in der Sitzung enthält. Der neu importierte Befehl hat Vorrang vor dem vorhandenen Befehl.

Wenn eine Sitzung beispielsweise eine Funktion und ein Cmdlet mit demselben Namen enthält, führt PowerShell die Funktion standardmäßig aus. Wenn die Sitzung Befehle vom gleichen Typ mit dem gleichen Namen, z. B. zwei Cmdlets mit demselben Namen enthält, wird standardmäßig der zuletzt hinzugefügte Befehl ausgeführt.

Weitere Informationen, einschließlich einer Erläuterung der Rangfolgeregeln und Anweisungen zum Ausführen ausgeblendeter Befehle, finden Sie unter about_Command_Precedence.

Sie können einen ausgeblendeten oder ersetzten Befehl ausführen, indem Sie den Befehlsnamen qualifizieren. Um den Befehlsnamen zu qualifizieren, fügen Sie den Namen des Moduls hinzu, das die gewünschte Version des Befehls enthält. Zum Beispiel:

Microsoft.PowerShell.Utility\Get-Date

Beim Ausführen Get-Date mit dem Modulnamenpräfix wird sichergestellt, dass die Version aus dem Modul "Microsoft.PowerShell.Utility " ausgeführt wird.

Verwenden Sie zum Erkennen von Namenskonflikten den Parameter "All " des Get-Command Cmdlets. Ruft standardmäßig nur die Befehle ab, die ausgeführt werden, Get-Command wenn Sie den Befehlsnamen eingeben. Der Parameter "All " ruft alle Befehle mit dem spezifischen Namen in der Sitzung ab.

Verwenden Sie zum Verhindern von Namenskonflikten die Parameter NoClobber oder Prefix des Import-Module Cmdlets. Der Parameter "Prefix " fügt den Namen importierter Befehle ein Präfix hinzu, sodass sie in der Sitzung eindeutig sind. Der Parameter NoClobber importiert keine Befehle, die vorhandene Befehle in der Sitzung ausblenden oder ersetzen.

Sie können auch die Parameter "Alias", "Cmdlet", "Function" und "Variable" verwenden, um nur die Befehle auszuwählen, die Sie importieren möchten, und Sie können Befehle ausschließen, die Namenkonflikte in Import-Module Ihrer Sitzung verursachen.

Modulautoren können Namenskonflikte verhindern, indem sie die DefaultCommandPrefix-Eigenschaft des Modulmanifests verwenden, um allen Befehlsnamen ein Standardpräfix hinzuzufügen. Der Wert des Präfixparameters hat Vorrang vor dem Wert von DefaultCommandPrefix.

Siehe auch