Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Kurzbeschreibung
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, und 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 geliefert. Sie können bei Bedarf auch weitere Module installieren. Standardmäßig werden installierte Module automatisch geladen, wenn Sie zum ersten Mal einen Befehl von 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 der Sitzung zu entladen. Verwenden Sie das Cmdlet Import-Module , um ein Modul zu laden.
Module können als kompilierte .NET-Assemblys erstellt werden, die in C# geschrieben sind, 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 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.
Installieren eines veröffentlichten Moduls
Ein veröffentlichtes Modul ist ein Modul, das über ein registriertes Repository verfügbar ist, z. B. den PowerShell-Katalog. 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ö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 Cmdlet Install-Module oder 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 Dateien erhalten, müssen Sie es auf Ihrem Computer installieren, bevor Sie es in PowerShell verwenden können.
PowerShell wird mit mehreren vorinstallierten Modulen geliefert. Auf Windows-basierten Computern enthalten viele Windows-Features Module zum Verwalten der Funktion. Diese Module werden installiert, wenn die Funktion installiert wird. Andere Module können in einem Installationsprogramm oder Setup-Programm enthalten sein, das das Modul installiert.
Standardmäßig ist der ordner Modules 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 ordner Modules 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 Cmdlet Copy-Item. Führen Sie z. B. den folgenden Befehl aus, um den MyModule Ordner in C:\PSTest den Ordner zu kopieren, den Sie gerade erstellt haben:
Copy-Item -Path C:\PSTest\MyModule -Destination $folder
Sie können ein Modul an einem beliebigen Ort installieren, aber das Installieren Ihrer Module an einem Standardmodulspeicherort erleichtert die Verwaltung. 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 speicherorten gespeichert werden, die in der umgebungsvariablen $env:PSModulePath angegeben sind. Module an anderen Speicherorten müssen mit dem Import-Module Cmdlet 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 die Sitzung importiert wird.
Ausführen des Befehls
Get-CimInstance Win32_OperatingSystemBefehl abrufen
Get-Command Get-CimInstanceHilfe für den Befehl abrufen
Get-Help Get-CimInstance
Sie können das Get-Command Cmdlet verwenden, um die Befehle in allen installierten Modulen aufzulisten, auch wenn sie sich noch nicht in der Sitzung befinden. Wenn Sie Get-Command mit einem Platzhalterzeichen (*) verwenden, importiert PowerShell keine Module. Sie können Platzhalter 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 cmdlet Get-PSSessionConfiguration, müssen Sie möglicherweise das cmdlet Import-Module 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 speicherorten installiert wird, die durch die umgebungsvariable $env:PSModulePath angegeben werden, oder wenn das Modul als eigenständige .dll- oder .psm1 datei anstelle eines verpackten Moduls bereitgestellt wird.
Möglicherweise möchten Sie auch ändern, wie das Modul in Ihrer Sitzung importiert wird. Beispielsweise fügt der parameter Prefix von Import-Module dem Substantivteil der cmdlets, die aus dem Modul importiert wurden, ein unverwechselbares Präfix hinzu. Der NoClobber Parameter 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 installiert ist, indem Sie den Modulnamen angeben. Mit dem folgenden Befehl wird z. B. 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:PSModulePathbefindet. Um z. B. das TestCmdlets Modul im Verzeichnis C:\ps-test zu Ihrer Sitzung hinzuzufügen, geben Sie Folgendes ein:
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 beispielsweise Folgendes ein, um das TestCmdlets.dll Modul im verzeichnis C:\ps-test 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 befehl Import-Module importiert Module in Ihre aktuelle PowerShell-Sitzung. Um ein Modul in jede von Ihnen gestartete PowerShell-Sitzung zu importieren, fügen Sie ihrem PowerShell-Profil den Befehl Import-Module 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:PSModulePathinstalliert sind:
Get-Module -ListAvailable
Dieser Befehl ruft alle Module ab, 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 Cmdlet Get-Command, um alle verfügbaren Befehle zu finden. Sie können die Parameter des Cmdlets Get-Command 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 cmdlet Get-Command finden Sie unter Get-Command.
Entfernen eines Moduls
Wenn Sie ein Modul entfernen, werden die 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
Durch das Entfernen eines Moduls wird der Vorgang des Importierens eines Moduls rückgängig gemacht. 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 die andere ist ein Cmdlet im Microsoft.PowerShell.Utility Modul. Sie können das Modul mit Remove-Moduleentfernen. Um die Funktion zu entfernen, können Sie sie aus dem laufwerk Function: 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. Beim Importieren eines Moduls tritt ein Namenskonflikt auf, wenn Befehle im Modul dieselben Namen wie Befehle oder Elemente in der Sitzung haben.
Import-Module kann Befehle hinzufügen, die in der aktuellen Sitzung andere Befehle 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 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 desselben Typs mit demselben Namen enthält, z. B. zwei Cmdlets mit demselben Namen, 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, das die gewünschte Version des Befehls enthält. Beispiel:
Microsoft.PowerShell.Utility\Get-Date
Wenn Sie Get-Date mit dem Modulnamenpräfix ausführen, wird sichergestellt, dass die Version aus dem Microsoft.PowerShell.Utility Modul ausgeführt wird.
Verwenden Sie zum Erkennen von Namenskonflikten den Parameter All des Cmdlets Get-Command. Standardmäßig ruft Get-Command nur die Befehle ab, die ausgeführt werden, wenn Sie den Befehlsnamen eingeben. Der All-Parameter ruft alle Befehle mit dem angegebenen Namen in der Sitzung ab.
Um Namenskonflikte zu verhindern, verwenden Sie die Parameter NoClobber- oder Präfix- des Cmdlets Import-Module. Der parameter Prefix fügt den Namen importierter Befehle ein Präfix hinzu, sodass sie in der Sitzung eindeutig sind. Der NoClobber Parameter importiert keine Befehle, die vorhandene Befehle in der Sitzung ausblenden oder ersetzen.
Sie können auch die Parameter Alias, Cmdlet, Functionund Variable Parameter von Import-Module verwenden, um nur die Befehle auszuwählen, die Sie importieren möchten, und Sie können Befehle ausschließen, die Namenskonflikte in 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 parameters Prefix hat Vorrang vor dem Wert von DefaultCommandPrefix.