Consideraciones de creación de módulos de PowerShell
En este documento se incluyen algunas directrices relacionadas con cómo se crea un módulo para mejorar el rendimiento.
Creación de manifiestos de módulo
Un manifiesto de módulo que no usa las siguientes instrucciones puede tener un impacto notable en el rendimiento general de PowerShell incluso si el módulo no se usa en una sesión.
La detección automática de comandos analiza cada módulo para determinar qué comandos exporta el módulo y este análisis puede ser costoso. Los resultados del análisis de módulos se almacenan en caché por usuario, pero la memoria caché no está disponible en la primera ejecución, que es un escenario típico con contenedores. Durante el análisis de módulos, si los comandos exportados se pueden determinar completamente desde el manifiesto, se puede evitar un análisis más caro del módulo.
Directrices
En el manifiesto del módulo, no use caracteres comodín en las entradas de
AliasesToExport
,CmdletsToExport
yFunctionsToExport
.Si el módulo no exporta comandos de un tipo determinado, especifíquelo explícitamente en el manifiesto especificando
@()
. Una entrada que falta o que sea$null
equivale a especificar el carácter comodín*
.
Siempre que sea posible, debe evitarse lo siguiente:
@{
FunctionsToExport = '*'
# Also avoid omitting an entry, it's equivalent to using a wildcard
# CmdletsToExport = '*'
# AliasesToExport = '*'
}
En su lugar, use:
@{
FunctionsToExport = 'Format-Hex', 'Format-Octal'
CmdletsToExport = @() # Specify an empty array, not $null
AliasesToExport = @() # Also ensure all three entries are present
}
Evitar CDXML
Al decidir cómo implementar el módulo, hay tres opciones principales:
- Binario (normalmente C#)
- Script (PowerShell)
- CDXML (un archivo XML encapsulando CIM)
Si la velocidad de carga del módulo es importante, CDXML es aproximadamente un orden de magnitud más lento que un módulo binario.
Un módulo binario tiene la carga más rápida porque se compila con antelación y puede usar NGen para compilar JIT una vez por máquina.
Normalmente, un módulo de script carga un poco más lentamente que un módulo binario porque PowerShell debe analizar el script antes de compilarlo y ejecutarlo.
Un módulo CDXML suele ser mucho más lento que un módulo de script porque primero debe analizar un archivo XML que, a continuación, genera un poco de script de PowerShell que luego se analiza y compila.