about_Modules
Kurze Beschreibung
Erläutert, wie Sie PowerShell-Module installieren, importieren und verwenden.
Lange Beschreibung
Ein Modul ist ein Paket, das PowerShell-Elemente enthält, z. B. Cmdlets, Anbieter, Funktionen, Workflows, Variablen und Aliase.
Personen, die Befehle schreiben, können Module verwenden, um ihre Befehle zu organisieren und für andere Benutzer freizugeben. Personen, die Module erhalten, können die Befehle in den Modulen zu ihren PowerShell-Sitzungen hinzufügen und sie genauso wie die integrierten Befehle verwenden.
In diesem Thema wird erläutert, wie Sie PowerShell-Module verwenden. Informationen zum Schreiben von PowerShell-Modulen finden Sie unter Schreiben eines PowerShell-Moduls.
Was ist ein Modul?
Ein Modul ist ein Paket, das PowerShell-Elemente enthält, z. B. Cmdlets, Anbieter, Funktionen, Workflows, Variablen und Aliase. Die Mitglieder dieses Pakets können in einem PowerShell-Skript, einer kompilierten DLL oder einer Kombination aus beiden implementiert werden. Diese Dateien werden in der Regel in einem einzelnen Verzeichnis gruppiert. Weitere Informationen finden Sie unter Grundlegendes zu einem Windows PowerShell Modul in der SDK-Dokumentation.
Automatisches Laden von Modulen
Ab PowerShell 3.0 importiert PowerShell Module automatisch zum ersten Mal, wenn Sie einen beliebigen Befehl in einem installierten Modul ausführen. Sie können jetzt die Befehle in einem Modul ohne weitere Einrichtung oder Profilkonfiguration verwenden, daher besteht keine Notwendigkeit, Module nach der Installation auf Ihrem Computer zu verwalten.
Die Befehle in einem Modul sind auch leichter zu finden. Das Get-Command
Cmdlet ruft jetzt alle Befehle in allen installierten Modulen ab, auch wenn sie noch nicht in der Sitzung sind. Sie können einen Befehl finden und verwenden, ohne das Modul zuerst zu importieren.
Jedes der folgenden Beispiele führt dazu, dass das CimCmdlets-Modul, das enthält Get-CimInstance
, in Ihre Sitzung importiert werden soll.
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
Get-Command
Befehle, die ein Wildcardzeichen (*
) enthalten, werden als Ermittlung betrachtet, nicht verwendet und keine Module importiert.
Nur Module, die an dem speicherort gespeichert werden, der von der PSModulePath-Umgebungsvariable angegeben wird, werden automatisch importiert. Module an anderen Speicherorten müssen importiert werden, indem Sie das Import-Module
Cmdlet ausführen.
Außerdem importieren Befehle, die PowerShell-Anbieter verwenden, nicht automatisch ein Modul. Wenn Sie beispielsweise einen Befehl verwenden, der das WSMan-Laufwerk erfordert, z Get-PSSessionConfiguration
. B. das Cmdlet, müssen Sie möglicherweise das Cmdlet ausführen, um das Import-Module
Microsoft.WSMan.Management-Modul zu importieren, das das WSMan:
Laufwerk enthält.
Sie können den Import-Module
Befehl weiterhin ausführen, um ein Modul zu importieren und die $PSModuleAutoloadingPreference
Variable zum Aktivieren, Deaktivieren und Konfigurieren des automatischen Importierens von Modulen zu verwenden. Weitere Informationen finden Sie unter about_Preference_Variables.
Verwenden eines Moduls
Um ein Modul zu verwenden, führen Sie die folgenden Aufgaben aus:
- Installieren Sie das Modul. (Dies wird häufig für Sie durchgeführt.)
- Suchen Sie die Befehle, die das Modul hinzugefügt hat.
- Verwenden Sie die Befehle, die das Modul hinzugefügt hat.
In diesem Thema wird erläutert, wie Sie diese Aufgaben ausführen. Darüber hinaus gibt es weitere wichtige Informationen zur Verwaltung von Modulen.
So installieren Sie ein Modul
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.
Die meisten Module werden für Sie installiert. PowerShell enthält mehrere vorinstallierte Module, manchmal als Kernmodule bezeichnet. Auf Windows-basierten Computern werden diese Module vorinstalliert, wenn Features, die im Betriebssystem enthalten sind, Über Cmdlets verfügen, um sie zu verwalten. Wenn Sie ein Windows-Feature installieren, z. B. mithilfe des Assistenten zum Hinzufügen von Rollen und Features im Server-Manager oder im Dialogfeld "Windows aktivieren oder deaktivieren" in Systemsteuerung, werden alle PowerShell-Module, die Teil des Features sind, installiert. Viele andere Module sind in einem Installationsprogramm oder Setup-Programm, mit dem das Modul installiert wird.
Verwenden Sie den folgenden Befehl, um ein Module-Verzeichnis für den aktuellen Benutzer zu erstellen:
New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules
Kopieren Sie den gesamten Modulordner in das Verzeichnis „Modules“. Sie können jede Methode verwenden, um den Ordner zu kopieren, einschließlich Windows Explorer und Cmd.exe sowie PowerShell. Verwenden Sie in PowerShell das Copy-Item
Cmdlet. Geben Sie beispielsweise folgendes ein, um den Ordner "MyModule" in C:\ps-test\MyModule
das Verzeichnis "Module" zu kopieren:
Copy-Item -Path C:\ps-test\MyModule -Destination `
$HOME\Documents\PowerShell\Modules
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 im Abschnitt " Modul- und DSC-Ressourcenspeicherorte" und "PSModulePath ".
So finden Sie installierte Module
Geben Sie Folgendes ein, um Module zu suchen, die an einem Modul-Standardspeicherort installiert sind, jedoch noch nicht in die Sitzung importiert wurden:
Get-Module -ListAvailable
Um die Module zu finden, die bereits in Ihre Sitzung importiert wurden, geben Sie in der PowerShell-Eingabeaufforderung Folgendes ein:
Get-Module
Weitere Informationen zum Get-Module
Cmdlet finden Sie unter Get-Module.
So finden Sie die 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 Noun zu filtern.
Um alle Befehle in einem Modul zu suchen, 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.
So erhalten Sie Hilfe für die Befehle in einem Modul
Wenn das Modul Hilfedateien für die Befehle enthält, die sie exportiert, zeigt das Get-Help
Cmdlet die Hilfethemen an. Verwenden Sie das gleiche Get-Help
Befehlsformat, das Sie zum Abrufen von Hilfe für einen beliebigen Befehl in PowerShell verwenden würden.
Ab PowerShell 3.0 können Sie Hilfedateien für ein Modul herunterladen und Updates auf die Hilfedateien herunterladen, sodass sie nie veraltet sind.
Um Hilfe für Befehle in einem Modul zu erhalten, geben Sie Folgendes ein:
Get-Help <command-name>
Um Hilfe online für den Befehl in einem Modul zu erhalten, geben Sie Folgendes ein:
Get-Help <command-name> -Online
Um die Hilfedateien für die Befehle in einem Modul herunterzuladen und zu installieren, geben Sie Folgendes ein:
Update-Help -Module <module-name>
Weitere Informationen finden Sie unter "Get-Help " und " Update-Hilfe".
So importieren Sie ein Modul
Sie müssen möglicherweise ein Modul oder eine Moduldatei importieren. Das Importieren ist erforderlich, wenn ein Modul nicht an den Speicherorten installiert wird, die von der PSModulePath-Umgebungsvariable$env:PSModulePath
angegeben werden, oder das Modul besteht aus Datei, z. B. einer .dll- oder PSM1-Datei, anstelle eines typischen Moduls, das als Ordner bereitgestellt wird.
Sie können auch ein Modul importieren, damit Sie die Parameter des Import-Module
Befehls verwenden können, z. B. den Präfixparameter, der dem Namen aller importierten Befehle oder dem NoClobber-Parameter ein unverwechselbares Präfix hinzufügt, das verhindert, dass das Modul Befehle hinzufügt, die vorhandene Befehle in der Sitzung ausblenden oder ersetzen würden.
Verwenden Sie zum Importieren von Modulen das Import-Module
Cmdlet.
Verwenden Sie das folgende Befehlsformat, um Module an einen PSModulePath-Speicherort in der aktuellen Sitzung zu importieren.
Import-Module <module-name>
Mit dem folgenden Befehl importieren Sie beispielsweise das Modul "BitsTransfer" in die aktuelle Sitzung.
Import-Module BitsTransfer
Verwenden Sie zum Importieren eines Moduls, das sich nicht am Standard-Modulspeicherort befindet, den vollqualifizierten Pfad zum Modulordner im Befehl.
Geben Sie beispielsweise das TestCmdlets-Modul in das C:\ps-test
Verzeichnis zu Ihrer Sitzung ein:
Import-Module C:\ps-test\TestCmdlets
Um eine Moduldatei zu importieren, die nicht in einem Modulordner enthalten ist, verwenden Sie den vollqualifizierten Pfad der Moduldatei im Befehl.
Geben Sie beispielsweise das TestCmdlets.dll Modul im C:\ps-test
Verzeichnis zu Ihrer Sitzung hinzu:
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 in jede Sitzung
Der Import-Module
Befehl importiert Module in Ihre aktuelle PowerShell-Sitzung. Um ein Modul in jede PowerShell-Sitzung zu importieren, die Sie starten, fügen Sie dem PowerShell-Profil den Import-Module
Befehl hinzu.
Weitere Informationen zu Profilen finden Sie unter about_Profiles.
So entfernen Sie ein Modul
Wenn Sie ein Modul entfernen, werden die vom Modul hinzugefügten Befehle aus der Sitzung gelöscht.
Um ein Modul aus Ihrer Sitzung zu entfernen, verwenden Sie das folgende Befehlsformat.
Remove-Module <module-name>
Der folgende Befehl entfernt beispielsweise das BitsTransfer-Modul aus der aktuellen Sitzung.
Remove-Module BitsTransfer
Entfernen einrd Moduld kehrt den Vorgang des Modulimports um. Beim Entfernen eines Moduls wird das Modul nicht deinstalliert. Weitere Informationen finden Sie unter Remove-Module.
Modul- und DSC-Ressourcenspeicherorte und PSModulePath
Die $env:PSModulePath
Umgebungsvariable enthält eine Liste der Ordnerspeicherorte, die nach Modulen und Ressourcen gesucht werden.
Standardmäßig sind die effektiven Speicherorte, die zugewiesen $env:PSModulePath
sind:
Systemweite Standorte:
$PSHOME\Modules
Diese Ordner enthalten Module, die mit Windows und PowerShell ausgeliefert werden.
DSC-Ressourcen, die in PowerShell enthalten sind, werden im
$PSHOME\Modules\PSDesiredStateConfiguration\DSCResources
Ordner gespeichert.Benutzerspezifische Module: Dies sind Module, die vom Benutzer im Bereich des Benutzers installiert werden.
Install-Module
verfügt über einen Bereichsparameter , mit dem Sie angeben können, ob das Modul für den aktuellen Benutzer oder für alle Benutzer installiert ist. Weitere Informationen finden Sie unter Install-Module.Der benutzerspezifische CurrentUser-Speicherort unter Windows ist der
PowerShell\Modules
Ordner im Speicherort "Dokumente " in Ihrem Benutzerprofil. Der spezifische Pfad dieses Speicherorts variiert je nach Windows-Version und unabhängig davon, ob Sie die Ordnerumleitung verwenden. Microsoft OneDrive kann auch den Speicherort Ihres Ordners "Dokumente " ändern.Standardmäßig ist
$HOME\Documents\PowerShell\Modules
diese Position auf Windows 10 und höher. Auf Linux oder Mac ist$HOME/.local/share/powershell/Modules
der CurrentUser-Speicherort .Hinweis
Sie können den Speicherort Ihres Ordners "Dokumente" mithilfe des folgenden Befehls überprüfen:
[Environment]::GetFolderPath('MyDocuments')
Der Speicherort "AllUsers" befindet sich
$env:PROGRAMFILES\PowerShell\Modules
unter Windows. Auf Linux oder Mac werden die Module unter/usr/local/share/powershell/Modules
.
Hinweis
Um Dateien im $env:Windir\System32
Verzeichnis hinzuzufügen oder zu ändern, starten Sie PowerShell mit der Option "Als Administrator ausführen ".
Sie können die Standardmodulspeicherorte ihres Systems ändern, indem Sie den Wert der PSModulePath-Umgebungsvariable ändern. $Env:PSModulePath
Die PSModulePath-Umgebungsvariable wird auf der Pfad-Umgebungsvariable modelliert und weist dasselbe Format auf.
Um die Standardspeicherorte für das Modul anzuzeigen, geben Sie Folgendes ein:
$Env:PSModulePath
Um einen Standardspeicherort für das Modul hinzuzufügen, verwenden Sie das folgende Befehlsformat.
$Env:PSModulePath = $Env:PSModulePath + ";<path>"
Der Semikolon (;
) im Befehl trennt den neuen Pfad vom Pfad, der ihm in der Liste vorangeht.
Um beispielsweise das C:\ps-test\Modules
Verzeichnis hinzuzufügen, geben Sie Folgendes ein:
$Env:PSModulePath + ";C:\ps-test\Modules"
Verwenden Sie zum Hinzufügen eines Standardmodulspeicherorts unter Linux oder MacOS das folgende Befehlsformat:
$Env:PSModulePath += ":<path>"
Um beispielsweise das /usr/local/Fabrikam/Modules
Verzeichnis zum Wert der PSModulePath-Umgebungsvariable hinzuzufügen, geben Sie Folgendes ein:
$Env:PSModulePath += ":/usr/local/Fabrikam/Modules"
Unter Linux oder MacOS trennt der Doppelpunkt (:
) im Befehl den neuen Pfad vom Pfad, der in der Liste vorangeht.
Wenn Sie einen Pfad zu PSModulePath hinzufügen, Get-Module
und Import-Module
Befehle enthalten Module in diesem Pfad.
Der festgelegte Wert wirkt sich nur auf die aktuelle Sitzung aus. Um die Änderung dauerhaft zu machen, fügen Sie den Befehl zu Ihrem PowerShell-Profil hinzu, oder verwenden Sie System in Systemsteuerung, um den Wert der PSModulePath-Umgebungsvariable in der Registrierung zu ändern.
Um die Änderung dauerhaft vorzunehmen, können Sie auch die SetEnvironmentVariable-Methode der System.Environment-Klasse verwenden, um der PSModulePath-Umgebungsvariable einen Pfad hinzuzufügen.
Weitere Informationen zur PSModulePath-Variablen finden Sie unter about_Environment_Variables.
Module und Namekonflikte
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.
Namenskonflikte können dazu führen, dass Befehle ausgeblendet oder ersetzt werden.
Ausgeblendet
Ein Befehl ist ausgeblendet, wenn er nicht ausgeführt wird, wenn Sie den Befehl eingeben, Sie ihn jedoch mithilfe einer anderen Methode ausführen können, wie z. B. den Befehlsnamen mit dem Namen des Moduls oder Snap-Ins zu qualifizieren, aus dem sie stammen.
Ersetzt
Ein Befehl wurde ersetzt, wenn Sie ihn nicht ausführen können, weil er durch einen Befehl mit demselben Namen überschrieben wurde. Selbst wenn Sie das Modul entfernen, das den Konflikt verursacht hat, kann ein ersetzter Befehl nicht ausgeführt werden, sofern Sie die Sitzung nicht neu starten.
Import-Module
Fügen Sie möglicherweise Befehle hinzu, die Befehle in der aktuellen Sitzung ausblenden und ersetzen. Darüber hinaus können Befehle in der Sitzung Befehle ausblenden, die das Modul hinzugefügt hat.
Verwenden Sie zum Erkennen von Namenskonflikten den Parameter "All " des Get-Command
Cmdlets. Ab PowerShell 3.0 ruft nur diese 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 verhindern, verwenden Sie die Parameter NoClobber oder Präfix des Import-Module
Cmdlets. Der Präfixparameter fügt dem Namen importierter Befehle ein Präfix hinzu, damit sie in der Sitzung eindeutig sind. Der Parameter NoClobber importiert keine Befehle, die vorhandene Befehle in der Sitzung ausblenden oder ersetzen würden.
Sie können auch die ParameterImport-Module
Alias, Cmdlet, Funktion und Variable 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 Präfixparameters hat Vorrang vor dem Wert von DefaultCommandPrefix.
Selbst wenn ein Befehl ausgeblendet ist, können Sie ihn durch die Qualifizierung des Befehlsnamens mit dem Namen des Moduls oder des ursprüunglichen Snap-Ins ausführen.
Die PowerShell-Befehlsfolgeregeln bestimmen, welche Befehle ausgeführt werden, wenn die Sitzung Befehle mit demselben Namen enthält.
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.
Module und Snap-Ins
Sie können Ihrer Sitzung Befehle aus Modulen und Snap-Ins hinzufügen. 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.
Vor dem Entfernen eines Moduls oder Snap-Ins aus der Sitzung verwenden Sie die folgenden Befehle, um zu bestimmen, welche Befehle entfernt werden.
Verwenden Sie das folgende Befehlsformat, um die Quelle eines Cmdlets in Ihrer Sitzung zu finden:
Get-Command <cmdlet-name> | Format-List -Property verb,noun,pssnapin,module
Um beispielsweise die Quelle des Get-Date
Cmdlets zu finden, geben Sie Folgendes ein:
Get-Command Get-Date | Format-List -Property verb,noun,module
Modulbezogene Warnungen und Fehler
Die Befehle, die ein Modul exportiert, sollten den Benennungsregeln für PowerShell-Befehle entsprechen. Wenn das Modul, das Sie importieren, Cmdlets oder Funktionen exportiert, die nicht genehmigte Verben in ihren Namen enthalten, zeigt das Import-Module
Cmdlet die folgende Warnmeldung an.
WARNUNG: Einige importierte Befehlsnamen enthalten nicht genehmigte Verben, die sie möglicherweise weniger auffindbar machen. Verwenden Sie den Verbose-Parameter für weitere Details, oder geben Sie „Get-Verb“ ein, um die Liste der zulässigen Verben anzuzeigen.
Diese Meldung ist nur eine Warnung. Es wird trotzdem das gesamte Modul einschließlich nicht konformer Befehle importiert. Obwohl die Meldung für Modulbenutzer angezeigt wird, sollte das Namensproblem vom Modulautor behoben werden.
Verwenden Sie zum Unterdrücken der Warnmeldung den Parameter DisableNameChecking des Import-Module
Cmdlets.
Integrierte Module und Snap-Ins
In PowerShell 2.0 und in älteren Hostprogrammen in PowerShell 3.0 und höher werden die Kernbefehle, die mit PowerShell installiert sind, in Snap-Ins verpackt, die automatisch jeder PowerShell-Sitzung hinzugefügt werden.
Ab PowerShell 3.0 wird für Hostprogramme, die die InitialSessionState.CreateDefault2
anfängliche Sitzungsstatus-API implementieren, das Microsoft.PowerShell.Core-Snap-In standardmäßig zu jeder Sitzung hinzugefügt. Module werden automatisch bei der ersten Verwendung geladen.
Hinweis
Remotesitzungen, einschließlich Sitzungen, die mit dem New-PSSession
Cmdlet gestartet werden, sind ältere Sitzungen, in denen die integrierten Befehle in Snap-Ins verpackt werden.
Die folgenden Module (oder Snap-Ins) werden mit PowerShell installiert.
- CimCmdlets
- Microsoft.PowerShell.Archive
- Microsoft.PowerShell.Core
- Microsoft.PowerShell.Diagnostics
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- Microsoft.WSMan.Management
- PackageManagement
- PowerShellGet
- PSDesiredStateConfiguration
- PSDiagnostics
- PSReadline
Protokollierungsmodulereignisse
Ab PowerShell 3.0 können Sie Ausführungsereignisse für die Cmdlets und Funktionen in PowerShell-Modulen und Snap-Ins aufzeichnen, indem Sie die LogPipelineExecutionDetails-Eigenschaft von Modulen und Snap-Ins auf $True
festlegen.
Sie können auch eine Gruppenrichtlinie Einstellung verwenden, die Modulprotokollierung aktivieren, um die Modulprotokollierung in allen PowerShell-Sitzungen zu aktivieren. Weitere Informationen finden Sie in den Protokoll- und Gruppenrichtlinienartikeln.