Compartilhar via


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

Este documento inclui algumas diretrizes relacionadas a como criar um módulo 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 são exportados pelo módulo 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 curingas nas entradas AliasesToExport, CmdletsToExport e FunctionsToExport.

  • Se o módulo não exportar comandos de um determinado tipo, deixe isso claro 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
}

Evite CDXML

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

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

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

Um módulo binário é carregado mais rápido porque é compilado antes da hora e pode usar a compilação de NGen para JIT uma vez por computador.

O módulo de script normalmente carrega um pouco mais lentamente do que o módulo binário, pois 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 deve primeiro analisar um arquivo XML que, em seguida, gera um pouco de script do PowerShell para análise e compilação.