Compartilhar via


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

Este documento inclui algumas diretrizes relacionadas à forma como um módulo é criado para melhor desempenho.

Criação do manifesto do módulo

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

A descoberta automática de comando analisa cada módulo para determinar quais comandos o módulo exporta e essa análise pode ser cara. Os resultados da análise de módulo são armazenados em cache por usuário, mas o cache não está disponível na primeira execuçã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 poderá ser evitada.

Diretrizes

  • No manifesto do módulo, não use caracteres curinga nas entradas AliasesToExport, CmdletsToExporte FunctionsToExport.

  • Se o módulo não exportar comandos de um tipo específico, especifique-o explicitamente no manifesto especificando @(). Uma entrada ausente ou $null é equivalente à especificação do caractere curinga *.

O seguinte deve ser evitado sempre que possível:

@{
    FunctionsToExport = '*'

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

Em vez disso, use:

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

Evitar CDXML

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

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

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

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

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.