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.
Dieses Dokument enthält einige Richtlinien für die Erstellung eines Moduls für eine optimale Leistung.
Erstellung eines Modulmanifests
Ein Modulmanifest, das die folgenden Richtlinien nicht verwendet, kann sich spürbar auf die allgemeine PowerShell-Leistung auswirken, auch wenn das Modul nicht in einer Sitzung verwendet wird.
Die automatische Erkennung von Befehlen analysiert jedes Modul, um zu bestimmen, welche Befehle das Modul exportiert, und diese Analyse kann teuer sein. Die Ergebnisse der Modulanalyse werden pro Benutzer zwischengespeichert, aber der Cache ist bei der ersten Ausführung nicht verfügbar, was ein typisches Szenario mit Containern ist. Wenn die exportierten Befehle während der Modulanalyse vollständig aus dem Manifest bestimmt werden können, kann eine teurere Analyse des Moduls vermieden werden.
Leitlinien
Verwenden Sie im Modulmanifest keine Wildcards in den Einträgen
AliasesToExport,CmdletsToExportundFunctionsToExport.Wenn das Modul keine Befehle eines bestimmten Typs exportiert, geben Sie dies explizit im Manifest an, indem Sie
@()angeben. Ein fehlender$null-Eintrag entspricht der Angabe des Platzhalters*.
Folgendes sollte möglichst vermieden werden:
@{
FunctionsToExport = '*'
# Also avoid omitting an entry, it's equivalent to using a wildcard
# CmdletsToExport = '*'
# AliasesToExport = '*'
}
Verwenden Sie stattdessen Folgendes:
@{
FunctionsToExport = 'Format-Hex', 'Format-Octal'
CmdletsToExport = @() # Specify an empty array, not $null
AliasesToExport = @() # Also ensure all three entries are present
}
CDXML vermeiden
Bei der Entscheidung, wie Das Modul implementiert werden soll, gibt es drei primäre Optionen:
- Binär (normalerweise C#)
- Skript (PowerShell)
- CDXML (eine XML-Datei, die CIM umschließt)
Wenn die Geschwindigkeit des Ladens Ihres Moduls wichtig ist, ist CDXML ungefähr eine Größenordnung langsamer als ein Binäres Modul.
Ein binäres Modul lädt am schnellsten, da es vorab kompiliert wird und NGen verwenden kann, um die JIT-Kompilierung einmal pro Rechner durchzuführen.
Ein Skriptmodul lädt in der Regel etwas langsamer als ein Binäres Modul, da PowerShell das Skript vor dem Kompilieren und Ausführen analysieren muss.
Ein CDXML-Modul ist in der Regel viel langsamer als ein Skriptmodul, da es zuerst eine XML-Datei analysieren muss, die dann ziemlich viel PowerShell-Skript generiert, das dann analysiert und kompiliert wird.