Condividi tramite


Come scrivere un manifesto del modulo di PowerShell

Dopo aver scritto il modulo di PowerShell, è possibile aggiungere un manifesto del modulo facoltativo che includa informazioni sul modulo. Ad esempio, è possibile descrivere l'autore, specificare i file nel modulo (ad esempio moduli annidati), eseguire script per personalizzare l'ambiente dell'utente, caricare i file di tipo e formattazione, definire i requisiti di sistema e limitare i membri che il modulo esporta.

Creazione di un manifesto del modulo

Un manifesto del modulo è un file di dati di PowerShell (.psd1) che descrive il contenuto di un modulo e determina come viene elaborato un modulo. Il file manifesto è un file di testo che contiene una tabella hash di chiavi e valori. Per collegare un file manifesto a un modulo, denominare il manifesto come il modulo e archiviare il manifesto nella directory radice del modulo.

Per i moduli semplici che contengono solo un assembly singolo .psm1 o binario, un manifesto del modulo è facoltativo. Tuttavia, è consigliabile usare un manifesto del modulo quando possibile, perché sono utili per organizzare il codice e gestire le informazioni sul controllo delle versioni. È inoltre necessario un manifesto del modulo per esportare un assembly installato nella Global Assembly Cache. È necessario anche un manifesto del modulo per i moduli che supportano la funzionalità Guida aggiornabile. La Guida aggiornabile usa la chiave HelpInfoUri nel manifesto del modulo per trovare il file help information (HelpInfo XML) che contiene il percorso dei file della Guida aggiornati per il modulo. Per altre informazioni sulla Guida aggiornabile, vedere Supporto della Guida aggiornabile.

Per creare e usare un manifesto del modulo

  1. La procedura consigliata per creare un manifesto del modulo consiste nell'usare il cmdlet New-ModuleManifest . È possibile usare i parametri per specificare una o più chiavi e valori predefiniti del manifesto. L'unico requisito consiste nel denominare il file. New-ModuleManifest crea un manifesto del modulo con i valori specificati e include le chiavi rimanenti e i relativi valori predefiniti. Se è necessario creare più moduli, usare New-ModuleManifest per creare un modello di manifesto del modulo che può essere modificato per i diversi moduli. Per un esempio di manifesto del modulo predefinito, vedere il manifesto del modulo di esempio.

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

    Un'alternativa consiste nel creare manualmente la tabella hash del manifesto del modulo usando le informazioni minime necessarie, ModuleVersion. Salvare il file con lo stesso nome del modulo e usare l'estensione del .psd1 file. È quindi possibile modificare il file e aggiungere le chiavi e i valori appropriati.

  2. Aggiungere eventuali elementi aggiuntivi desiderati nel file manifesto.

    Per modificare il file manifesto, usare qualsiasi editor di testo preferito. Tuttavia, il file manifesto è un file di script che contiene codice, quindi è consigliabile modificarlo in un ambiente di scripting o sviluppo, ad esempio Visual Studio Code. Tutti gli elementi di un file manifesto sono facoltativi, ad eccezione del numero ModuleVersion .

    Per le descrizioni delle chiavi e dei valori che è possibile includere in un manifesto del modulo, vedere la tabella degli elementi del manifesto del modulo. Per altre informazioni, vedere le descrizioni dei parametri nel cmdlet New-ModuleManifest .

  3. Per risolvere eventuali scenari che potrebbero non essere coperti dagli elementi del manifesto del modulo di base, è possibile aggiungere codice aggiuntivo al manifesto del modulo.

    Per problemi di sicurezza, PowerShell esegue solo un piccolo subset delle operazioni disponibili in un file manifesto del modulo. In genere, è possibile usare l'istruzione if , gli operatori aritmetici e di confronto e i tipi di dati di Base di PowerShell.

  4. Dopo aver creato il manifesto del modulo, è possibile testarlo per verificare che i percorsi descritti nel manifesto siano corretti. Per testare il manifesto del modulo, usare Test-ModuleManifest.

    Test-ModuleManifest myModuleName.psd1

  5. Assicurarsi che il manifesto del modulo si trovi nel livello superiore della directory che contiene il modulo.

    Quando si copia il modulo in un sistema e lo si importa, PowerShell usa il manifesto del modulo per importare il modulo.

  6. Facoltativamente, è possibile testare direttamente il manifesto del modulo con una chiamata a Import-Module tramite dot-sourcing del manifesto stesso.

    Import-Module .\myModuleName.psd1

Elementi del manifesto del modulo

La tabella seguente descrive gli elementi che è possibile includere in un manifesto del modulo. Per informazioni più dettagliate, vedere about_Module_Manifests.

Elemento Predefinito Description
RootModule
Tipo: String
<empty string> Modulo script o file di modulo binario associato a questo manifesto. Le versioni precedenti di PowerShell hanno chiamato questo elemento ModuleToProcess.
I tipi possibili per il modulo radice possono essere vuoti, creando un modulo Manifesto , il nome di un modulo script (.psm1) o il nome di un modulo binario (.exe o .dll). L'inserimento del nome di un manifesto del modulo () o di un file di script (.psd1.ps1) in questo elemento causa un errore.
Esempio: RootModule = 'ScriptModule.psm1'
ModuleVersion
Tipo: Version
'0.0.1' Numero di versione di questo modulo. Se non viene specificato un valore, New-ModuleManifest usa l'impostazione predefinita. La stringa deve essere in grado di eseguire la conversione nel tipo Version , ad esempio #.#.#.#. Import-Module carica il primo modulo trovato nel $PSModulePath che corrisponde al nome e ha almeno un valore ModuleVersion elevato, come parametro MinimumVersion . Per importare una versione specifica, usare il Import-Module parametro RequiredVersion del cmdlet.
Esempio: ModuleVersion = '1.0'
GUID
Tipo: GUID
'<GUID>' ID usato per identificare in modo univoco questo modulo. Se non viene specificato un valore, New-ModuleManifest genera automaticamente il valore. Non è attualmente possibile importare un modulo in base al GUID.
Esempio: GUID = 'cfc45206-1e49-459d-a8ad-5b571ef94857'
Autore
Tipo: String
'<Current user>' Autore di questo modulo. Se non viene specificato un valore, New-ModuleManifest usa l'utente corrente.
Esempio: Author = 'AuthorNameHere'
Nome Azienda
Tipo: String
'Unknown' Società o fornitore di questo modulo. Se non viene specificato un valore, New-ModuleManifest usa l'impostazione predefinita.
Esempio: CompanyName = 'Fabrikam'
Diritto d’autore
Tipo: String
'(c) <Author>. All rights reserved.' Informativa sul copyright per questo modulo. Se non viene specificato un valore, New-ModuleManifest usa l'impostazione predefinita con l'utente corrente come <Author>. Per specificare un autore, usare il parametro Author .
Esempio: Copyright = '2019 AuthorName. All rights reserved.'
Descrizione
Tipo: String
<empty string> Descrizione delle funzionalità fornite da questo modulo.
Esempio: Description = 'This is the module's description.'
PowerShellVersion
Tipo: Version
<empty string> Versione minima del motore di PowerShell richiesta da questo modulo. I valori validi sono 1.0, 2.0, 3.0, 4.0, 5.0, 5.1, 6.0, 6.1, 6.2, 7.0 e 7.1.
Esempio: PowerShellVersion = '5.0'
PowerShellHostName
Tipo: String
<empty string> Nome dell'host di PowerShell richiesto da questo modulo. Questo nome viene fornito da PowerShell. Per trovare il nome di un programma host, nel programma digitare : $Host.Name.
Esempio: PowerShellHostName = 'ConsoleHost'
PowerShellHostVersion
Tipo: Version
<empty string> Versione minima dell'host di PowerShell richiesta da questo modulo.
Esempio: PowerShellHostVersion = '2.0'
DotNetFrameworkVersion
Tipo: Version
<empty string> Versione minima di Microsoft .NET Framework richiesta da questo modulo. Questo prerequisito è valido solo per l'edizione di PowerShell Desktop, ad esempio Windows PowerShell 5.1 e si applica solo alle versioni di .NET Framework inferiori alla 4.5.
Esempio: DotNetFrameworkVersion = '3.5'
CLRVersion
Tipo: Version
<empty string> Versione minima di Common Language Runtime (CLR) richiesta da questo modulo. Questo prerequisito è valido solo per l'edizione di PowerShell Desktop, ad esempio Windows PowerShell 5.1 e si applica solo alle versioni di .NET Framework inferiori alla 4.5.
Esempio: CLRVersion = '3.5'
ProcessorArchitecture
Tipo: ProcessorArchitecture
<empty string> Architettura del processore (None, X86, Amd64) richiesta da questo modulo. I valori validi sono x86, AMD64, Arm, IA64, MSIL e Nessuno (sconosciuto o non specificato).
Esempio: ProcessorArchitecture = 'x86'
RequiredModules
Tipo: Object[]
@() Moduli che devono essere importati nell'ambiente globale prima di importare questo modulo. In questo modo vengono caricati tutti i moduli elencati, a meno che non siano già stati caricati. Ad esempio, alcuni moduli potrebbero essere già caricati da un modulo diverso. È possibile specificare una versione specifica da caricare usando RequiredVersion anziché ModuleVersion. Quando ModuleVersion viene usato, verrà caricata la versione più recente disponibile con almeno la versione specificata. È possibile combinare stringhe e tabelle hash nel valore del parametro.
Esempio: RequiredModules = @("MyModule", @{ModuleName="MyDependentModule"; ModuleVersion="2.0"; GUID="cfc45206-1e49-459d-a8ad-5b571ef94857"})
Esempio: RequiredModules = @("MyModule", @{ModuleName="MyDependentModule"; RequiredVersion="1.5"; GUID="cfc45206-1e49-459d-a8ad-5b571ef94857"})
RequiredAssemblies
Tipo: String[]
@() Assembly che devono essere caricati prima di importare questo modulo. Specifica i nomi di file di assembly (.dll) richiesti dal modulo.
PowerShell carica gli assembly specificati prima di aggiornare tipi o formati, importare moduli annidati o importare il file di modulo specificato nel valore della chiave RootModule. Usare questo parametro per elencare tutti gli assembly richiesti dal modulo.
Esempio: RequiredAssemblies = @("assembly1.dll", "assembly2.dll", "assembly3.dll")
ScriptsToProcess
Tipo: String[]
@() File di script (.ps1) eseguiti nello stato della sessione del chiamante quando il modulo viene importato. Potrebbe trattarsi dello stato della sessione globale o, per i moduli annidati, lo stato della sessione di un altro modulo. È possibile usare questi script per preparare un ambiente proprio come è possibile usare uno script di accesso.
Questi script vengono eseguiti prima del caricamento di uno dei moduli elencati nel manifesto.
Esempio: ScriptsToProcess = @("script1.ps1", "script2.ps1", "script3.ps1")
TypesToProcess
Tipo: String[]
@() Digitare i file (.ps1xml) da caricare durante l'importazione di questo modulo.
Esempio: TypesToProcess = @("type1.ps1xml", "type2.ps1xml", "type3.ps1xml")
FormatsToProcess
Tipo: String[]
@() Formattare i file (.ps1xml) da caricare durante l'importazione di questo modulo.
Esempio: FormatsToProcess = @("format1.ps1xml", "format2.ps1xml", "format3.ps1xml")
NestedModules
Tipo: Object[]
@() Moduli da importare come moduli annidati del modulo specificato in RootModule (alias:ModuleToProcess).
L'aggiunta di un nome di modulo a questo elemento è simile alla chiamata Import-Module dall'interno dello script o del codice dell'assembly. La differenza principale usando un file manifesto è che è più facile vedere cosa si sta caricando. Inoltre, se un modulo non viene caricato, non sarà ancora stato caricato il modulo effettivo.
Oltre ad altri moduli, è anche possibile caricare i file di script (.ps1). Questi file verranno eseguiti nel contesto del modulo radice. Equivale a dot sourcing dello script nel modulo radice.
Esempio: NestedModules = @("script.ps1", @{ModuleName="MyModule"; ModuleVersion="1.0.0.0"; GUID="50cdb55f-5ab7-489f-9e94-4ec21ff51e59"})
FunctionsToExport
Tipo: String[]
@() Specifica le funzioni da esportare da questo modulo, per ottenere prestazioni ottimali, non usare caratteri jolly e non eliminare la voce, usare una matrice vuota se non sono presenti funzioni da esportare. Per impostazione predefinita, non vengono esportate funzioni. È possibile usare questa chiave per elencare le funzioni esportate dal modulo.
Il modulo esporta le funzioni nello stato della sessione del chiamante. Lo stato della sessione del chiamante può essere lo stato della sessione globale o, per i moduli annidati, lo stato della sessione di un altro modulo. Quando si concatenano i moduli annidati, tutte le funzioni esportate da un modulo annidato verranno esportate nello stato della sessione globale, a meno che un modulo nella catena non limiti la funzione usando la chiave FunctionsToExport .
Se il manifesto esporta alias per le funzioni, questa chiave può rimuovere le funzioni i cui alias sono elencati nella chiave AliasesToExport , ma questa chiave non può aggiungere alias di funzione all'elenco.
Esempio: FunctionsToExport = @("function1", "function2", "function3")
CmdletsToExport
Tipo: String[]
@() Specifica i cmdlet da esportare da questo modulo, per ottenere prestazioni ottimali, non usare caratteri jolly e non eliminare la voce, usare una matrice vuota se non sono presenti cmdlet da esportare. Per impostazione predefinita, non vengono esportati cmdlet. È possibile usare questa chiave per elencare i cmdlet esportati dal modulo.
Lo stato della sessione del chiamante può essere lo stato della sessione globale o, per i moduli annidati, lo stato della sessione di un altro modulo. Quando si concatenano i moduli annidati, tutti i cmdlet esportati da un modulo annidato verranno esportati nello stato della sessione globale, a meno che un modulo nella catena non limiti il cmdlet usando la chiave CmdletsToExport .
Se il manifesto esporta alias per i cmdlet, questa chiave può rimuovere i cmdlet i cui alias sono elencati nella chiave AliasesToExport , ma questa chiave non può aggiungere alias cmdlet all'elenco.
Esempio: CmdletsToExport = @("Get-MyCmdlet", "Set-MyCmdlet", "Test-MyCmdlet")
VariablesToExport
Tipo: String[]
'*' Specifica le variabili esportate dal modulo nello stato della sessione del chiamante. Sono consentiti caratteri jolly. Per impostazione predefinita, tutte le variabili ('*') vengono esportate. È possibile usare questa chiave per limitare le variabili esportate dal modulo.
Lo stato della sessione del chiamante può essere lo stato della sessione globale o, per i moduli annidati, lo stato della sessione di un altro modulo. Quando si concatenano i moduli annidati, tutte le variabili esportate da un modulo annidato verranno esportate nello stato della sessione globale, a meno che un modulo nella catena non limiti la variabile usando la chiave VariablesToExport .
Se il manifesto esporta anche gli alias per le variabili, questa chiave può rimuovere le variabili i cui alias sono elencati nella chiave AliasesToExport , ma questa chiave non può aggiungere alias variabili all'elenco.
Esempio: VariablesToExport = @('$MyVariable1', '$MyVariable2', '$MyVariable3')
AliasesToExport
Tipo: String[]
@() Specifica gli alias da esportare da questo modulo, per ottenere prestazioni ottimali, non usare caratteri jolly e non eliminare la voce, usare una matrice vuota se non sono presenti alias da esportare. Per impostazione predefinita, non vengono esportati alias. È possibile usare questa chiave per elencare gli alias esportati dal modulo.
Il modulo esporta gli alias nello stato della sessione del chiamante. Lo stato della sessione del chiamante può essere lo stato della sessione globale o, per i moduli annidati, lo stato della sessione di un altro modulo. Quando si concatenano i moduli annidati, tutti gli alias esportati da un modulo annidato verranno infine esportati nello stato della sessione globale, a meno che un modulo nella catena non limiti l'alias usando la chiave AliasesToExport .
Esempio: AliasesToExport = @("MyAlias1", "MyAlias2", "MyAlias3")
DscResourcesToExport
Tipo: String[]
@() Specifica le risorse DSC da esportare da questo modulo. Sono consentiti caratteri jolly.
Esempio: DscResourcesToExport = @("DscResource1", "DscResource2", "DscResource3")
ModuleList
Tipo: Object[]
@() Specifica tutti i moduli inseriti in un pacchetto con questo modulo. Questi moduli possono essere immessi in base al nome, usando una stringa delimitata da virgole o come tabella hash con chiavi ModuleName e GUID . La tabella hash può anche avere una chiave ModuleVersion facoltativa. La chiave ModuleList è progettata per fungere da inventario dei moduli. Questi moduli non vengono elaborati automaticamente.
Esempio: ModuleList = @("SampleModule", "MyModule", @{ModuleName="MyModule"; ModuleVersion="1.0.0.0"; GUID="50cdb55f-5ab7-489f-9e94-4ec21ff51e59"})
FileList
Tipo: String[]
@() Elenco di tutti i file inclusi in questo modulo. Come per ModuleList, FileList è un elenco di inventario e non viene elaborato in altro modo.
Esempio: FileList = @("File1", "File2", "File3")
PrivateData
Tipo: Object
@{...} Specifica tutti i dati privati che devono essere passati al modulo radice specificato dalla chiave RootModule (alias: ModuleToProcess). PrivateData è una tabella hash che comprende diversi elementi: Tags, LicenseUri, ProjectURI, IconUri, ReleaseNotes, Prerelease, RequireLicenseAcceptance e ExternalModuleDependencies.
Etichette
Tipo: String[]
@() I tag sono utili per l'individuazione dei moduli nelle raccolte online.
Esempio: Tags = "PackageManagement", "PowerShell", "Manifest"
LicenseUri
Tipo: Uri
<empty string> URL della licenza per questo modulo.
Esempio: LicenseUri = 'https://www.contoso.com/license'
ProjectUri
Tipo: Uri
<empty string> URL del sito Web principale per questo progetto.
Esempio: ProjectUri = 'https://www.contoso.com/project'
IconUri
Tipo: Uri
<empty string> URL di un'icona che rappresenta questo modulo.
Esempio: IconUri = 'https://www.contoso.com/icons/icon.png'
Note sulla versione
Tipo: String
<empty string> Specifica le note sulla versione del modulo.
Esempio: ReleaseNotes = 'The release notes provide information about the module.
Preliminare
Tipo: String
<empty string> Questo parametro è stato aggiunto in PowerShellGet 1.6.6. Stringa PreRelease che identifica il modulo come versione preliminare nelle raccolte online.
Esempio: PreRelease = 'alpha'
RequireLicenseAcceptance
Tipo: Boolean
$false Questo parametro è stato aggiunto in PowerShellGet 1.5. Flag per indicare se il modulo richiede l'accettazione esplicita dell'utente per l'installazione, l'aggiornamento o il salvataggio.
Esempio: RequireLicenseAcceptance = $false
ExternalModuleDependencies
Tipo: String[]
@() Questo parametro è stato aggiunto in PowerShellGet v2. Elenco di moduli esterni da cui dipende questo modulo.
Esempio: ExternalModuleDependencies = @("ExtModule1", "ExtModule2", "ExtModule3"). Questo elenco è solo informativo. A differenza di RequiredModules, non viene usato per applicare le dipendenze.
HelpInfoURI
Tipo: String
<empty string> URI HelpInfo di questo modulo.
Esempio: HelpInfoURI = 'https://www.contoso.com/help'
DefaultCommandPrefix
Tipo: String
<empty string> Prefisso predefinito per i comandi esportati da questo modulo. Eseguire l'override del prefisso predefinito usando Import-Module -Prefix.
Esempio: DefaultCommandPrefix = 'My'

Manifesto del modulo di esempio

Il manifesto del modulo di esempio seguente è stato creato con New-ModuleManifest in PowerShell 7 e contiene le chiavi e i valori predefiniti.

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

}

Vedere anche