Partilhar via


Considerações sobre a criação do módulo PowerShell

Este documento inclui algumas diretrizes relacionadas a como um módulo é criado para obter o melhor desempenho.

Criação de manifesto do módulo

Um manifesto de módulo que não usa as diretrizes a seguir pode ter um impacto notável no desempenho geral do PowerShell, mesmo que o módulo não seja usado em uma sessão.

A descoberta automática de comandos analisa cada módulo para determinar quais comandos o módulo exporta e essa análise pode ser cara. Os resultados da análise do módulo são armazenados em cache por usuário, mas o cache não está disponível na primeira execução, o que é um cenário típico com contêineres. Durante a análise do módulo, se os comandos exportados puderem ser totalmente determinados a partir do manifesto, uma análise mais cara do módulo pode ser evitada.

Diretrizes

  • No manifesto do módulo, não use curingas AliasesToExportnas entradas , CmdletsToExporte FunctionsToExport .

  • Se o módulo não exportar comandos de um tipo específico, especifique isso explicitamente no manifesto especificando @(). Uma entrada ou $null ausente equivale a especificar o curinga *.

Sempre que possível, deve evitar-se o seguinte:

@{
    FunctionsToExport = '*'

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

Em alternativa, utilize:

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

Evite o CDXML

Ao decidir como implementar seu módulo, há três opções principais:

  • Binário (geralmente C#)
  • Script (PowerShell)
  • CDXML (um arquivo XML encapsulando CIM)

Se a velocidade de carregamento do módulo for importante, o CDXML é aproximadamente uma ordem de grandeza mais lenta do que um módulo binário.

Um módulo binário carrega mais rápido porque é compilado com antecedência e pode usar NGen para compilar JIT uma vez por máquina.

Um módulo de script normalmente carrega um pouco mais lentamente do que um módulo binário porque o PowerShell deve analisar o script antes de compilá-lo e executá-lo.

Um módulo CDXML é normalmente muito mais lento do que um módulo de script porque ele deve primeiro analisar um arquivo XML que, em seguida, gera um pouco de script do PowerShell que é então analisado e compilado.