Zagadnienia dotyczące tworzenia modułu programu PowerShell
Ten dokument zawiera pewne wskazówki dotyczące sposobu tworzenia modułu w celu uzyskania najlepszej wydajności.
Tworzenie manifestu modułu
Manifest modułu, który nie korzysta z poniższych wytycznych, może mieć zauważalny wpływ na ogólną wydajność programu PowerShell, nawet jeśli moduł nie jest używany w sesji.
Automatyczne odnajdywanie poleceń analizuje każdy moduł, aby określić, które polecenia eksportuje moduł, a ta analiza może być kosztowna. Wyniki analizy modułu są buforowane na użytkownika, ale pamięć podręczna nie jest dostępna przy pierwszym uruchomieniu, co jest typowym scenariuszem w przypadku kontenerów. Jeśli podczas analizy modułu można w pełni określić wyeksportowane polecenia z manifestu, można uniknąć droższej analizy modułu.
Wytyczne
W manifeście modułu nie używaj symboli wieloznacznych w wpisach
AliasesToExport
,CmdletsToExport
iFunctionsToExport
.Jeśli moduł nie eksportuje poleceń określonego typu, określ to jawnie w manifeście, określając
@()
. Brak wpisu lub$null
jest odpowiednikiem określenia symbolu wieloznakowego*
.
W miarę możliwości należy unikać następujących czynności:
@{
FunctionsToExport = '*'
# Also avoid omitting an entry, it's equivalent to using a wildcard
# CmdletsToExport = '*'
# AliasesToExport = '*'
}
Zamiast tego użyj:
@{
FunctionsToExport = 'Format-Hex', 'Format-Octal'
CmdletsToExport = @() # Specify an empty array, not $null
AliasesToExport = @() # Also ensure all three entries are present
}
Unikanie programu CDXML
Podczas podejmowania decyzji o sposobie implementacji modułu istnieją trzy podstawowe opcje:
- Binarne (zwykle C#)
- Skrypt (PowerShell)
- CDXML (plik XML opakowujący CIM)
Jeśli szybkość ładowania modułu jest ważna, cdXML jest mniej więcej o rzędu wielkości wolniej niż moduł binarny.
Moduł binarny ładuje się najszybciej, ponieważ jest kompilowany z wyprzedzeniem i może używać narzędzia NGen do kompilowania JIT raz na maszynę.
Moduł skryptu zwykle ładuje nieco wolniej niż moduł binarny, ponieważ program PowerShell musi przeanalizować skrypt przed skompilowaniem i wykonaniem go.
Moduł CDXML jest zwykle znacznie wolniejszy niż moduł skryptu, ponieważ musi najpierw przeanalizować plik XML, który następnie generuje sporo skryptu programu PowerShell, który następnie jest analizowany i skompilowany.