Udostępnij za pośrednictwem


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, CmdletsToExporti FunctionsToExport.

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