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
eFunctionsToExport
.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.