Freigeben über


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üsselwörtern, die die Struktur und Logik der Verarbeitung bereitstellen, sowie aus Befehlen, 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 wird mit einem Basissatz von Modulen bereitgestellt. Sie können bei Bedarf auch weitere Module installieren. Standardmäßig werden installierte Module automatisch geladen, wenn Sie zum ersten Mal einen Befehl aus einem Modul verwenden. Verwenden Sie die Variable, um das $PSModuleAutoloadingPreference 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 als skriptbasierte Module, die in PowerShell geschrieben wurden. In diesem Thema wird die Verwendung von PowerShell-Modulen erläutert. 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 gepackt. 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. Die Erstellung neuer Snap-Ins wird nicht mehr unterstützt.

Installieren eines veröffentlichten Moduls

Ein veröffentlichtes Modul ist ein Modul, das über ein registriertes Repository verfügbar ist, z. B. das PowerShell-Katalog. Die Module PowerShellGet und Microsoft.PowerShell.PSResourceGet stellen Cmdlets zum Suchen, Installieren und Veröffentlichen von PowerShell-Modulen in einem registrierten Repository bereit.

Das PowerShellGet-Modul ist in PowerShell 5.0 und höheren Versionen enthalten. Das Modul Microsoft.PowerShell.PSResourceGet ist in PowerShell 7.4 und höheren Versionen 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 oderInstall-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 Übersicht über PowerShellGet.

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 enthält 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 Install-Module oder Install-PSResourceinstalliert 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 neu erstellten Ordner. Verwenden Sie in PowerShell das Copy-Item Cmdlet. Führen Sie beispielsweise den folgenden Befehl aus, um den Ordner in C:\PSTest den MyModule 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 Standardspeicherorten des Moduls finden Sie unter about_PSModulePath.

Automatisches Laden von Modulen

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

Durch automatisches Laden von Modulen können Sie Befehle in einem Modul ohne Setup- oder Profilkonfiguration verwenden. 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

    Get-Help Get-CimInstance
    

Sie können das Get-Command Cmdlet verwenden, um die Befehle in allen installierten Modulen aufzulisten, auch wenn sie noch nicht in der Sitzung enthalten sind. Wenn Sie mit einem Platzhalterzeichen (*) verwendenGet-Command, importiert PowerShell keine Module. Sie können Für die Befehlsermittlung Ohne das Laden von Modulen, die Sie in Ihrer Sitzung möglicherweise nicht benötigen, Wildcards verwenden.

Außerdem importieren Befehle, die PowerShell-Anbieter verwenden, nicht automatisch ein Modul. 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ändiges .dll Modul oder .psm1 als Datei anstelle eines gepackten Moduls bereitgestellt wird.

Möglicherweise möchten Sie auch ändern, wie das Modul in Ihrer Sitzung importiert wird. Der Parameter Prefix von Import-Module fügt beispielsweise dem Nomenteil 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 installiert ist, indem Sie $env:PSModulePath den Modulnamen angeben. Der folgende Befehl importiert beispielsweise das Modul BitsTransfer in die aktuelle Sitzung.

Import-Module BitsTransfer

Um ein Modul zu importieren, das sich nicht in Ihrem befindet, verwenden Sie $env:PSModulePathden vollqualifizierten Pfad zum Modulordner. Wenn Sie z. B. das Modul TestCmdlets im C:\ps-test Verzeichnis zu Ihrer Sitzung hinzufügen möchten, geben Sie Folgendes ein:

Import-Module C:\ps-test\TestCmdlets

Um eine Moduldatei zu importieren, die nicht in einem Modulordner enthalten ist, verwenden Sie den vollqualifizierten Pfad zur Moduldatei im Befehl. Wenn Sie z. B. das TestCmdlets.dll-Modul im C:\ps-test Verzeichnis zu Ihrer Sitzung hinzufügen möchten, geben Sie Folgendes ein:

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 zu Beginn 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 ihrem PowerShell-Profil hinzu.

Weitere Informationen zu Profilen finden Sie unter about_Profiles.

Suchen nach installierten Modulen

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

Get-Module

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

Verwenden Sie den folgenden Befehl, um Module aufzulisten, die $env:PSModulePathin installiert sind:

Get-Module -ListAvailable

Mit diesem Befehl werden alle Module abgerufen, die in $env:PSModulePathinstalliert 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 nach allen verfügbaren Befehlen zu suchen. Sie können die Parameter des Get-Command Cmdlets verwenden, um Befehle zu filtern, z. B. nach Modul, Name und Substantiv.

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

Get-Command -Module <module-name>

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

Get-Command -Module BitsTransfer

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

Entfernen eines Moduls

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

Remove-Module BitsTransfer

Entfernen einrd Moduld kehrt den Vorgang des Modulimports um. Wenn Sie ein Modul entfernen, 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 wie Variablen, Aliase und PowerShell-Laufwerke. Snap-Ins können nur Cmdlets und Anbieter hinzufügen.

Bevor Sie ein Modul aus Ihrer Sitzung entfernen, verwenden Sie die folgenden Befehle, um zu bestimmen, welches Modul Sie entfernen möchten.

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

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, die andere ein Cmdlet im Modul Microsoft.PowerShell.Utility . Sie können das Modul mit Remove-Moduleentfernen. 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 kann Befehle hinzufügen, die Befehle in der aktuellen Sitzung ausblenden und ersetzen. Namenskonflikte können dazu führen, dass Befehle ausgeblendet oder ersetzt werden. Die 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 replaces 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 Befehl ausführen, der ausgeblendet oder ersetzt wurde, indem Sie den Befehlsnamen qualifizieren. Um den Befehlsnamen zu qualifizieren, fügen Sie den Namen des Moduls hinzu, der die version des gewünschten Befehls enthält. Beispiel:

Microsoft.PowerShell.Utility\Get-Date

Wenn Sie mit dem Modulnamenpräfix ausführen Get-Date , 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.

Um Namenskonflikte zu vermeiden, verwenden Sie die Parameter NoClobber oder Prefix des Import-Module Cmdlets. Der Parameter Prefix fügt den Namen importierter Befehle ein Präfix hinzu, damit sie in der Sitzung eindeutig sind. Der NoClobber-Parameter importiert keine Befehle, die vorhandene Befehle in der Sitzung ausblenden oder ersetzen würden.

Sie können auch die Parameter Alias, Cmdlet, Function und Variable von Import-Module verwenden, um nur die Befehle auszuwählen, die Sie importieren möchten, und Sie können Befehle ausschließen, die zu Namenskonflikten in Ihrer Sitzung führen.

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

Weitere Informationen