Share via


about_Modules

Kurze Beschreibung

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

Lange Beschreibung

Ein Modul ist ein Paket, das PowerShell-Member wie Cmdlets, Anbieter, Funktionen, Workflows, Variablen und Aliase enthält.

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 ihren PowerShell-Sitzungen hinzufügen und wie die integrierten Befehle verwenden.

In diesem Thema wird die Verwendung von PowerShell-Modulen erläutert. 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 wie Cmdlets, Anbieter, Funktionen, Workflows, Variablen und Aliase enthält. 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 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, wenn Sie einen Befehl in einem installierten Modul zum ersten Mal 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 vorhanden sind. Sie können einen Befehl finden und ihn verwenden, ohne das Modul zuerst importieren zu müssen.

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
    

Get-Command Befehle, die ein Wildcardzeichen (*) enthalten, gelten als für die Ermittlung, nicht für die Verwendung und importieren keine Module.

Nur Module, die an dem von der PSModulePath-Umgebungsvariablen angegebenen Speicherort gespeichert werden, werden automatisch importiert. Module an anderen Speicherorten müssen durch Ausführen des Import-Module Cmdlets importiert werden.

Außerdem importieren Befehle, die PowerShell-Anbieter verwenden, nicht automatisch ein Modul. Wenn Sie beispielsweise einen Befehl verwenden, der das Laufwerk WSMan: 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.

Sie können weiterhin den Import-Module Befehl 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.

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.

Die meisten Module werden für Sie installiert. PowerShell enthält mehrere vorinstallierte Module, die manchmal als Kernmodule bezeichnet werden. Wenn features, die im Betriebssystem enthalten sind, auf Windows-basierten Computern über Cmdlets zum Verwalten verfügen, sind diese Module vorinstalliert. Wenn Sie ein Windows-Feature installieren, indem Sie z. B. den Assistenten zum Hinzufügen von Rollen und Features in Server-Manager oder das Dialogfeld Windows-Features aktivieren oder deaktivieren in Systemsteuerung verwenden, werden alle PowerShell-Module installiert, die Teil des Features sind. Viele andere Module sind in einem Installationsprogramm oder Setup-Programm, mit dem das Modul installiert wird.

Verwenden Sie den folgenden Befehl, um ein Modules-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 eine beliebige 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 aus in C:\ps-test\MyModule das Verzeichnis Modules 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 Modul- und DSC-Ressourcenspeicherorte und PSModulePath .

Suchen nach installierten Modulen

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.

Suchen 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.

Abrufen von Hilfe zu den Befehlen in einem Modul

Wenn das Modul Hilfedateien für die Befehle enthält, die es exportiert, zeigt das Get-Help Cmdlet die Hilfethemen an. Verwenden Sie dasselbe Get-Help Befehlsformat, das Sie verwenden würden, um Hilfe für jeden Befehl in PowerShell zu erhalten.

Ab PowerShell 3.0 können Sie Hilfedateien für ein Modul herunterladen und Updates für 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 Onlinehilfe für Befehle 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.

Importieren eines Moduls

Sie müssen möglicherweise ein Modul oder eine Moduldatei importieren. Der Import ist erforderlich, wenn ein Modul nicht an den durch die PSModulePath-Umgebungsvariablen $env:PSModulePathangegebenen Speicherorten installiert wird oder das Modul aus einer Datei wie einer .dll- oder PSM1-Datei besteht, anstatt aus einem typischen Modul, 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 Parameter Prefix, der den Nomennamen aller importierten Befehle ein unverwechselbares Präfix hinzufügt, oder den NoClobber-Parameter , der 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.

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

Weitere Informationen zu Profilen finden Sie unter about_Profiles.

Entfernen eines Moduls

Wenn Sie ein Modul entfernen, werden die vom Modul hinzugefügten Befehle aus der Sitzung gelöscht.

Verwenden Sie das folgende Befehlsformat, um ein Modul aus Ihrer Sitzung zu entfernen.

Remove-Module <module-name>

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. Beim Entfernen eines Moduls wird das Modul nicht deinstalliert. Weitere Informationen finden Sie unter Remove-Module.

Modul- und DSC-Ressourcenspeicherorte und PSModulePath

Die Umgebungsvariable $env:PSModulePath enthält eine Liste von Ordnerspeicherorten, die nach Modulen und Ressourcen gesucht werden.

Standardmäßig sind folgende effektive Standorte zugewiesen $env:PSModulePath :

  • 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 Scope-Parameter , 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 Version von Windows und ob Sie die Ordnerumleitung verwenden oder nicht. Microsoft OneDrive kann auch den Speicherort Ihres Ordners "Dokumente" ändern.

    Standardmäßig ist $HOME\Documents\PowerShell\Modulesdieser Speicherort auf Windows 10 und höher . Unter Linux oder Mac ist $HOME/.local/share/powershell/Modulesder CurrentUser-Speicherort .

    Hinweis

    Sie können den Speicherort Ihres Ordners Dokumente mit dem folgenden Befehl überprüfen: [Environment]::GetFolderPath('MyDocuments').

  • Der Speicherort AllUsers befindet sich $env:PROGRAMFILES\PowerShell\Modules unter Windows. Unter Linux oder Mac werden die Module unter /usr/local/share/powershell/Modulesgespeichert.

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 Standardspeicherorte des Moduls auf Ihrem System ändern, indem Sie den Wert der PSModulePath-Umgebungsvariable ändern $Env:PSModulePath. Die Umgebungsvariable PSModulePath wird für die Umgebungsvariable Path modelliert und weist das gleiche 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>"

Das Semikolon (;) im Befehl trennt den neuen Pfad von dem Pfad, der ihm in der Liste vorangestellt ist.

Geben Sie beispielsweise Folgendes ein, um das C:\ps-test\Modules Verzeichnis hinzuzufügen:

$Env:PSModulePath + ";C:\ps-test\Modules"

Verwenden Sie das folgende Befehlsformat, um einen Standardmodulspeicherort unter Linux oder MacOS hinzuzufügen:

$Env:PSModulePath += ":<path>"

Geben Sie beispielsweise Folgendes ein, um das /usr/local/Fabrikam/Modules Verzeichnis dem Wert der PSModulePath-Umgebungsvariablen hinzuzufügen:

$Env:PSModulePath += ":/usr/local/Fabrikam/Modules"

Unter Linux oder MacOS trennt der Doppelpunkt (:) im Befehl den neuen Pfad von dem Pfad, der ihm in der Liste vorangestellt ist.

Wenn Sie PSModulePath einen Pfad hinzufügen, Get-Module enthalten Import-Module Befehle 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 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 zu machen, können Sie auch die SetEnvironmentVariable-Methode der System.Environment-Klasse verwenden, um der Umgebungsvariablen PSModulePath einen Path hinzuzufügen.

Weitere Informationen zur PSModulePath-Variablen finden Sie unter about_Environment_Variables.

Module und Namenskonflikte

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 kann Befehle hinzufügen, 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. Ruft ab PowerShell 3.0 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 Vermeiden von Namenskonflikten den Parameter NoClobber oder Prefix des Import-Module Cmdlets. Der Prefix-Parameter 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 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.

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-Befehlsrangfolgeregeln bestimmen, welcher Befehl ausgeführt wird, 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 wie 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

Geben Sie beispielsweise Folgendes ein, um die Quelle des Get-Date Cmdlets zu finden:

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 möglicherweise weniger auffindbar sind. 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 den DisableNameChecking-Parameter des Cmdlets, um die Import-Module Warnmeldung zu unterdrücken.

Integrierte Module und Snap-Ins

In PowerShell 2.0 und in Hostprogrammen im älteren Stil in PowerShell 3.0 und höher werden die mit PowerShell installierten Kernbefehle 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, standardmäßig jeder Sitzung das Microsoft.PowerShell.Core-Snap-In hinzugefügt. Module werden automatisch bei der ersten Verwendung geladen.

Hinweis

Remotesitzungen, einschließlich Sitzungen, die mithilfe des New-PSSession Cmdlets gestartet werden, sind Sitzungen im älteren Stil, in denen die integrierten Befehle in Snap-Ins gepackt 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 die Gruppenrichtlinie Einstellung Aktivieren der Modulprotokollierung verwenden, um die Modulprotokollierung in allen PowerShell-Sitzungen zu aktivieren. Weitere Informationen finden Sie in den Artikeln zur Protokollierung und Gruppenrichtlinie.

Weitere Informationen