Leer en inglés

Compartir a través de


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 la 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:

PowerShell
@{
# 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 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, vea 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: 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 la Galería de PowerShell. Si es No, no es necesario para ninguno. Si es PowerShell Gallery, solo es necesario para publicar en la Galería de PowerShell.
  • Valor si no se establece: el valor que tiene este valor 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
de tipo de entrada System.String
requerido 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 de 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 = Manifest). Cuando se define RootModule, el tipo del módulo se determina a partir de la extensión de archivo usada:

  • un archivo .ps1 o .psm1 hace que el tipo de módulo Script
  • un archivo .psd1 hace que el tipo de módulo manifiesto
  • un archivo .dll hace que el tipo de módulo Binary
  • un archivo .cdxml hace que el tipo de módulo CIM
  • un archivo .xaml 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 binary, scripty tipos de módulo cim. Para obtener más información, consulte consideraciones de creación de módulos de PowerShell

Por ejemplo, el ModuleType de de este módulo es manifiesto. 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.

PowerShell
@{
    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 cuando se ejecuta Import-Module.

Valor
de tipo de entrada System.String
requerido
Valor si no se establece Ninguno
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'.

PowerShell
@{
    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:

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

Version

CompatiblePSEditions

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

Valor
de tipo de entrada System.String[]
valores aceptados Desktop, Core
requerido 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 de 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 en la que el $PSEdition valor de la variable automática se incluye en la configuración.

Nota

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

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

PowerShell
@{
    # CompatiblePSEditions = @()
}

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

PowerShell
@{
    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
de tipo de entrada System.String
requerido 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 una GUID de 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:

PowerShell
New-Guid | Select-Object -ExpandProperty Guid
Output
8456b025-2fa5-4034-ae47-e6305f3917ca
PowerShell
@{
    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:

PowerShell
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
de tipo de entrada System.String
requerido 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.

PowerShell
@{
    Author = 'Contoso Developer Experience Team'
}

CompanyName

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

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

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

PowerShell
@{
    CompanyName = 'Contoso, Ltd.'
}

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

Valor
de tipo de entrada System.String
requerido 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.

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

Descripción

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

Valor
de tipo de entrada System.String
requerido 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.

PowerShell
@{
    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
de tipo de entrada System.String
requerido 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.

PowerShell
@{
    # PowerShellVersion = ''
}

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

PowerShell
@{
    PowerShellVersion = '7.2'
}

PowerShellHostName

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

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

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

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

Este módulo se puede importar en cualquier host.

PowerShell
@{
    # PowerShellHostName = ''
}

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

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
de tipo de entrada System.String
requerido 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 de 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.

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

Con el PowerShellHostVersion establecido en 5.1, 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 superior.

PowerShell
@{
    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
de tipo de entrada System.String
requerido 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.

PowerShell
@{
    # DotNetFrameworkVersion = ''
}

Con DotNetFrameworkVersion establecido en 4.0, 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.

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
de tipo de entrada System.String
requerido 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.

PowerShell
@{
    # CLRVersion = ''
}

Con CLRVersion establecido en 4.0, 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.

PowerShell
@{
    CLRVersion = '4.0'
}

ProcessorArchitecture

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

Valor
de tipo de entrada System.String
valores aceptados None, MSIL, X86, IA64, Amd64, Arm
requerido 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.

PowerShell
@{
    # ProcessorArchitecture = ''
}

Con ProcessorArchitecture establecido en Amd64, solo puede importar este módulo en una sesión que se ejecuta en un equipo con una arquitectura coincidente.

PowerShell
@{
    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 comando Import-Module.

Valor
de tipo de entrada System.String[], System.Collections.Hashtable[]
requerido 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 psModulePath para el módulo especificado.

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

  • ModuleName - obligatorio. Especifica el nombre del módulo.
  • GUID - opcional. Especifica el GUID del módulo.
  • También es obligatorio especificar al menos una de las tres claves siguientes. La clave RequiredVersion no se puede usar con las claves ModuleVersion o MaximumVersion. Puede definir un intervalo de versiones aceptable para el módulo especificando las claves ModuleVersion 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.

PowerShell
@{
    # RequiredModules = @()
}

Este manifiesto declara que requiere el módulo PSReadLine. Al ejecutar 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.

PowerShell
@{
    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. Al ejecutar Import-Module en este manifiesto, PowerShell importa el PSReadLine proveedor desde la ruta de acceso especificada.

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

Este manifiesto declara que requiere específicamente la versión 2.0.0 del módulo PSReadLine. Al ejecutar 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.

PowerShell
@{
    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.

PowerShell
@{
    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.

PowerShell
@{
    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.

PowerShell
@{
    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 de RootModule.

Valor
de tipo de entrada System.String[]
requerido 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 de NestedModules.

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

PowerShell
@{
    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, al igual que puede usar un script de inicio de sesión.

Valor
de tipo de entrada System.String[]
requerido 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 el Initialize.ps1 en la sesión actual.

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

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

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

PowerShell
$InformationPreference = 'Continue'
"Example State is: $ExampleState"
Import-Module .\example7x.psd1
"Example State is: $ExampleState"
Import-Module .\example7x.psd1 -Force
Output
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
de tipo de entrada System.String[]
requerido No
Valor si no se establece $null
Acepta caracteres comodín No

Al importar el módulo, PowerShell ejecuta el cmdlet Update-TypeData 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, vea about_Types.ps1xml

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

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

FormatsToProcess

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

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

Al importar un módulo, PowerShell ejecuta el cmdlet Update-FormatData 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, vea about_Format.ps1xml

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

PowerShell
@{
    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
de tipo de entrada System.String[], System.Collections.Hashtable[]
requerido 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 o especificación del módulo, PowerShell busca en el psModulePath para el módulo especificado.

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

  • ModuleName - obligatorio. Especifica el nombre del módulo.
  • GUID - opcional. Especifica el GUID del módulo.
  • También es obligatorio especificar al menos una de las tres claves siguientes. La clave RequiredVersion no se puede usar con las claves ModuleVersion o MaximumVersion. Puede definir un intervalo de versiones aceptable para el módulo especificando las claves ModuleVersion 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 cmdlet Export-ModuleMember o aparecer en una de las propiedades de exportación:

  • FunctionsToExport
  • CmdletsToExport
  • VariablesToExportar
  • 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 comando Get-Module 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 de ScriptsToProcess.

Por ejemplo, al importar este manifiesto, el módulo Helpers.psm1 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.

PowerShell
@{
    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
de tipo de entrada System.String[]
requerido 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.

PowerShell
@{
    # FunctionsToExport = @()
}

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

PowerShell
@{
    FunctionsToExport = '*'
}

Con FunctionsToExport establecer 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.

PowerShell
@{
    FunctionsToExport = @()
}

Nota

Si crea el manifiesto del módulo con el comando New-ModuleManifest 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 función Get-Example, al importar este módulo solo está disponible la función Get-Example, incluso si el módulo raíz exportó otras funciones o módulos anidados.

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

Con FunctionsToExport establecer con una cadena con caracteres 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.

PowerShell
@{
    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
de tipo de entrada System.String[]
requerido 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.

PowerShell
@{
    # CmdletsToExport = @()
}

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

PowerShell
@{
    CmdletsToExport = '*'
}

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

PowerShell
@{
    CmdletsToExport = @()
}

Nota

Si crea el manifiesto del módulo con el comando New-ModuleManifest 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 cmdlet Get-Example, cuando se importa este módulo solo está disponible el cmdlet Get-Example, incluso si el módulo raíz exportó otros cmdlets o módulos anidados.

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

Con CmdletsToExport establecer 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 por el módulo raíz o los módulos anidados.

PowerShell
@{
    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
de tipo de entrada System.String[]
requerido 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.

PowerShell
@{
    # VariablesToExport = @()
}

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

PowerShell
@{
    VariablesToExport = '*'
}

Nota

Si crea el manifiesto del módulo con el comando New-ModuleManifest 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 establecer como una matriz vacía, al importar este módulo no hay variables disponibles el módulo raíz ni ninguna exportación de módulos anidados.

PowerShell
@{
    VariablesToExport = @()
}

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

PowerShell
@{
    VariablesToExport = @(
        'SomeExample'
    )
}

Con VariablesToExport establecer con una cadena 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.

PowerShell
@{
    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
de tipo de entrada System.String[]
requerido 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 para 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.

PowerShell
@{
    # DscResourcesToExport = @()
}

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

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

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

PowerShell
@{
    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
de tipo de entrada System.String[], System.Collections.Hashtable[]
requerido 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 o especificación del módulo, PowerShell busca en el psModulePath para el módulo especificado.

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

  • ModuleName - obligatorio. Especifica el nombre del módulo.
  • GUID - opcional. Especifica el GUID del módulo.
  • También es obligatorio especificar al menos una de las tres claves siguientes. La clave RequiredVersion no se puede usar con las claves ModuleVersion o MaximumVersion. Puede definir un intervalo de versiones aceptable para el módulo especificando las claves ModuleVersion 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 RootModule, ScriptsToProcesso configuración de NestedModules se comportan normalmente.

PowerShell
@{
    # 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 carpeta Submodules.

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

FileList

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
de tipo de entrada System.String[]
requerido 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 a Get-Module 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.

PowerShell
@{
    # FileList = @()
}

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

PowerShell
@{
    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
de tipo de entrada System.Collections.Hashtable
requerido 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.

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

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

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

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

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

PrivateData.PSData

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

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

La propiedad PSData secundaria 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 PSData tabla hash con claves de posición que son necesarias al publicar el módulo en la 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 la Galería de PowerShell.
  • Características experimentales: los metadatos sobre una característica experimental se conservan en la propiedad experimentalFeatures de 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 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 con 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
de tipo de entrada System.String
requerido 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 descargables para el 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 ayuda actualizable.

Por ejemplo, este módulo admite ayuda actualizable.

PowerShell
@{
    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
de tipo de entrada System.String
requerido 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 prefijo del cmdlet Import-Module.

Esta configuración se introdujo en PowerShell 3.0.

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

PowerShell
@{
    DefaultCommandPrefix = 'Example'
}

Consulte también