Partilhar via


Como escrever um manifesto do módulo PowerShell

Depois de escrever o módulo do PowerShell, você pode adicionar um manifesto de módulo opcional que inclui informações sobre o módulo. Por exemplo, você pode descrever o autor, especificar arquivos no módulo (como módulos aninhados), executar scripts para personalizar o ambiente do usuário, carregar arquivos de tipo e formatação, definir requisitos do sistema e limitar os membros que o módulo exporta.

Criando um manifesto de módulo

Um manifesto de módulo é um arquivo de dados do PowerShell (.psd1) que descreve o conteúdo de um módulo e determina como um módulo é processado. O arquivo de manifesto é um arquivo de texto que contém uma tabela de hash de chaves e valores. Você vincula um arquivo de manifesto a um módulo nomeando o manifesto da mesma forma que o módulo e armazenando o manifesto no diretório raiz do módulo.

Para módulos simples que contêm apenas um único .psm1 ou montagem binária, um manifesto de módulo é opcional. Mas, a recomendação é usar um manifesto de módulo sempre que possível, pois eles são úteis para ajudá-lo a organizar seu código e manter as informações de controle de versão. Além disso, um manifesto de módulo é necessário para exportar um assembly instalado no Global Assembly Cache. Um manifesto de módulo também é necessário para módulos que suportam o recurso Ajuda atualizável. A Ajuda atualizável usa a chave HelpInfoUri no manifesto do módulo para localizar o arquivo de informações da Ajuda (XML HelpInfo) que contém o local dos arquivos de ajuda atualizados para o módulo. Para obter mais informações sobre a Ajuda Atualizável, consulte Suporte à Ajuda Atualizável.

Para criar e usar um manifesto de módulo

  1. A prática recomendada para criar um manifesto de módulo é usar o cmdlet New-ModuleManifest. Você pode usar parâmetros para especificar uma ou mais chaves e valores padrão do manifesto. O único requisito é nomear o arquivo. New-ModuleManifest cria um manifesto de módulo com seus valores especificados e inclui as chaves restantes e seus valores padrão. Se você precisar criar vários módulos, use New-ModuleManifest para criar um modelo de manifesto de módulo que pode ser modificado para seus diferentes módulos. Para obter um exemplo de um manifesto de módulo padrão, consulte o Exemplo de manifesto do módulo.

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

    Uma alternativa é criar manualmente a tabela de hash do manifesto do módulo usando as informações mínimas necessárias, o ModuleVersion. Salve o arquivo com o mesmo nome do módulo e use a extensão de arquivo .psd1. Em seguida, você pode editar o arquivo e adicionar as chaves e valores apropriados.

  2. Adicione quaisquer elementos adicionais desejados no arquivo de manifesto.

    Para editar o arquivo de manifesto, use qualquer editor de texto de sua preferência. Mas, o arquivo de manifesto é um arquivo de script que contém código, portanto, você pode querer editá-lo em um ambiente de script ou desenvolvimento, como o Visual Studio Code. Todos os elementos de um arquivo de manifesto são opcionais, exceto o número de ModuleVersion.

    Para obter descrições das chaves e valores que você pode incluir em um manifesto de módulo, consulte a tabela Elementos de manifesto do módulo. Para obter mais informações, consulte as descrições dos parâmetros no cmdlet New-ModuleManifest.

  3. Para resolver quaisquer cenários que possam não ser cobertos pelos elementos de manifesto do módulo base, você tem a opção de adicionar código adicional ao manifesto do módulo.

    Para questões de segurança, o PowerShell executa apenas um pequeno subconjunto das operações disponíveis em um arquivo de manifesto do módulo. Geralmente, você pode usar a instrução if, operadores aritméticos e de comparação e os tipos de dados básicos do PowerShell.

  4. Depois de criar o manifesto do módulo, você pode testá-lo para confirmar se todos os caminhos descritos no manifesto estão corretos. Para testar o manifesto do módulo, use Test-ModuleManifest.

    Test-ModuleManifest myModuleName.psd1

  5. Certifique-se de que o manifesto do módulo está localizado no nível superior do diretório que contém o módulo.

    Quando você copia o módulo para um sistema e o importa, o PowerShell usa o manifesto do módulo para importar o módulo.

  6. Opcionalmente, você pode testar diretamente o manifesto do módulo com uma chamada para Import-Module fornecendo o próprio manifesto.

    Import-Module .\myModuleName.psd1

Elementos de manifesto do módulo

A tabela a seguir descreve os elementos que você pode incluir em um manifesto de módulo. Para obter informações mais detalhadas, consulte about_Module_Manifests.

Elemento Predefinido Descrição
RootModule
Tipo: String
<empty string> Módulo de script ou arquivo de módulo binário associado a este manifesto. As versões anteriores do PowerShell chamavam esse elemento de ModuleToProcess.
Os tipos possíveis para o módulo raiz podem estar vazios, o que cria um módulo de de manifesto, o nome de um módulo de script (.psm1) ou o nome de um módulo binário (.exe ou .dll). Colocar o nome de um manifesto de módulo (.psd1) ou um arquivo de script (.ps1) neste elemento causa um erro.
Exemplo: RootModule = 'ScriptModule.psm1'
ModuleVersion
Tipo: Version
'0.0.1' Número da versão deste módulo. Se um valor não for especificado, New-ModuleManifest usará o padrão. A cadeia de caracteres deve ser capaz de converter para o tipo Version por exemplo, #.#.#.#. Import-Module carrega o primeiro módulo que encontra no $PSModulePath que corresponde ao nome e tem pelo menos um ModuleVersion, como o parâmetro MinimumVersion. Para importar uma versão específica, use o parâmetro Import-Module do cmdlet .
Exemplo: ModuleVersion = '1.0'
GUID
Tipo: GUID
'<GUID>' ID usado para identificar exclusivamente este módulo. Se um valor não for especificado, New-ModuleManifest gera automaticamente o valor. No momento, não é possível importar um módulo GUID.
Exemplo: GUID = 'cfc45206-1e49-459d-a8ad-5b571ef94857'
Autor
Tipo: String
'<Current user>' Autor deste módulo. Se um valor não for especificado, New-ModuleManifest usará o usuário atual.
Exemplo: Author = 'AuthorNameHere'
Nome da Empresa
Tipo: String
'Unknown' Empresa ou fornecedor deste módulo. Se um valor não for especificado, New-ModuleManifest usará o padrão.
Exemplo: CompanyName = 'Fabrikam'
Direitos de
Tipo: String
'(c) <Author>. All rights reserved.' Declaração de direitos autorais para este módulo. Se um valor não for especificado, New-ModuleManifest usará o padrão com o usuário atual como o <Author>. Para especificar um autor, use o parâmetro Author.
Exemplo: Copyright = '2019 AuthorName. All rights reserved.'
Descrição
Tipo: String
<empty string> Descrição da funcionalidade fornecida por este módulo.
Exemplo: Description = 'This is the module's description.'
PowerShellVersion
Tipo: Version
<empty string> Versão mínima do mecanismo do PowerShell exigida por este módulo. Os valores válidos são 1.0, 2.0, 3.0, 4.0, 5.0, 5.1, 6.0, 6.1, 6.2, 7.0 e 7.1.
Exemplo: PowerShellVersion = '5.0'
PowerShellHostName
Tipo: String
<empty string> Nome do host do PowerShell exigido por este módulo. Esse nome é fornecido pelo PowerShell. Para encontrar o nome de um programa host, no programa, digite: $Host.Name.
Exemplo: PowerShellHostName = 'ConsoleHost'
PowerShellHostVersion
Tipo: Version
<empty string> Versão mínima do host PowerShell exigida por este módulo.
Exemplo: PowerShellHostVersion = '2.0'
DotNetFrameworkVersion
Tipo: Version
<empty string> Versão mínima do Microsoft .NET Framework exigida por este módulo. Esse pré-requisito é válido apenas para a edição PowerShell Desktop, como o Windows PowerShell 5.1, e só se aplica a versões do .NET Framework inferiores a 4.5.
Exemplo: DotNetFrameworkVersion = '3.5'
CLRVersion
Tipo: Version
<empty string> Versão mínima do Common Language Runtime (CLR) exigida por este módulo. Esse pré-requisito é válido apenas para a edição PowerShell Desktop, como o Windows PowerShell 5.1, e só se aplica a versões do .NET Framework inferiores a 4.5.
Exemplo: CLRVersion = '3.5'
ProcessorArchitecture
Tipo: ProcessorArchitecture
<empty string> Arquitetura do processador (Nenhum, X86, Amd64) exigida por este módulo. Os valores válidos são x86, AMD64, Arm, IA64, MSIL e Nenhum (desconhecido ou não especificado).
Exemplo: ProcessorArchitecture = 'x86'
RequiredModules
Tipo: Object[]
@() Módulos que devem ser importados para o ambiente global antes de importar este módulo. Isso carrega todos os módulos listados, a menos que eles já tenham sido carregados. Por exemplo, alguns módulos já podem ser carregados por um módulo diferente. É possível especificar uma versão específica para carregar usando RequiredVersion em vez de ModuleVersion. Quando ModuleVersion é usado, ele carregará a versão mais recente disponível com um mínimo da versão especificada. Você pode combinar cadeias de caracteres e tabelas de hash no valor do parâmetro.
Exemplo: RequiredModules = @("MyModule", @{ModuleName="MyDependentModule"; ModuleVersion="2.0"; GUID="cfc45206-1e49-459d-a8ad-5b571ef94857"})
Exemplo: RequiredModules = @("MyModule", @{ModuleName="MyDependentModule"; RequiredVersion="1.5"; GUID="cfc45206-1e49-459d-a8ad-5b571ef94857"})
RequiredAssemblies
Tipo: String[]
@() Montagens que devem ser carregadas antes de importar este módulo. Especifica os nomes de arquivo de assembly (.dll) que o módulo requer.
O PowerShell carrega os assemblies especificados antes de atualizar tipos ou formatos, importar módulos aninhados ou importar o arquivo de módulo especificado no valor da chave RootModule. Use este parâmetro para listar todos os assemblies que o módulo requer.
Exemplo: RequiredAssemblies = @("assembly1.dll", "assembly2.dll", "assembly3.dll")
ScriptsToProcess
Tipo: String[]
@() Arquivos de script (.ps1) que são executados no estado de sessão do chamador quando o módulo é importado. Pode ser o estado da sessão global ou, para módulos aninhados, o estado da sessão de outro módulo. Você pode usar esses scripts para preparar um ambiente da mesma forma que pode usar um script de log-in.
Esses scripts são executados antes que qualquer um dos módulos listados no manifesto seja carregado.
Exemplo: ScriptsToProcess = @("script1.ps1", "script2.ps1", "script3.ps1")
TypesToProcess
Tipo: String[]
@() Digite arquivos (.ps1xml) a serem carregados ao importar este módulo.
Exemplo: TypesToProcess = @("type1.ps1xml", "type2.ps1xml", "type3.ps1xml")
FormatsToProcess
Tipo: String[]
@() Formatar arquivos (.ps1xml) a serem carregados ao importar este módulo.
Exemplo: FormatsToProcess = @("format1.ps1xml", "format2.ps1xml", "format3.ps1xml")
NestedModules
Tipo: Object[]
@() Módulos a serem importados como módulos aninhados do módulo especificado em RootModule (alias:ModuleToProcess).
Adicionar um nome de módulo a esse elemento é semelhante a chamar Import-Module de dentro do código de script ou assembly. A principal diferença ao usar um arquivo de manifesto é que é mais fácil ver o que você está carregando. E, se um módulo falhar ao carregar, você ainda não terá carregado o módulo real.
Além de outros módulos, você também pode carregar arquivos de script (.ps1) aqui. Esses arquivos serão executados no contexto do módulo raiz. Isso é equivalente a dot sourcing o script em seu módulo raiz.
Exemplo: NestedModules = @("script.ps1", @{ModuleName="MyModule"; ModuleVersion="1.0.0.0"; GUID="50cdb55f-5ab7-489f-9e94-4ec21ff51e59"})
FunçõesparaExportar
Tipo: String[]
@() Especifica as funções a serem exportadas deste módulo, para melhor desempenho, não use curingas e não exclua a entrada, use uma matriz vazia se não houver funções para exportar. Por padrão, nenhuma função é exportada. Você pode usar essa chave para listar as funções que são exportadas pelo módulo.
O módulo exporta as funções para o estado da sessão do chamador. O estado da sessão do chamador pode ser o estado da sessão global ou, para módulos aninhados, o estado da sessão de outro módulo. Ao encadear módulos aninhados, todas as funções exportadas por um módulo aninhado serão exportadas para o estado da sessão global, a menos que um módulo na cadeia restrinja a função usando a chave FunctionsToExport.
Se o manifesto exportar aliases para as funções, essa chave poderá remover funções cujos aliases estão listados na chave AliasesToExport do, mas essa chave não poderá adicionar aliases de função à lista.
Exemplo: FunctionsToExport = @("function1", "function2", "function3")
CmdletsToExport
Tipo: String[]
@() Especifica os cmdlets a serem exportados deste módulo, para melhor desempenho, não use curingas e não exclua a entrada, use uma matriz vazia se não houver cmdlets para exportar. Por padrão, nenhum cmdlet é exportado. Você pode usar essa chave para listar os cmdlets que são exportados pelo módulo.
O estado da sessão do chamador pode ser o estado da sessão global ou, para módulos aninhados, o estado da sessão de outro módulo. Quando você estiver encadeando módulos aninhados, todos os cmdlets exportados por um módulo aninhado serão exportados para o estado da sessão global, a menos que um módulo na cadeia restrinja o cmdlet usando a chave de CmdletsToExport.
Se o manifesto exportar aliases para os cmdlets, essa chave poderá remover cmdlets cujos aliases estejam listados na chave AliasesToExport, mas essa chave não poderá adicionar aliases de cmdlet à lista.
Exemplo: CmdletsToExport = @("Get-MyCmdlet", "Set-MyCmdlet", "Test-MyCmdlet")
VariáveisParaExportar
Tipo: String[]
'*' Especifica as variáveis que o módulo exporta para o estado da sessão do chamador. Caracteres coringa são permitidos. Por padrão, todas as variáveis ('*') são exportadas. Você pode usar essa chave para restringir as variáveis que são exportadas pelo módulo.
O estado da sessão do chamador pode ser o estado da sessão global ou, para módulos aninhados, o estado da sessão de outro módulo. Quando você estiver encadeando módulos aninhados, todas as variáveis exportadas por um módulo aninhado serão exportadas para o estado da sessão global, a menos que um módulo na cadeia restrinja a variável usando a chave VariablesToExport.
Se o manifesto também exportar aliases para as variáveis, essa chave poderá remover variáveis cujos aliases estão listados na chave AliasesToExport, mas essa chave não poderá adicionar aliases variáveis à lista.
Exemplo: VariablesToExport = @('$MyVariable1', '$MyVariable2', '$MyVariable3')
AliasesToExport
Tipo: String[]
@() Especifica os aliases a serem exportados deste módulo, para melhor desempenho, não use curingas e não exclua a entrada, use uma matriz vazia se não houver aliases para exportar. Por padrão, nenhum aliases é exportado. Você pode usar essa chave para listar os aliases que são exportados pelo módulo.
O módulo exporta os aliases para o estado da sessão do chamador. O estado da sessão do chamador pode ser o estado da sessão global ou, para módulos aninhados, o estado da sessão de outro módulo. Quando você estiver encadeando módulos aninhados, todos os aliases exportados por um módulo aninhado serão exportados para o estado da sessão global, a menos que um módulo na cadeia restrinja o alias usando a chave AliasesToExport.
Exemplo: AliasesToExport = @("MyAlias1", "MyAlias2", "MyAlias3")
DscResourcesToExport
Tipo: String[]
@() Especifica os recursos DSC a serem exportados deste módulo. Curingas são permitidos.
Exemplo: DscResourcesToExport = @("DscResource1", "DscResource2", "DscResource3")
ModuleList
Tipo: Object[]
@() Especifica todos os módulos que são empacotados com este módulo. Esses módulos podem ser inseridos por nome, usando uma cadeia de caracteres separada por vírgulas, ou como uma tabela de hash com ModuleName e chaves de GUID. A tabela de hash também pode ter uma chave opcional ModuleVersion. A chave ModuleList foi projetada para atuar como um inventário de módulos. Estes módulos não são processados automaticamente.
Exemplo: ModuleList = @("SampleModule", "MyModule", @{ModuleName="MyModule"; ModuleVersion="1.0.0.0"; GUID="50cdb55f-5ab7-489f-9e94-4ec21ff51e59"})
FileList
Tipo: String[]
@() Lista de todos os arquivos empacotados com este módulo. Tal como acontece com ModuleList, FileList é uma lista de inventário e não é processada de outra forma.
Exemplo: FileList = @("File1", "File2", "File3")
PrivateData
Tipo: Object
@{...} Especifica quaisquer dados privados que precisam ser passados para o módulo raiz especificado pela chave RootModule (alias: ModuleToProcess). PrivateData é uma tabela de hash que compreende vários elementos: Tags, LicenseUri, ProjectURI, IconUri, ReleaseNotes, de pré-lançamento, RequireLicenseAcceptancee ExternalModuleDependencies.
Etiquetas
Tipo: String[]
@() As tags ajudam na descoberta de módulos em galerias online.
Exemplo: Tags = "PackageManagement", "PowerShell", "Manifest"
LicenseUri
Tipo: Uri
<empty string> Um URL para a licença para este módulo.
Exemplo: LicenseUri = 'https://www.contoso.com/license'
ProjectUri
Tipo: Uri
<empty string> Um URL para o site principal deste projeto.
Exemplo: ProjectUri = 'https://www.contoso.com/project'
IconUri
Tipo: Uri
<empty string> Um URL para um ícone que representa este módulo.
Exemplo: IconUri = 'https://www.contoso.com/icons/icon.png'
Notas de versão
Tipo: String
<empty string> Especifica as notas de versão do módulo.
Exemplo: ReleaseNotes = 'The release notes provide information about the module.
de pré-lançamento
Tipo: String
<empty string> Esse parâmetro foi adicionado no PowerShellGet 1.6.6. Uma cadeia de caracteres PreRelease que identifica o módulo como uma versão de pré-lançamento em galerias online.
Exemplo: PreRelease = 'alpha'
RequireLicenseAcceptance
Tipo: Boolean
$false Esse parâmetro foi adicionado no PowerShellGet 1.5. Sinalizador para indicar se o módulo requer aceitação explícita do usuário para instalar, atualizar ou salvar.
Exemplo: RequireLicenseAcceptance = $false
ExternalModuleDependencies
Tipo: String[]
@() Este parâmetro foi adicionado no PowerShellGet v2. Uma lista de módulos externos dos quais este módulo depende.
Exemplo: ExternalModuleDependencies = @("ExtModule1", "ExtModule2", "ExtModule3"). Esta lista é apenas informativa. Ao contrário de RequiredModules, ele não é usado para impor dependências.
HelpInfoURI
Tipo: String
<empty string> URI HelpInfo deste módulo.
Exemplo: HelpInfoURI = 'https://www.contoso.com/help'
DefaultCommandPrefix
Tipo: String
<empty string> Prefixo padrão para comandos exportados deste módulo. Substitua o prefixo padrão usando Import-Module -Prefix.
Exemplo: DefaultCommandPrefix = 'My'

Exemplo de manifesto do módulo

O manifesto do módulo de exemplo a seguir foi criado com New-ModuleManifest no PowerShell 7 e contém as chaves e os valores padrão.

#
# 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 = ''

}

Ver também