about_Modules

Kurze Beschreibung

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

Lange Beschreibung

PowerShell ist eine Skriptsprache und eine Befehlsshell. Die Sprache besteht aus Schlüsselwort (keyword), die die Struktur und Logik der Verarbeitung und Befehle bereitstellen, die die Arbeit ausführen. Befehle in PowerShell werden als Skripts, Funktionen oder Cmdlets implementiert.

Ein Modul ist eine eigenständige wiederverwendbare Einheit, die Cmdlets, Anbieter, Funktionen, Variablen und andere Arten von Ressourcen enthalten kann, die als einzelne Einheit importiert werden können.

PowerShell verfügt über einen Basissatz von Modulen. Sie können auch bei Bedarf weitere Module installieren. Standardmäßig werden installierte Module automatisch geladen, wenn Sie einen Befehl aus einem Modul verwenden. Verwenden Sie die $PSModuleAutoloadingPreference Variable, um das automatische Laden von Modulen zu aktivieren, zu deaktivieren und zu konfigurieren. Weitere Informationen finden Sie unter about_Preference_Variables.

Sie können während einer Sitzung entladen oder neu laden. Verwenden Sie das Remove-Module Cmdlet, um ein Modul aus Ihrer Sitzung zu entladen. Verwenden Sie das Import-Module Cmdlet, um ein Modul zu laden.

Module können als kompilierte .NET-Assemblys erstellt werden, die in C# geschrieben wurden, oder skriptbasierte Module, die in PowerShell geschrieben wurden. In diesem Thema wird erläutert, wie PowerShell-Module verwendet werden. Informationen zum Schreiben 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 neu Standard in PowerShell. Alle anderen Snap-Ins wurden in Module konvertiert. Das Erstellen neuer Snap-Ins wird nicht mehr unterstützt.

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. Microsoft.PowerShell.PSResourceGet ist der neue bevorzugte Paket-Manager für PowerShell und kann in früheren 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

Wenn Sie ein Modul als Ordner mit darin enthaltenen Dateien erhalten, müssen Sie es auf Ihrem Computer installieren, bevor Sie es in PowerShell verwenden können.

PowerShell verfügt über mehrere vorinstallierte Module. Auf Windows-basierten Computern enthalten viele Windows-Features Module zum Verwalten des Features. Diese Module werden installiert, wenn das Feature installiert wird. Andere Module können in einem Installationsprogramm oder Setupprogramm enthalten sein, das das Modul installiert.

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

Kopieren Sie den gesamten Modulordner in den neuen erstellten Ordner. Verwenden Sie in PowerShell das Copy-Item Cmdlet. Führen Sie beispielsweise den folgenden Befehl aus, um den MyModule Ordner aus C:\PSTest dem soeben erstellten Ordner zu kopieren:

Copy-Item -Path C:\PSTest\MyModule -Destination $folder

Sie können ein Modul an einem beliebigen Speicherort installieren, aber wenn Sie Ihre Module an einem Standardspeicherort installieren, sind sie leichter zu verwalten. 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. Module an anderen Speicherorten müssen mithilfe des Import-Module Cmdlets importiert werden.

Das automatische Laden von Modulen ermöglicht ihnen die Verwendung von Befehlen in einem Modul ohne Setup- oder Profilkonfiguration. Es ist nicht erforderlich, Module zu verwalten, nachdem Sie sie auf Ihrem Computer installiert haben.

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
    

Sie können die Get-Command Cmdlet-Liste der Befehle in allen installierten Modulen verwenden, auch wenn sie sich noch nicht in der Sitzung befinden. Wenn Sie mit einem Platz Karte Zeichen (*) verwendenGet-Command, importiert PowerShell keine Module. Sie können wild Karte s für die Befehlsermittlung verwenden, ohne Module zu laden, die Sie in Ihrer Sitzung möglicherweise nicht benötigen.

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.

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.

Möglicherweise möchten Sie auch ändern, wie das Modul in Ihrer Sitzung importiert wird. Beispielsweise fügt der PräfixparameterImport-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.

Sie können ein Modul importieren, das in Ihrem $env:PSModulePath Modul installiert ist, indem Sie den Modulnamen angeben. Mit dem folgenden Befehl wird beispielsweise 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.

Suchen von installierten Modulen

Das Get-Module Cmdlet ruft die PowerShell-Module ab, die in Ihrer Sitzung importiert wurden.

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 ersetzt 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 Befehl ausführen, der ausgeblendet wurde oder durch das Qualifizieren des Befehlsnamens ersetzt wurde. Um den Befehlsnamen zu qualifizieren, fügen Sie den Namen des Moduls hinzu, als 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.

Weitere Informationen