Een PowerShell-modulemanifest schrijven

Nadat u uw PowerShell-module hebt geschreven, kunt u een optioneel modulemanifest toevoegen dat informatie over de module bevat. U kunt bijvoorbeeld de auteur beschrijven, bestanden opgeven in de module (zoals geneste modules), scripts uitvoeren om de omgeving van de gebruiker aan te passen, bestandstypen en opmaakbestanden te laden, systeemvereisten te definiëren en de leden te beperken die door de module worden geëxporteerd.

Een modulemanifest maken

Een modulemanifest is een PowerShell-gegevensbestand (.psd1) dat de inhoud van een module beschrijft en bepaalt hoe een module wordt verwerkt. Het manifestbestand is een tekstbestand dat een hashtabel met sleutels en waarden bevat. U koppelt een manifestbestand aan een module door het manifest hetzelfde te noemen als de module en het manifest op te slaan in de hoofdmap van de module.

Voor eenvoudige modules die slechts één .psm1 of binaire assembly bevatten, is een modulemanifest optioneel. Het is echter raadzaam om waar mogelijk een modulemanifest te gebruiken, omdat deze handig zijn om u te helpen bij het organiseren van uw code en het onderhouden van versiebeheergegevens. En een modulemanifest is vereist voor het exporteren van een assembly die is geïnstalleerd in de Global Assembly Cache. Er is ook een modulemanifest vereist voor modules die ondersteuning bieden voor de functie Updatable Help. Help kan worden bijgewerkt met behulp van de HelpInfoUri--sleutel in het modulemanifest om het Help-informatiebestand (HelpInfo XML) te vinden dat de locatie van de bijgewerkte Help-bestanden voor de module bevat. Zie Ondersteunende Help-voor meer informatie over Help-ondersteuning die kan worden bijgewerkt.

Een modulemanifest maken en gebruiken

  1. U kunt het beste een modulemanifest maken door de cmdlet New-ModuleManifest te gebruiken. U kunt parameters gebruiken om een of meer van de standaardsleutels en -waarden van het manifest op te geven. De enige vereiste is om het bestand een naam te geven. New-ModuleManifest maakt een modulemanifest met uw opgegeven waarden en bevat de resterende sleutels en de bijbehorende standaardwaarden. Als u meerdere modules wilt maken, gebruikt u New-ModuleManifest om een modulemanifestsjabloon te maken die kan worden gewijzigd voor uw verschillende modules. Zie het voorbeeldmodulemanifestvoor een voorbeeld van een standaardmodulemanifest.

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

    Een alternatief is om handmatig de hashtabel van het modulemanifest te maken met behulp van de minimale informatie die is vereist, de ModuleVersion. U slaat het bestand op met dezelfde naam als uw module en gebruikt de bestandsextensie .psd1. Vervolgens kunt u het bestand bewerken en de juiste sleutels en waarden toevoegen.

  2. Voeg aanvullende elementen toe die u in het manifestbestand wilt opnemen.

    Als u het manifestbestand wilt bewerken, gebruikt u een teksteditor die u wilt gebruiken. Het manifestbestand is echter een scriptbestand dat code bevat, dus u kunt het bestand bewerken in een script- of ontwikkelomgeving, zoals Visual Studio Code. Alle elementen van een manifestbestand zijn optioneel, met uitzondering van het ModuleVersion getal.

    Zie de parameterbeschrijvingen in de cmdlet New-ModuleManifest voor meer informatie. Zie about_Module_Manifests voor beschrijvingen van de sleutels en waarden die u in een modulemanifest kunt opnemen.

  3. Als u scenario's wilt aanpakken die mogelijk niet worden gedekt door de manifestelementen van de basismodule, hebt u de mogelijkheid om extra code toe te voegen aan uw modulemanifest.

    Voor beveiligingsproblemen voert PowerShell slechts een kleine subset van de beschikbare bewerkingen uit in een modulemanifestbestand. Over het algemeen kunt u de if-instructie, rekenkundige en vergelijkingsoperatoren en de eenvoudige PowerShell-gegevenstypen gebruiken.

  4. Nadat u het modulemanifest hebt gemaakt, kunt u het testen om te controleren of alle paden die in het manifest worden beschreven, juist zijn. Als u het modulemanifest wilt testen, gebruikt u Test-ModuleManifest.

    Test-ModuleManifest myModuleName.psd1

  5. Zorg ervoor dat uw modulemanifest zich op het hoogste niveau van de map bevindt die uw module bevat.

    Wanneer u de module naar een systeem kopieert en importeert, gebruikt PowerShell het modulemanifest om uw module te importeren.

  6. U kunt het modulemanifest desgewenst rechtstreeks testen met een aanroep naar Import-Module door het manifest zelf te sourcen.

    Import-Module .\myModuleName.psd1

Manifest van voorbeeldmodule

Het volgende voorbeeldmodulemanifest is gemaakt met New-ModuleManifest in PowerShell 7 en bevat de standaardsleutels en -waarden. Zie about_Module_Manifests voor een gedetailleerde beschrijving van elk element in een modulemanifest.

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

}

Zie ook