Pide tu presupuesto ya!
Tal vez hayas reunido algunas funciones grandes pero luchar para hacerlas cohesivas, intuitivas o compartibles. Sin una forma de definir la identidad y la funcionalidad de su módulo, administrar o escalar a medida que sus scripts evolucionan en herramientas robustas pueden ser un dolor de cabeza. No a menos que tenga un módulo manifiesto en su lugar.
Piense en un módulo manifiesto como la columna vertebral de su módulo PowerShell. En esta guía, aprenderá qué es un manifiesto y cómo crear uno que simplifique la gestión y mejore la usabilidad.
Para seguir con este tutorial, asegúrese de tener:
Un módulo manifiesto es un archivo de datos de PowerShell (.psd1) que contiene metadatos sobre su módulo. Es esencialmente un hashtable que le dice a PowerShell:
Sin un manifiesto, los módulos de PowerShell todavía funcionan pero carecen de esmalte y control profesionales. El manifiesto transforma una colección de scripts en un paquete de versiones manejables.
Un archivo manifiesto debe seguir convenciones de nomenclatura específicas. Nombra el archivo de manifiesto después de tu módulo con un .psd1 extensión. Por ejemplo, si se nombra su módulo Informeinventoryel archivo manifiesto debe ser ComputerInventory.PSD1.
Mientras puede crear un manifiesto manualmente, el New-ModuleManifest Cmdlet simplifica el proceso. Aquí hay un ejemplo completo:
New-ModuleManifest -Path 'C:\Program Files\PowerShell\Modules\ComputerInventory\ComputerInventory.psd1' `
-RootModule 'ComputerInventory.psm1' `
-ModuleVersion '1.0.0' `
-Guid (New-Guid).Guid `
-Author 'Your Name' `
-CompanyName 'Your Organization' `
-Description 'A module for collecting computer hardware inventory information' `
-PowerShellVersion '5.1' `
-FunctionsToExport 'Get-MemoryInfo','Get-ProcessorInfo','Get-StorageInfo' `
-CompatiblePSEditions 'Core','Desktop'
Camino – Dónde crear el archivo manifiesto. La ruta que se muestra utiliza la ubicación del módulo predeterminada de PowerShell, pero puede crear un manifiesto en cualquier lugar. Las ubicaciones comunes incluyen:
C:\Program Files\PowerShell\Modules\ -Módulos de todo el sistema (requiere derechos de administrador)$HOME\Documents\PowerShell\Modules\ -Módulos específicos del usuarioPara ver todas las rutas del módulo PowerShell Búsquedas:
$env:PSModulePath -split ';'
Módulo raíz – El archivo principal .psm1 que contiene el código de su módulo. Este parámetro le dice a PowerShell qué archivo cargar cuando alguien importa su módulo. El camino es relativo a la ubicación manifiesta.
Se requieren parámetros opcionales requeridos
Solo el -Path El parámetro es obligatorio. New-ModuleManifest Crea un manifiesto de plantilla con valores predeterminados si omite otros parámetros. Sin embargo, estos parámetros son muy recomendados:
| Parámetro | Requerido | Objetivo | Predeterminado si se omite |
|---|---|---|---|
| Camino | Sí | Donde salvar el manifiesto | N / A |
| Módulo raíz | No | Archivo del módulo principal para cargar | El módulo no cargará ningún código |
| Moduleversion | No | Seguimiento de la versión | ‘0.0.1’ |
| Guía | No | Identificador de módulo único | Generado por auto |
| Autor | No | Creador de módulos | Nombre de usuario actual |
| FunctionStoExport | No | Que funciona para exponer | ‘*’ (todas las funciones) |
Explicaciones de parámetros clave:
(New-Guid).Guid genera un nuevo guía cada vez. Mantenga el mismo GUID en las versiones de su módulo.Los manifiestos incluyen varios atributos que controlan el comportamiento del módulo. Aquí están los más importantes:
| Atributo | Definición | Ejemplo |
|---|---|---|
RootModule | Especifica el archivo del módulo primario (.psm1) | 'ComputerInventory.psm1' |
ModuleVersion | Indica la versión del módulo para los cambios de seguimiento | '1.0.0' |
GUID | Un identificador único para el módulo | 'a4d1f2c3-8b7e-4a5d-9c6f-1e2a3b4c5d6e' |
Author | El nombre del creador del módulo | 'Jane Smith' |
Description | Breve explicación del propósito del módulo | 'Collects hardware inventory' |
| Atributo | Definición | Cuando usar |
|---|---|---|
PowerShellVersion | Se requiere la versión mínima de PowerShell | Establecer en ‘5.1’ para una amplia compatibilidad |
CompatiblePSEditions | ¿Qué ediciones de PowerShell son compatibles? | Use ‘Core’ para PS 7+, ‘Desktop’ para Windows PowerShell |
CLRVersion | Versión requerida de .NET Framework | Solo se necesita para los módulos de Windows PowerShell |
ProcessorArchitecture | Arquitectura del procesador requerida | Use cuando el módulo tiene dependencias específicas de arquitectura |
El FunctionsToExport El atributo merece atención especial. Por defecto, PowerShell exporta todas las funciones de un módulo. Esto puede exponer funciones auxiliares que pretendía mantener en privado.
# Export only public functions
FunctionsToExport = @('Get-MemoryInfo', 'Get-ProcessorInfo', 'Get-StorageInfo')
# This keeps ConvertTo-GB as an internal helper function
¿Por qué mantener las funciones privadas?
Hay varias razones para ocultar ciertas funciones de los usuarios del módulo:
Por ejemplo, si ConvertTo-GB es un ayudante de cálculo simple utilizado por múltiples funciones, los usuarios no necesitan acceso directo a él. Deben usar las funciones principales que lo llaman internamente.
Para ver qué funciones se exportan realmente:
Get-Command -Module ComputerInventory
Los manifiestos también pueden administrar dependencias del módulo:
# Modules that must be imported before this module
RequiredModules = @('ActiveDirectory', 'Az.Compute')
# Assemblies that must be loaded
RequiredAssemblies = @('System.Web.dll')
# Scripts to run when module imports
ScriptsToProcess = @('Initialize-Module.ps1')
Un manifiesto con errores de sintaxis o referencias faltantes causará fallas de importación de módulos. Valide siempre tu manifiesto usando Test-ModuleManifest:
Test-ModuleManifest -Path 'C:\Program Files\PowerShell\Modules\ComputerInventory\ComputerInventory.psd1'
Este cmdlet verifica:
Si tiene éxito, devuelve un objeto PSModuleInfo. Si hay errores, proporciona mensajes de error detallados.
Aquí hay problemas frecuentes Test-ModuleManifest captura:
Después de crear y probar su manifiesto, verifique las cargas del módulo correctamente:
# Import the module
Import-Module ComputerInventory -Force
# Check module details
Get-Module -Name ComputerInventory | Format-List
# Verify exported functions
Get-Command -Module ComputerInventory
La salida debe mostrar:
El PrivateData La sección almacena metadatos adicionales, particularmente para la publicación de la galería de PowerShell:
PrivateData = @{
PSData = @{
Tags = @('Inventory', 'Hardware', 'Windows', 'CrossPlatform')
LicenseUri = 'https://github.com/yourname/ComputerInventory/blob/main/LICENSE'
ProjectUri = '<https://github.com/yourname/ComputerInventory>'
IconUri = 'https://raw.githubusercontent.com/yourname/ComputerInventory/main/icon.png'
ReleaseNotes="Initial release with basic hardware inventory functions"
}
}
Usar ScriptsToProcess Para ejecutar el código de inicialización antes de que se cargue el módulo:
ScriptsToProcess = @('Init-ComputerInventory.ps1')
Este guión podría:
Para módulos complejos, puede organizar el código en módulos anidados:
NestedModules = @(
'Private\HelperFunctions.psm1',
'Public\CoreFunctions.psm1'
)
Has aprendido a crear módulos profesionales de PowerShell usando manifiestas. Un manifiesto bien elaborado transforma una colección de funciones en un módulo pulido y controlado por la versión que es fácil de compartir y mantener.
Control de llave:
New-ModuleManifest Para garantizar una estructura adecuadaTest-ModuleManifest Antes de distribuciónComience agregando un manifiesto a sus módulos existentes. A medida que obtiene experiencia, explore características avanzadas como módulos anidados y scripts de inicialización para construir herramientas de PowerShell cada vez más sofisticadas.
Leave a comment