Överväganden vid redigering av PowerShell-moduler

Det här dokumentet innehåller några riktlinjer som rör hur en modul skapas för bästa prestanda.

Redigering av modulmanifest

Ett modulmanifest som inte använder följande riktlinjer kan ha en märkbar inverkan på allmänna PowerShell-prestanda även om modulen inte används i en session.

Automatisk identifiering av kommando analyserar varje modul för att avgöra vilka kommandon modulen exporterar och den här analysen kan vara dyr. Resultatet av modulanalys cachelagras per användare, men cachen är inte tillgänglig vid första körningen, vilket är ett typiskt scenario med containrar. Under modulanalysen kan du undvika dyrare analys av modulen om de exporterade kommandona kan fastställas helt från manifestet.

Riktlinjer

  • I modulmanifestet ska du inte använda jokertecken i posterna AliasesToExport, CmdletsToExportoch FunctionsToExport .

  • Om modulen inte exporterar kommandon av en viss typ anger du detta explicit i manifestet genom att @()ange . En saknad post eller $null post motsvarar att ange jokertecknet *.

Följande bör undvikas när det är möjligt:

@{
    FunctionsToExport = '*'

    # Also avoid omitting an entry, it's equivalent to using a wildcard
    # CmdletsToExport = '*'
    # AliasesToExport = '*'
}

Använd i stället:

@{
    FunctionsToExport = 'Format-Hex', 'Format-Octal'
    CmdletsToExport = @()  # Specify an empty array, not $null
    AliasesToExport = @()  # Also ensure all three entries are present
}

Undvik CDXML

När du bestämmer dig för hur du implementerar din modul finns det tre primära alternativ:

  • Binärt (vanligtvis C#)
  • Skript (PowerShell)
  • CDXML (en XML-fil som omsluter CIM)

Om hastigheten för att läsa in modulen är viktig är CDXML ungefär en storleksordning som är långsammare än en binär modul.

En binär modul läser in snabbast eftersom den kompileras i förväg och kan använda NGen till JIT-kompilering en gång per dator.

En skriptmodul läser vanligtvis in lite långsammare än en binär modul eftersom PowerShell måste parsa skriptet innan det kompileras och körs.

En CDXML-modul är vanligtvis mycket långsammare än en skriptmodul eftersom den först måste parsa en XML-fil som sedan genererar en hel del PowerShell-skript som sedan parsas och kompileras.