Cómo escribir un manifiesto de módulo de PowerShell

Después de escribir el módulo de PowerShell, puede agregar un manifiesto de módulo opcional que incluya información sobre el módulo. Por ejemplo, puede describir el autor, especificar archivos en el módulo (como módulos anidados), ejecutar scripts para personalizar el entorno del usuario, cargar archivos de tipo y formato, definir requisitos del sistema y limitar los miembros que exporta el módulo.

Creación de un manifiesto de módulo

Un manifiesto de módulo es un archivo de datos de PowerShell (.psd1) que describe el contenido de un módulo y determina cómo se procesa un módulo. El archivo de manifiesto es un archivo de texto que contiene una tabla hash de claves y valores. Para vincular un archivo de manifiesto a un módulo, asigne al manifiesto el mismo nombre que el módulo y almacene el manifiesto en el directorio raíz del módulo.

En el caso de los módulos simples que contienen solo un ensamblado binario o de .psm1, un manifiesto de módulo es opcional. Pero la recomendación es usar un manifiesto de módulo siempre que sea posible, ya que son útiles para ayudarle a organizar el código y mantener la información de control de versiones. Además, se requiere un manifiesto de módulo para exportar un ensamblado instalado en caché global de ensamblados. También se requiere un manifiesto de módulo para los módulos que admiten la característica Ayuda actualizable. La Ayuda actualizable usa la clave de HelpInfoUri en el manifiesto del módulo para buscar el archivo de información de ayuda (HelpInfo XML) que contiene la ubicación de los archivos de ayuda actualizados para el módulo. Para obtener más información sobre la Ayuda actualizable, vea Compatibilidad con ayuda actualizable.

Para crear y usar un manifiesto de módulo

  1. El procedimiento recomendado para crear un manifiesto de módulo es usar el cmdlet New-ModuleManifest. Puede usar parámetros para especificar una o varias de las claves y valores predeterminados del manifiesto. El único requisito es asignar un nombre al archivo. New-ModuleManifest crea un manifiesto de módulo con los valores especificados e incluye las claves restantes y sus valores predeterminados. Si necesita crear varios módulos, use New-ModuleManifest para crear una plantilla de manifiesto de módulo que se pueda modificar para los distintos módulos. Para obtener un ejemplo de un manifiesto de módulo predeterminado, consulte el manifiesto del módulo de ejemplo .

    New-ModuleManifest -Path C:\myModuleName.psd1 -ModuleVersion "2.0" -Author "YourNameHere"

    Una alternativa consiste en crear manualmente la tabla hash del manifiesto del módulo con la información mínima necesaria, ModuleVersion. Guarde el archivo con el mismo nombre que el módulo y use la extensión de archivo .psd1. A continuación, puede editar el archivo y agregar las claves y los valores adecuados.

  2. Agregue los elementos adicionales que desee en el archivo de manifiesto.

    Para editar el archivo de manifiesto, use cualquier editor de texto que prefiera. Pero el archivo de manifiesto es un archivo de script que contiene código, por lo que es posible que desee editarlo en un entorno de desarrollo o scripting, como Visual Studio Code. Todos los elementos de un archivo de manifiesto son opcionales, excepto el número de ModuleVersion.

    Para obtener más información, consulte las descripciones de parámetros del cmdlet New-ModuleManifest . Para obtener descripciones de las claves y los valores que puede incluir en un manifiesto de módulo, consulte about_Module_Manifests.

  3. Para abordar los escenarios que podrían no estar cubiertos por los elementos del manifiesto del módulo base, tiene la opción de agregar código adicional al manifiesto del módulo.

    Para problemas de seguridad, PowerShell solo ejecuta un pequeño subconjunto de las operaciones disponibles en un archivo de manifiesto de módulo. Por lo general, puede usar la instrucción if, los operadores aritméticos y de comparación, así como los tipos de datos básicos de PowerShell.

  4. Después de crear el manifiesto del módulo, puede probarlo para confirmar que las rutas de acceso descritas en el manifiesto son correctas. Para probar el manifiesto del módulo, use Test-ModuleManifest.

    Test-ModuleManifest myModuleName.psd1

  5. Asegúrese de que el manifiesto del módulo se encuentra en el nivel superior del directorio que contiene el módulo.

    Al copiar el módulo en un sistema e importarlo, PowerShell usa el manifiesto del módulo para importar el módulo.

  6. Opcionalmente, puede probar directamente el manifiesto del módulo con una llamada a Import-Module mediante dot-sourcing el propio manifiesto.

    Import-Module .\myModuleName.psd1

Manifiesto de módulo de ejemplo

El siguiente manifiesto de módulo de ejemplo se creó con New-ModuleManifest en PowerShell 7 y contiene las claves y los valores predeterminados. Para obtener una descripción detallada de cada elemento de un manifiesto de módulo, consulte about_Module_Manifests.

#
# Module manifest for module 'SampleModuleManifest'
#
# Generated by: User01
#
# Generated on: 10/15/2019
#

@{

# Script module or binary module file associated with this manifest.
# RootModule = ''

# Version number of this module.
ModuleVersion = '0.0.1'

# Supported PSEditions
# CompatiblePSEditions = @()

# ID used to uniquely identify this module
GUID = 'b632e90c-df3d-4340-9f6c-3b832646bf87'

# Author of this module
Author = 'User01'

# Company or vendor of this module
CompanyName = 'Unknown'

# Copyright statement for this module
Copyright = '(c) User01. All rights reserved.'

# Description of the functionality provided by this module
# Description = ''

# Minimum version of the PowerShell engine required by this module
# PowerShellVersion = ''

# Name of the PowerShell host required by this module
# PowerShellHostName = ''

# Minimum version of the PowerShell host required by this module
# PowerShellHostVersion = ''

# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
# DotNetFrameworkVersion = ''

# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
# CLRVersion = ''

# Processor architecture (None, X86, Amd64) required by this module
# ProcessorArchitecture = ''

# Modules that must be imported into the global environment prior to importing this module
# RequiredModules = @()

# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()

# Script files (.ps1) that are run in the caller's environment prior to importing this module.
# ScriptsToProcess = @()

# Type files (.ps1xml) to be loaded when importing this module
# TypesToProcess = @()

# Format files (.ps1xml) to be loaded when importing this module
# FormatsToProcess = @()

# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
# NestedModules = @()

# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
FunctionsToExport = @()

# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
CmdletsToExport = @()

# Variables to export from this module
VariablesToExport = '*'

# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.
AliasesToExport = @()

# DSC resources to export from this module
# DscResourcesToExport = @()

# List of all modules packaged with this module
# ModuleList = @()

# List of all files packaged with this module
# FileList = @()

# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
PrivateData = @{

    PSData = @{

        # Tags applied to this module. These help with module discovery in online galleries.
        # Tags = @()

        # A URL to the license for this module.
        # LicenseUri = ''

        # A URL to the main website for this project.
        # ProjectUri = ''

        # A URL to an icon representing this module.
        # IconUri = ''

        # ReleaseNotes of this module
        # ReleaseNotes = ''

        # Prerelease string of this module
        # Prerelease = ''

        # Flag to indicate whether the module requires explicit user acceptance for install/update/save
        # RequireLicenseAcceptance = $false

        # External dependent modules of this module
        # ExternalModuleDependencies = @()

    } # End of PSData hashtable

} # End of PrivateData hashtable

# HelpInfo URI of this module
# HelpInfoURI = ''

# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
# DefaultCommandPrefix = ''

}

Consulte también