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
AliasesToExport
nas entradas ,CmdletsToExport
eFunctionsToExport
.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.