Share via


about_Module_Manifests

Descripción breve

Describe la configuración y los procedimientos para escribir archivos de manifiesto del módulo.

Descripción larga

Un manifiesto de módulo es un archivo de datos de PowerShell (.psd1) que contiene una tabla hash. Los pares keys-value de la tabla hash describen el contenido y los atributos del módulo, definen los requisitos previos y controlan cómo se procesan los componentes.

Los manifiestos no son necesarios para cargar un módulo, pero son necesarios para publicar un módulo en el Galería de PowerShell. Los manifiestos también le permiten separar la implementación del módulo de cómo se carga. Con un manifiesto, puede definir requisitos, compatibilidad, orden de carga y mucho más.

Cuando se usa New-ModuleManifest sin especificar ningún parámetro para la configuración del manifiesto, escribe un archivo de manifiesto mínimo. El fragmento de código siguiente muestra esta salida predeterminada, recortada de comentarios y espaciado para mayor brevedad:

@{
# RootModule = ''
ModuleVersion = '1.0'
# CompatiblePSEditions = @()
GUID = 'e7184b71-2527-469f-a50e-166b612dfb3b'
Author = 'username'
CompanyName = 'Unknown'
Copyright = '(c) 2022 username. All rights reserved.'
# Description = ''
# PowerShellVersion = ''
# PowerShellHostName = ''
# PowerShellHostVersion = ''
# DotNetFrameworkVersion = ''
# CLRVersion = ''
# ProcessorArchitecture = ''
# RequiredModules = @()
# RequiredAssemblies = @()
# ScriptsToProcess = @()
# TypesToProcess = @()
# FormatsToProcess = @()
# NestedModules = @()
FunctionsToExport = @()
CmdletsToExport = @()
VariablesToExport = '*'
AliasesToExport = @()
# DscResourcesToExport = @()
# ModuleList = @()
# FileList = @()
PrivateData = @{
    PSData = @{
        # Tags = @()
        # LicenseUri = ''
        # ProjectUri = ''
        # IconUri = ''
        # ReleaseNotes = ''
    } # End of PSData hashtable
} # End of PrivateData hashtable
# HelpInfoURI = ''
# DefaultCommandPrefix = ''
}

Puede usar Test-ModuleManifest para validar un manifiesto de módulo antes de publicar el módulo. Test-ModuleManifest devuelve un error si el manifiesto no es válido o el módulo no se puede importar en la sesión actual porque la sesión no cumple los requisitos establecidos en el manifiesto.

Uso del código de script en un manifiesto de módulo

Los valores asignados a la configuración del archivo de manifiesto pueden ser expresiones evaluadas por PowerShell. Esto le permite construir rutas de acceso y asignar valores condicionalmente basados en variables.

Al importar un módulo mediante Import-Module, el manifiesto se evalúa en Restricted modo de lenguaje. Restricted el modo limita los comandos y variables que se pueden usar.

Comandos permitidos

  • Import-LocalizedData
  • ConvertFrom-StringData
  • Write-Host
  • Out-Host
  • Join-Path

Variables permitidas

  • $PSScriptRoot
  • $PSEdition
  • $EnabledExperimentalFeatures
  • Cualquier variable de entorno, como $ENV:TEMP

Para obtener más información, consulte about_Language_Modes.

Configuración del manifiesto

En las secciones siguientes se detallan todas las opciones disponibles en un manifiesto de módulo y cómo se pueden usar. Comienzan con una sinopsis de la configuración y van seguidas de una matriz que enumera:

  • Tipo de entrada: el tipo de objeto que puede especificar para esta configuración en el manifiesto.
  • Obligatorio: si este valor es Yes, se requiere la configuración tanto para importar el módulo como para publicarlo en el Galería de PowerShell. Si es No, no es necesario para ninguno. Si es PowerShell Gallery, solo es necesario para publicar en el Galería de PowerShell.
  • Valor si no se establece: el valor que tiene esta configuración cuando se importa y no se establece explícitamente.
  • Acepta caracteres comodín: indica si esta configuración puede tomar o no un valor comodín.

RootModule

Esta configuración especifica el archivo principal o raíz del módulo. Cuando se importa el módulo, los miembros exportados por el archivo del módulo raíz se importan en el estado de sesión del autor de la llamada.

Valor
Tipo de entrada System.String
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

El valor debe ser la ruta de acceso a una de las siguientes opciones:

  • un script (.ps1)
  • un módulo de script (.psm1)
  • un manifiesto de módulo (.psd1)
  • un ensamblado (.dll)
  • un archivo XML de definición de cmdlet (.cdxml)
  • un flujo de trabajo de Windows PowerShell 5.1 (.xaml)

La ruta de acceso debe ser relativa al manifiesto del módulo.

Si un manifiesto de módulo no tiene ningún archivo raíz designado en la clave RootModule , el manifiesto se convierte en el archivo principal del módulo y el módulo se convierte en un módulo de manifiesto (ModuleType = Manifiesto). Cuando se define RootModule , el tipo del módulo se determina a partir de la extensión de archivo usada:

  • un .ps1 archivo o .psm1 hace que el tipo de módulo Script
  • un .psd1 archivo hace que el tipo de módulo Manifiesto
  • un .dll archivo hace que el tipo de módulo Binary
  • un .cdxml archivo hace que el tipo de módulo CIM
  • un .xaml archivo hace que el tipo de módulo Flujo de trabajo

De forma predeterminada, se exportan todos los miembros del módulo de RootModule .

Sugerencia

La velocidad de carga de módulos difiere entre los tipos de módulo Binary, Script y CIM . Para más información, consulte Consideraciones de creación de módulos de PowerShell.

Por ejemplo, moduleType de este módulo es Manifest. Los únicos miembros del módulo que este módulo puede exportar son los definidos en los módulos especificados con la configuración NestedModules .

@{
    RootModule = ''
}

Nota:

Esta configuración también se puede especificar en manifiestos de módulo como ModuleToProcess. Aunque ese nombre para esta configuración es válido, se recomienda usar RootModule en su lugar.

ModuleVersion

Esta configuración especifica la versión del módulo. Cuando existen varias versiones de un módulo en un sistema, la versión más reciente se carga de forma predeterminada al ejecutar Import-Module.

Valor
Tipo de entrada System.String
Obligatorio
Valor si no se establece None
Acepta caracteres comodín No

El valor de esta configuración debe convertirse en System.Version al ejecutar Import-Module.

Por ejemplo, este manifiesto declara la versión del módulo como '1.2.3'.

@{
    ModuleVersion = '1.2.3'
}

Al importar el módulo e inspeccionar la propiedad Version , tenga en cuenta que es un objeto System.Version y no una cadena:

$ExampleModule = Import-Module example.psd1
$ExampleModule.Version
$ExampleModule.Version.GetType().Name
Major  Minor  Build  Revision
-----  -----  -----  --------
1      2      3      -1

Version

CompatiblePSEditions

Esta configuración especifica las PSEditions compatibles del módulo.

Valor
Tipo de entrada System.String[]
Valores aceptados Desktop, Core
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Si el valor de esta configuración es $null, el módulo se puede importar independientemente del PSEdition de la sesión. Puede establecerlo en uno o varios de los valores aceptados.

Para obtener información sobre PSEdition, consulte:

Cuando se define esta configuración, el módulo solo se puede importar en una sesión donde el $PSEdition valor de la variable automática se incluye en la configuración.

Nota:

Dado que la variable automática se introdujo en la $PSEdition versión 5.1, las versiones anteriores de Windows PowerShell no pueden cargar un módulo que use la configuración CompatiblePSEditions .

Por ejemplo, puede importar este manifiesto de módulo en cualquier sesión:

@{
    # CompatiblePSEditions = @()
}

Con la configuración especificada, este módulo solo se puede importar en sesiones donde el valor de la $PSEdition variable automática es Core.

@{
    CompatiblePSEditions = @('Core')
}

GUID

Esta configuración especifica un identificador único para el módulo. El GUID se usa para distinguir entre módulos con el mismo nombre.

Valor
Tipo de entrada System.String
Obligatorio No
Valor si no se establece 00000000-0000-0000-0000-000000000000
Acepta caracteres comodín No

El valor de esta configuración debe convertirse en System.Guid al ejecutar Import-Module.

Precaución

Aunque no es una configuración necesaria, no especificar un GUID en un manifiesto no tiene ventajas y puede provocar colisiones de nombres para los módulos.

Puede crear un nuevo guid para usarlo en el manifiesto:

New-Guid | Select-Object -ExpandProperty Guid
8456b025-2fa5-4034-ae47-e6305f3917ca
@{
    GUID = '8456b025-2fa5-4034-ae47-e6305f3917ca'
}

Si hay otro módulo en la máquina con el mismo nombre, puede importar el que desee especificando el nombre completo del módulo:

Import-Module -FullyQualifiedName @{
    ModuleName    = 'Example'
    GUID          = '8456b025-2fa5-4034-ae47-e6305f3917ca'
    ModuleVersion = '1.0.0'
}

Autor

Esta configuración identifica al autor del módulo.

Valor
Tipo de entrada System.String
Obligatorio Galería de PowerShell
Valor si no se establece $null
Acepta caracteres comodín No

Este manifiesto declara que el autor del módulo es el equipo de experiencia del desarrollador de Contoso.

@{
    Author = 'Contoso Developer Experience Team'
}

CompanyName

Esta configuración identifica la empresa o el proveedor que creó el módulo.

Valor
Tipo de entrada System.String
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Este manifiesto declara que el módulo fue creado por Contoso, Ltd.

@{
    CompanyName = 'Contoso, Ltd.'
}

Esta configuración especifica una declaración de copyright para el módulo.

Valor
Tipo de entrada System.String
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Este manifiesto declara una declaración de copyright que reserva todos los derechos a Contoso, Ltd. a partir de 2022.

@{
    Copyright = '(c) 2022 Contoso, Ltd. All rights reserved.'
}

Descripción

Esta configuración describe el módulo en un nivel alto.

Valor
Tipo de entrada System.String
Obligatorio Galería de PowerShell
Valor si no se establece $null
Acepta caracteres comodín No

Este manifiesto incluye una breve descripción. También puede usar una cadena aquí para escribir una descripción más larga o de varias líneas.

@{
    Description = 'Example commands to show a valid module manifest'
}

PowerShellVersion

Esta configuración especifica la versión mínima de PowerShell que requiere este módulo.

Valor
Tipo de entrada System.String
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

El valor de esta configuración debe convertirse en System.Version al ejecutar Import-Module.

Si no se establece esta configuración, PowerShell no restringe la importación del módulo en función de la versión actual.

Por ejemplo, este manifiesto declara que el módulo es compatible con cada versión de PowerShell y Windows PowerShell.

@{
    # PowerShellVersion = ''
}

Con PowerShellVersion establecido 7.2en , solo puede importar el módulo en PowerShell 7.2 o superior.

@{
    PowerShellVersion = '7.2'
}

PowerShellHostName

Esta configuración especifica el nombre del programa host de PowerShell que requiere el módulo, como Host de ISE de Windows PowerShell o ConsoleHost.

Valor
Tipo de entrada System.String
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Puede encontrar el nombre del host para una sesión con la $Host.Name instrucción . Por ejemplo, puede ver que el host de una sesión remota es ServerRemoteHost en lugar de ConsoleHost:

$Host.Name
Enter-PSSession -ComputerName localhost
$Host.Name
ConsoleHost
[localhost]: PS C:\Users\username\Documents> $Host.Name
ServerRemoteHost

Este módulo se puede importar en cualquier host.

@{
    # PowerShellHostName = ''
}

Con PowerShellHostName establecido en ServerRemoteHost, solo puede importar el módulo en una sesión remota de PowerShell.

@{
    PowerShellHostName = 'ServerRemoteHost'
}

PowerShellHostVersion

Esta configuración especifica la versión mínima de un programa host de PowerShell que requiere el módulo.

Valor
Tipo de entrada System.String
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

El valor de esta configuración debe convertirse en System.Version al ejecutar Import-Module.

Precaución

Aunque esta configuración se puede usar sin la configuración powerShellHostName , aumenta las probabilidades de un comportamiento inesperado. Use solo esta configuración cuando también use la configuración PowerShellHostName .

Por ejemplo, el módulo de este manifiesto se puede importar desde cualquier sesión de PowerShell que se ejecute en ConsoleHost, independientemente de la versión del host.

@{
    PowerShellHostName = 'ConsoleHost'
    # PowerShellHostVersion = ''
}

Con PowerShellHostVersion establecido 5.1en , solo puede importar el módulo desde cualquier sesión de PowerShell que se ejecute en ConsoleHost donde la versión del host sea 5.1 o posterior.

@{
    PowerShellHostName    = 'ConsoleHost'
    PowerShellHostVersion = '5.1'
}

DotNetFrameworkVersion

Esta configuración especifica la versión mínima de Microsoft .NET Framework que requiere el módulo.

Valor
Tipo de entrada System.String
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Nota:

Esta configuración solo es válida para la edición de PowerShell Desktop, como Windows PowerShell 5.1, y solo se aplica a versiones de .NET Framework inferiores a la 4.5. Este requisito no tiene ningún efecto para las versiones más recientes de PowerShell o .NET Framework.

El valor de esta configuración debe convertirse en System.Version al ejecutar Import-Module.

Por ejemplo, este manifiesto declara que su módulo se puede importar en cualquier sesión de PowerShell o Windows PowerShell, independientemente de la versión de Microsoft .NET Framework.

@{
    # DotNetFrameworkVersion = ''
}

Con DotNetFrameworkVersion establecido 4.0en , puede importar este módulo en cualquier sesión de Windows PowerShell donde la versión más reciente disponible de Microsoft .NET Framework sea al menos 4.0. También puede importarlo en cualquier sesión de PowerShell.

@{
    DotNetFrameworkVersion = '4.0'
}

CLRVersion

Esta configuración especifica la versión mínima de Common Language Runtime (CLR) de Microsoft .NET Framework que requiere el módulo.

Valor
Tipo de entrada System.String
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Nota:

Esta configuración solo es válida para la edición de PowerShell Desktop, como Windows PowerShell 5.1, y solo se aplica a versiones de .NET Framework inferiores a la 4.5. Este requisito no tiene ningún efecto para las versiones más recientes de PowerShell o .NET Framework.

El valor de esta configuración debe convertirse en System.Version al ejecutar Import-Module.

Por ejemplo, este manifiesto declara que su módulo se puede importar en cualquier sesión de PowerShell o Windows PowerShell, independientemente de la versión de CLR de Microsoft .NET Framework.

@{
    # CLRVersion = ''
}

Con CLRVersion establecido 4.0en , puede importar este módulo en cualquier sesión de Windows PowerShell donde la versión más reciente disponible de CLR sea al menos 4.0. También puede importarlo en cualquier sesión de PowerShell.

@{
    CLRVersion = '4.0'
}

ProcessorArchitecture

Esta configuración especifica la arquitectura del procesador que requiere el módulo.

Valor
Tipo de entrada System.String
Valores aceptados None, MSIL, X86, IA64, , Amd64, Arm
Obligatorio No
Valor si no se establece None
Acepta caracteres comodín No

El valor de esta configuración debe convertirse en System.Reflection.ProcessorArchitecture al ejecutar Import-Module.

Por ejemplo, este manifiesto declara que su módulo se puede importar en cualquier sesión, independientemente de la arquitectura del procesador del sistema.

@{
    # ProcessorArchitecture = ''
}

Con ProcessorArchitecture establecido Amd64en , solo puede importar este módulo en una sesión que se ejecuta en una máquina con una arquitectura coincidente.

@{
    ProcessorArchitecture = 'Amd64'
}

RequiredModules

Esta configuración especifica los módulos que deben estar en el estado de sesión global. Si los módulos necesarios no están en el estado de sesión global, PowerShell los importa. Si los módulos necesarios no están disponibles, se produce un error en el Import-Module comando.

Valor
Tipo de entrada System.String[], System.Collections.Hashtable[]
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Las entradas de esta configuración pueden ser un nombre de módulo, una especificación de módulo completa o una ruta de acceso a un archivo de módulo.

Cuando el valor es una ruta de acceso, la ruta de acceso puede ser completa o relativa.

Cuando el valor es un nombre o especificación de módulo, PowerShell busca en el módulo especificado la psModulePath .

Una especificación de módulo es una tabla hash que tiene las siguientes claves.

  • ModuleName - Necesario. Especifica el nombre del módulo.
  • GUID - Opcional. Especifica el GUID del módulo.
  • También es necesario especificar al menos una de las tres claves siguientes. La RequiredVersion clave no se puede usar con las ModuleVersion claves o MaximumVersion . Puede definir un intervalo de versiones aceptable para el módulo especificando las ModuleVersion claves y MaximumVersion juntas.
    • ModuleVersion : especifica una versión mínima aceptable del módulo.
    • RequiredVersion : especifica una versión exacta y necesaria del módulo.
    • MaximumVersion : especifica la versión máxima aceptable del módulo.

Nota:

RequiredVersion se agregó en Windows PowerShell 5.0. MaximumVersion se agregó en Windows PowerShell 5.1.

Por ejemplo, este manifiesto declara que su módulo no requiere ningún otro módulo para su funcionalidad.

@{
    # RequiredModules = @()
}

Este manifiesto declara que requiere el módulo PSReadLine. Cuando se ejecuta Import-Module en este manifiesto, PowerShell importa la versión más reciente de PSReadLine que está disponible para la sesión. Si no hay ninguna versión disponible, la importación devuelve un error.

@{
    RequiredModules = @(
        'PSReadLine'
    )
}

Sugerencia

En PowerShell 2.0, Import-Module no importa automáticamente los módulos necesarios. Solo comprueba que los módulos necesarios están en estado de sesión global.

Este manifiesto declara que requiere una versión del módulo PSReadLine proveedor en su propia carpeta de módulos. Cuando se ejecuta Import-Module en este manifiesto, PowerShell importa el PSReadLine proveedor desde la ruta de acceso especificada.

@{
    RequiredModules = @(
        'Vendored\PSReadLine\PSReadLine.psd1'
    )
}

Este manifiesto declara que requiere específicamente la versión 2.0.0 del módulo PSReadLine. Cuando se ejecuta Import-Module en este manifiesto, PowerShell importa la versión 2.0.0 de PSReadLine si está disponible. Si no está disponible, Import-Module devuelve un error.

@{
    RequiredModules = @(
        @{
            ModuleName      = 'PSReadLine'
            RequiredVersion = '2.0.0'
        }
    )
}

Este manifiesto declara que requiere que el módulo PSReadLine se importe en la versión 2.0.0 o posterior.

@{
    RequiredModules = @(
        @{
            ModuleName    = 'PSReadLine'
            ModuleVersion = '2.0.0'
        }
    )
}

Este manifiesto declara que requiere que el módulo PSReadLine se importe en la versión 2.0.0 o inferior.

@{
    RequiredModules = @(
        @{
            ModuleName     = 'PSReadLine'
            MaximumVersion = '2.0.0'
        }
    )
}

Este manifiesto declara que requiere que el módulo PSDesiredStateConfiguration se importe en una versión igual o superior a la 2.0.0, pero no superior a 2.99.99.

@{
    RequiredModules = @(
        @{
            ModuleName     = 'PSDesiredStateConfiguration'
            ModuleVersion  = '2.0.0'
            MaximumVersion = '2.99.99'
        }
    )
}

Ensamblados obligatorios

Esta configuración especifica los archivos de ensamblado (.dll) que requiere el módulo. PowerShell carga los ensamblados especificados antes de actualizar tipos o formatos, importar módulos anidados o importar el archivo de módulo especificado en el valor de la clave RootModule .

Valor
Tipo de entrada System.String[]
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Las entradas de esta configuración pueden ser el nombre de archivo de un ensamblado o la ruta de acceso a una. Enumere todos los ensamblados necesarios, incluso si también se muestran como módulos binarios en la configuración NestedModules .

Este manifiesto requiere el example.dll ensamblado. Antes de cargar los archivos de formato o tipo especificados en este manifiesto, PowerShell carga example.dll desde la Assemblies carpeta ubicada en el mismo directorio que el manifiesto del módulo.

@{
    RequiredAssemblies = @(
        'Assemblies\Example.dll'
    )
}

ScriptsToProcess

Esta configuración especifica los archivos de script (.ps1) que se ejecutan en el estado de sesión del autor de la llamada cuando se importa el módulo. Puede usar estos scripts para preparar un entorno, igual que podría utilizar un script de inicio de sesión.

Valor
Tipo de entrada System.String[]
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Para especificar scripts que se ejecutan en el estado de sesión del módulo, use la clave NestedModules .

Al importar este manifiesto, PowerShell ejecuta en la Initialize.ps1 sesión actual.

@{
    ScriptsToProcess = @(
        'Scripts\Initialize.ps1'
    )
}

Por ejemplo, si Initialize.ps1 escribe mensajes informativos y establece la $ExampleState variable :

if ([string]::IsNullOrEmpty($ExampleState)) {
    Write-Information "Example not initialized."
    Write-Information "Initializing now..."
    $ExampleState = 'Initialized'
} else {
    Write-Information "Example already initialized."
}

Al importar el módulo, el script se ejecuta, escribiendo esos mensajes y estableciendo $ExampleState en la sesión.

$InformationPreference = 'Continue'
"Example State is: $ExampleState"
Import-Module .\example7x.psd1
"Example State is: $ExampleState"
Import-Module .\example7x.psd1 -Force
Example State is:

Example not initialized.
Initializing now...

Example State is: Initialized

Example already initialized.

TypesToProcess

Esta configuración especifica los archivos de tipo (.ps1xml) que se ejecutan cuando se importa el módulo.

Valor
Tipo de entrada System.String[]
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Al importar el módulo, PowerShell ejecuta el Update-TypeData cmdlet con los archivos especificados. Dado que los archivos de tipo no tienen ámbito, afectan a todos los estados de sesión de la sesión.

Para obtener más información sobre los archivos de tipo, consulte about_Types.ps1xml.

Por ejemplo, al importar este manifiesto, PowerShell carga los tipos especificados en el archivo desde la Example.ps1xmlTypes carpeta ubicada en el mismo directorio que el manifiesto del módulo.

@{
    TypesToProcess = @(
        'Types\Example.ps1xml'
    )
}

FormatsToProcess

Esta configuración especifica los archivos de formato (.ps1xml) que se ejecutan cuando se importa el módulo.

Valor
Tipo de entrada System.String[]
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Al importar un módulo, PowerShell ejecuta el Update-FormatData cmdlet con los archivos especificados. Dado que los archivos de formato no tienen ámbito, afectan a todos los estados de sesión de la sesión.

Para obtener más información sobre los archivos de tipo, consulte about_Format.ps1xml.

Por ejemplo, al importar este módulo, PowerShell carga los formatos especificados en el archivo desde la Example.ps1xmlFormats carpeta ubicada en el mismo directorio que el manifiesto del módulo.

@{
    FormatsToProcess = @(
        'Formats\Example.ps1xml'
    )
}

NestedModules

Esta configuración especifica los módulos de script (.psm1) y los módulos binarios (.dll) que se importan en el estado de sesión del módulo. También puede especificar archivos de script (.ps1). Los archivos de esta configuración se ejecutan en el orden en que se muestran.

Valor
Tipo de entrada System.String[], System.Collections.Hashtable[]
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Las entradas de esta configuración pueden ser un nombre de módulo, una especificación de módulo completa o una ruta de acceso a un módulo o archivo de script.

Cuando el valor es una ruta de acceso, la ruta de acceso puede ser completa o relativa.

Cuando el valor es un nombre de módulo o una especificación, PowerShell busca en psModulePath el módulo especificado.

Una especificación de módulo es una tabla hash que tiene las siguientes claves.

  • ModuleName - Necesario. Especifica el nombre del módulo.
  • GUID - Opcional. Especifica el GUID del módulo.
  • También es necesario especificar al menos una de las tres claves siguientes. La RequiredVersion clave no se puede usar con las ModuleVersion claves o MaximumVersion . Puede definir un intervalo de versiones aceptable para el módulo especificando las ModuleVersion claves y MaximumVersion juntas.
    • ModuleVersion : especifica una versión mínima aceptable del módulo.
    • RequiredVersion : especifica una versión exacta y necesaria del módulo.
    • MaximumVersion : especifica la versión máxima aceptable del módulo.

Nota:

RequiredVersion se agregó en Windows PowerShell 5.0. MaximumVersion se agregó en Windows PowerShell 5.1.

Los elementos que necesiten exportarse desde un módulo anidado deben exportarse mediante el módulo anidado mediante el Export-ModuleMember cmdlet o aparecer en una de las propiedades de exportación:

  • FunctionsToExport
  • CmdletsToExport
  • VariablesToExport
  • AliasesToExport

Los módulos anidados en el estado de sesión del módulo están disponibles para el módulo raíz, pero no los devuelve un Get-Module comando en el estado de sesión del autor de la llamada.

Los scripts (.ps1) que aparecen en esta configuración se ejecutan en el estado de sesión del módulo, no en el estado de sesión del autor de la llamada. Para ejecutar un script en el estado de sesión del autor de la llamada, enumere el nombre de archivo del script en la configuración ScriptsToProcess .

Por ejemplo, al importar este manifiesto, el Helpers.psm1 módulo se carga en el estado de sesión del módulo raíz. Los cmdlets declarados en el módulo anidado se exportan a menos que esté restringido de otro modo.

@{
    NestedModules = @(
        'Helpers\Helpers.psm1'
    )
}

FunctionsToExport

Esta configuración especifica las funciones que exporta el módulo. Puede usar esta configuración para restringir las funciones que exporta el módulo. Puede quitar funciones de la lista de funciones exportadas, pero no puede agregar funciones a la lista.

Valor
Tipo de entrada System.String[]
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín

Puede especificar entradas en esta configuración con caracteres comodín. Se exportan todas las funciones coincidentes de la lista de funciones exportadas.

Sugerencia

Para obtener rendimiento y detectabilidad, siempre debe enumerar explícitamente las funciones que desea que el módulo exporte en esta configuración sin usar caracteres comodín.

Por ejemplo, al importar un módulo con la configuración comentada, se exportan todas las funciones del módulo raíz y los módulos anidados.

@{
    # FunctionsToExport = @()
}

Este manifiesto es funcionalmente idéntico a no especificar la configuración en absoluto.

@{
    FunctionsToExport = '*'
}

Con FunctionsToExport establecido como una matriz vacía, al importar este módulo no hay funciones disponibles el módulo raíz o cualquier exportación de módulos anidados.

@{
    FunctionsToExport = @()
}

Nota:

Si crea el manifiesto del módulo con el New-ModuleManifest comando y no especifica el parámetro FunctionsToExport , el manifiesto creado tiene esta configuración especificada como una matriz vacía. A menos que edite el manifiesto, no se exporta ninguna función del módulo.

Con FunctionsToExport establecido para incluir solo la Get-Example función, al importar este módulo solo está disponible la Get-Example función, incluso si el módulo raíz exportó otras funciones o módulos anidados.

@{
    FunctionsToExport = @(
        'Get-Example'
    )
}

Con FunctionsToExport establecido con una cadena comodín, al importar este módulo cualquier función cuyo nombre termine con Example está disponible, incluso si el módulo raíz exportó otras funciones como miembros del módulo o módulos anidados.

@{
    FunctionsToExport = @(
        '*Example'
    )
}

CmdletsToExport

Esta configuración especifica los cmdlets que exporta el módulo. Puede usar esta configuración para restringir los cmdlets exportados por el módulo. Puede quitar cmdlets de la lista de miembros de módulo exportados, pero no puede agregar cmdlets a la lista.

Valor
Tipo de entrada System.String[]
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín

Puede especificar entradas en esta configuración con caracteres comodín. Se exportan todos los cmdlets coincidentes de la lista de cmdlets exportados.

Sugerencia

Para obtener rendimiento y detectabilidad, siempre debe enumerar explícitamente los cmdlets que desea que el módulo exporte en esta configuración sin usar caracteres comodín.

Por ejemplo, al importar un módulo con esta configuración comentada, se exportan todos los cmdlets del módulo raíz y los módulos anidados.

@{
    # CmdletsToExport = @()
}

Este manifiesto es funcionalmente idéntico a no especificar la configuración en absoluto.

@{
    CmdletsToExport = '*'
}

Con CmdletsToExport establecido como una matriz vacía, al importar este módulo, no hay ningún cmdlet en el módulo raíz o en ninguna exportación de módulos anidados.

@{
    CmdletsToExport = @()
}

Nota:

Si crea el manifiesto del módulo con el New-ModuleManifest comando y no especifica el parámetro CmdletsToExport , el manifiesto creado tiene esta configuración especificada como una matriz vacía. A menos que edite el manifiesto, no se exporta ningún cmdlet del módulo.

Con CmdletsToExport establecido para incluir solo el Get-Example cmdlet, al importar este módulo solo está disponible el Get-Example cmdlet, incluso si el módulo raíz exportó otros cmdlets o módulos anidados.

@{
    CmdletsToExport = @(
        'Get-Example'
    )
}

Con CmdletsToExport establecido con una cadena con caracteres comodín, al importar este módulo cualquier cmdlet cuyo nombre termine con Example está disponible, incluso si otros cmdlets se exportaron como miembros del módulo mediante el módulo raíz o los módulos anidados.

@{
    CmdletsToExport = @(
        '*Example'
    )
}

VariablesToExport

Esta configuración especifica las variables que exporta el módulo. Puede usar esta configuración para restringir las variables que exporta el módulo. Puede quitar variables de la lista de miembros del módulo exportados, pero no puede agregar variables a la lista.

Valor
Tipo de entrada System.String[]
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín

Puede especificar entradas en esta configuración con caracteres comodín. Se exportan todas las variables coincidentes de la lista de miembros del módulo exportado.

Sugerencia

Para obtener rendimiento y detectabilidad, siempre debe enumerar explícitamente las variables que desea que el módulo exporte en esta configuración sin usar caracteres comodín.

Por ejemplo, al importar un módulo con esta configuración comentada, se exportan todas las variables del módulo raíz y los módulos anidados.

@{
    # VariablesToExport = @()
}

Este manifiesto es funcionalmente idéntico a no especificar la configuración en absoluto.

@{
    VariablesToExport = '*'
}

Nota:

Si crea el manifiesto del módulo con el New-ModuleManifest comando y no especifica el parámetro VariablesToExport , el manifiesto creado tiene esta configuración especificada como '*'. A menos que edite el manifiesto, se exportan todas las variables del módulo.

Con VariablesToExport establecido como una matriz vacía, al importar este módulo no hay ninguna variable disponible el módulo raíz o cualquier exportación de módulos anidados.

@{
    VariablesToExport = @()
}

Con VariablesToExport establecido para incluir solo la SomeExample variable, al importar este módulo solo está disponible la $SomeExample variable, aunque el módulo raíz haya exportado otras variables o módulos anidados.

@{
    VariablesToExport = @(
        'SomeExample'
    )
}

Con VariablesToExport establecido con una cadena con caracteres comodín, al importar este módulo cualquier variable cuyo nombre termine con Example está disponible, incluso si el módulo raíz exportó otras variables como miembros del módulo o módulos anidados.

@{
    VariablesToExport = @(
        '*Example'
    )
}

DscResourcesToExport

Esta configuración especifica los recursos de DSC que exporta el módulo. Puede usar esta configuración para restringir los recursos de DSC basados en clases que exporta el módulo. Puede quitar recursos de DSC de la lista de miembros del módulo exportados, pero no puede agregar recursos de DSC a la lista.

Valor
Tipo de entrada System.String[]
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín

Puede especificar entradas en esta configuración con caracteres comodín. Se exportan todos los recursos de DSC basados en clases coincidentes en el módulo.

Sugerencia

Para la detectabilidad, siempre debe enumerar explícitamente todos los recursos de DSC que exporta el módulo.

Para obtener más información sobre la creación y el uso de recursos de DSC, consulte la documentación de DSC.

Este manifiesto exporta todos los recursos de DSC basados en clases y basados en MOF definidos en el módulo raíz y todos los módulos anidados.

@{
    # DscResourcesToExport = @()
}

Este manifiesto exporta todos los recursos de DSC basados en MOF definidos en el módulo raíz y todos los módulos anidados, pero solo un recurso de DSC basado en clases, ExampleClassResource.

@{
    DscResourcesToExport = @(
        'ExampleClassResource'
    )
}

Este manifiesto exporta todos los recursos de DSC que incluye. Incluso si el recurso basado en MOF no aparece en la lista, el módulo todavía lo exportaría.

@{
    DscResourcesToExport = @(
        'ExampleClassResource'
        'ExampleMofResourceFirst'
    )
}

ModuleList

Esta configuración es una lista de inventario informativo de los módulos incluidos en este. Esta lista no afecta al comportamiento del módulo.

Valor
Tipo de entrada System.String[], System.Collections.Hashtable[]
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Las entradas de esta configuración pueden ser un nombre de módulo, una especificación de módulo completa o una ruta de acceso a un módulo o archivo de script.

Cuando el valor es una ruta de acceso, la ruta de acceso puede ser completa o relativa.

Cuando el valor es un nombre de módulo o una especificación, PowerShell busca en psModulePath el módulo especificado.

Una especificación de módulo es una tabla hash que tiene las siguientes claves.

  • ModuleName - Necesario. Especifica el nombre del módulo.
  • GUID - Opcional. Especifica el GUID del módulo.
  • También es necesario especificar al menos una de las tres claves siguientes. La RequiredVersion clave no se puede usar con las ModuleVersion claves o MaximumVersion . Puede definir un intervalo de versiones aceptable para el módulo especificando las ModuleVersion claves y MaximumVersion juntas.
    • ModuleVersion : especifica una versión mínima aceptable del módulo.
    • RequiredVersion : especifica una versión exacta y necesaria del módulo.
    • MaximumVersion : especifica la versión máxima aceptable del módulo.

Nota:

RequiredVersion se agregó en Windows PowerShell 5.0. MaximumVersion se agregó en Windows PowerShell 5.1.

Este manifiesto no proporciona una lista informativa de los módulos que incluye. Puede o no tener módulos. Aunque no se especifica esta configuración, los módulos enumerados en la configuración RootModule, ScriptsToProcess o NestedModules se comportan normalmente.

@{
    # ModuleList = @()
}

Este manifiesto declara que los únicos módulos que incluye son Example.psm1 y los submódulos First.psm1 y Second.psm1 en la Submodules carpeta .

@{
    ModuleList = @(
        'Example.psm1'
        'Submodules\First.psm1'
        'Submodules\Second.psm1'
    )
}

Lista de archivos

Esta configuración es una lista de inventario informativo de los archivos incluidos en este módulo. Esta lista no afecta al comportamiento del módulo.

Valor
Tipo de entrada System.String[]
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín

Las entradas de esta configuración deben ser la ruta de acceso relativa a un archivo de la carpeta que contiene el manifiesto del módulo.

Cuando un usuario llama Get-Module a en un manifiesto con esta configuración definida, la propiedad FileList contiene la ruta de acceso completa a estos archivos, uniendo la ruta de acceso del módulo con la ruta de acceso relativa de cada entrada.

Este manifiesto no incluye una lista de sus archivos.

@{
    # FileList = @()
}

Este manifiesto declara que los únicos archivos que incluye se muestran en esta configuración.

@{
    FileList = @(
        'Example.psd1'
        'Example.psm1'
        'Assemblies\Example.dll'
        'Scripts\Initialize.ps1'
        'Submodules\First.psm1'
        'Submodules\Second.psm1'
    )
}

PrivateData

Esta configuración define una tabla hash de datos que está disponible para los comandos o funciones del ámbito del módulo raíz.

Valor
Tipo de entrada System.Collections.Hashtable
Obligatorio Galería de PowerShell, Crescendo
Valor si no se establece $null
Acepta caracteres comodín No

Al exportar un manifiesto de Crescendo para crear un nuevo módulo, Export-CrescendoModule agrega dos claves a PrivateData.

  • CrescendoGenerated : marca de tiempo cuando se exportó el módulo
  • CrescendoVersion : la versión de Crescendo usada para exportar el módulo

Puede agregar sus propias claves para almacenar los metadatos de los que desea realizar el seguimiento. Las claves agregadas a esta configuración están disponibles para funciones y cmdlets en el módulo raíz mediante $MyInvocation.MyCommand.Module.PrivateData. La tabla hash no está disponible en el propio ámbito del módulo, solo en los cmdlets que defina en el módulo.

Por ejemplo, este manifiesto define la clave PublishedDate en PrivateData.

@{
    PrivateData = @{
        PublishedDate = '2022-06-01'
    }
}

Los cmdlets del módulo pueden acceder a este valor con la $MyInvocation variable .

Function Get-Stale {
    [CmdletBinding()]
    param()

    $PublishedDate = $MyInvocation.MyCommand.Module.PrivateData.PublishedDate
    $CurrentDate = Get-Date

    try {
        $PublishedDate = Get-Date -Date $PublishedDate -ErrorAction Stop
    } catch {
        # The date was set in the manifest, set to an invalid value, or
        # the script module was directly imported without the manifest.
        Throw "Unable to determine published date. Check the module manifest."
    }

    if ($CurrentDate -gt $PublishedDate.AddDays(30)) {
        Write-Warning "This module version was published more than 30 days ago."
    } else {
        $TimeUntilStale = $PublishedDate.AddDays(30) - $CurrentDate
        "This module will be stale in $($TimeUntilStale.Days) days"
    }
}

Una vez importado el módulo, la función usa el valor de PrivateData para determinar cuándo se publicó el módulo.

Get-Stale -TestDate '2022-06-15'
Get-Stale -TestDate '2022-08-01'
This module will be stale in 16 days

WARNING: This module version was published more than 30 days ago.

PrivateData.PSData

La propiedad secundaria PSData define una tabla hash de valores que admiten escenarios de extensión específicos.

Valor
Tipo de entrada System.Collections.Hashtable
Obligatorio Galería de PowerShell, características experimentales, módulos crescendo
Valor si no se establece $null
Acepta caracteres comodín No

La propiedad secundaria PSData se usa para los escenarios siguientes:

  • Galería de PowerShell: al crear un manifiesto de módulo mediante New-ModuleManifest el cmdlet rellena previamente la tabla hash PSData con claves de marcador de posición necesarias al publicar el módulo en el Galería de PowerShell. Para obtener más información sobre los manifiestos de módulo y la publicación en la Galería de PowerShell, consulte Valores de manifiesto del paquete que afectan a la interfaz de usuario de Galería de PowerShell.
  • Características experimentales: los metadatos sobre una característica experimental se conservan en la propiedad ExperimentalFeatures de PSData. La propiedad ExperimentalFeatures es una matriz de tablas hash que contienen el nombre y la descripción de la característica. Para obtener más información, consulte Declaración de características experimentales en módulos.
  • Módulos de Crescendo: al exportar un manifiesto de Crescendo para crear un nuevo módulo, Export-CrescendoModule agrega el valor CrescendoBuilt a la propiedad PSData.Tags . Puede usar esta etiqueta para buscar módulos en la Galería de PowerShell que se crearon mediante Crescendo. Para obtener más información, vea Export-CrescendoModule.

HelpInfoURI

Esta configuración especifica la dirección de Internet del archivo XML HelpInfo para el módulo.

Valor
Tipo de entrada System.String
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

El valor de esta configuración debe ser un identificador uniforme de recursos (URI) que comience por http o https.

El archivo XML HelpInfo admite la característica ayuda actualizable que se introdujo en PowerShell 3.0. Contiene información sobre la ubicación de los archivos de ayuda descargable del módulo y los números de versión de los archivos de ayuda más recientes para cada configuración regional compatible.

Para obtener información sobre la Ayuda actualizable, consulte about_Updatable_Help. Para obtener información sobre el archivo XML HelpInfo, vea Compatibilidad con la Ayuda actualizable.

Por ejemplo, este módulo admite ayuda actualizable.

@{
    HelpInfoUri = 'http://https://go.microsoft.com/fwlink/?LinkID=603'
}

DefaultCommandPrefix

Esta configuración especifica un prefijo que se antepone a los nombres de todos los comandos del módulo cuando se importan en una sesión. Los prefijos ayudan a evitar conflictos de nombres de comando en la sesión de un usuario.

Valor
Tipo de entrada System.String
Obligatorio No
Valor si no se establece $null
Acepta caracteres comodín No

Los usuarios del módulo pueden invalidar este prefijo especificando el parámetro Prefix del Import-Module cmdlet.

Esta configuración se introdujo en PowerShell 3.0.

Cuando se importa este manifiesto, los cmdlets importados desde este módulo se han Example antepuesto al nombre en su nombre. Por ejemplo, Get-Item se importa como Get-ExampleItem.

@{
    DefaultCommandPrefix = 'Example'
}

Consulte también