about_Modules

Kurze Beschreibung

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

Lange Beschreibung

Ein Modul ist ein Paket, das PowerShell-Member 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 empfangen, 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 PowerShell-Module verwendet werden. Informationen zum Schreiben von PowerShell-Modulen finden Sie unter Schreiben eines PowerShell-Moduls.

Was ist ein Modul?

Ein Modul ist ein Paket, das PowerShell-Member enthält, z. B. Cmdlets, Anbieter, Funktionen, Workflows, Variablen und Aliase. Die Member 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 einzigen 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 beim ersten Ausführen eines Befehls in einem installierten Modul. 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 es zu importieren, um 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 angesehen, 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 das Import-Module Cmdlet ausgeführt 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 Cmdlet ausführen, um das Import-ModuleMicrosoft.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:

  1. Installieren Sie das Modul. (Dies wird häufig für Sie durchgeführt.)
  2. Suchen Sie die Befehle, die das Modul hinzugefügt hat.
  3. 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 verfügt über mehrere vorinstallierte Module, manchmal auch als Kernmodule bezeichnet. Auf Windows-basierten Computern werden diese Module vorinstalliert, wenn Features, die im Betriebssystem enthalten sind, Cmdlets zum Verwalten haben. Wenn Sie ein Windows-Feature installieren, verwenden Sie beispielsweise den Assistenten zum Hinzufügen von Rollen und Features in Server-Manager oder das Dialogfeld "Windows-Features 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 Modulverzeichnis 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. Um beispielsweise den Ordner "MyModule" in C:\ps-test\MyModule das Verzeichnis "Module" zu kopieren, geben Sie Folgendes ein:

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 " Module" 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 an 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 rufen Sie Hilfe für die Befehle in einem Modul ab

Wenn das Modul Hilfedateien für die exportierten Befehle enthält, zeigt das Get-Help Cmdlet die Hilfethemen an. Verwenden Sie dasselbe Get-Help Befehlsformat, mit dem Sie Hilfe zu jedem Beliebigen Befehl in PowerShell erhalten würden.

Ab PowerShell 3.0 können Sie Hilfedateien für ein Modul herunterladen und Updates für die Hilfedateien herunterladen, damit 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-Help".

So importieren Sie ein Modul

Sie müssen möglicherweise ein Modul oder eine Moduldatei importieren. Der Import ist erforderlich, wenn ein Modul nicht in den Speicherorten installiert wird, die von der PSModulePath-Umgebungsvariable angegeben werden, $env:PSModulePathoder 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, sodass Sie die Parameter des Import-Module Befehls verwenden können, z. B. den Präfixparameter, der den Namen aller importierten Befehle oder den NoClobber-Parameter ein unverwechselbares Präfix hinzufügt, wodurch verhindert wird, 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.

Wenn Sie beispielsweise das TestCmdlets-Modul 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 der Moduldatei im Befehl.

Geben Sie beispielsweise 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.

So importieren Sie ein Modul in jede 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.

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.

Module und DSC-Ressourcenspeicherorte und PSModulePath

Die $env:PSModulePath Umgebungsvariable enthält eine Liste der Ordnerspeicherorte, die durchsucht werden, um Module und Ressourcen zu finden.

Standardmäßig sind die zugewiesenen $env:PSModulePath effektiven Speicherorte:

  • 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\Modulesdiese Position auf Windows 10 und höher. Auf Linux oder Mac ist $HOME/.local/share/powershell/Modulesder 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

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 $Truefestlegen. 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.

Siehe auch