Delen via


Informatie over een Windows PowerShell-module

Een module is een set gerelateerde Windows PowerShell-functies, gegroepeerd als een handige eenheid (meestal opgeslagen in één map). Door een set gerelateerde scriptbestanden, assembly's en gerelateerde resources als module te definiëren, kunt u verwijzen naar, laden, behouden en uw code veel eenvoudiger delen dan anders.

Het belangrijkste doel van een module is om de modularisatie (bijvoorbeeld hergebruik en abstractie) van Windows PowerShell-code toe te staan. De eenvoudigste manier om een module te maken, is bijvoorbeeld door een Windows PowerShell-script op te slaan als een .psm1-bestand. Hierdoor kunt u de functies en variabelen in het script beheren (openbaar of privé maken). Als u het script opslaat als een .psm1-bestand, kunt u ook het bereik van bepaalde variabelen beheren. Ten slotte kunt u ook cmdlets zoals Install-Module gebruiken om uw script te organiseren, te installeren en te gebruiken als bouwstenen voor grotere oplossingen.

Moduleonderdelen en -typen

Een module bestaat uit vier basisonderdelen:

  1. Een soort codebestand, meestal een PowerShell-script of een beheerde cmdlet-assembly.

  2. Alles wat het bovenstaande codebestand nodig heeft, zoals extra assembly's, Help-bestanden of scripts.

  3. Een manifestbestand waarin de bovenstaande bestanden worden beschreven, evenals metagegevens zoals ontwerp- en versiebeheergegevens.

  4. Een map die alle bovenstaande inhoud bevat en zich bevindt waar PowerShell deze redelijkerwijs kan vinden.

    Notitie

    Deze onderdelen zijn zelf niet nodig. Een module kan bijvoorbeeld technisch gesproken alleen een script zijn dat is opgeslagen in een .psm1-bestand. U kunt ook een module hebben die niets anders is dan een manifestbestand, dat voornamelijk wordt gebruikt voor organisatiedoeleinden. U kunt ook een script schrijven waarmee dynamisch een module wordt gemaakt en daarom geen map nodig is om iets op te slaan. In de volgende secties worden de typen modules beschreven die u kunt verkrijgen door de verschillende mogelijke onderdelen van een module samen te combineren en te koppelen.

Scriptmodules

Zoals de naam al aangeeft, is een scriptmodule een bestand (.psm1) dat geldige Windows PowerShell-code bevat. Scriptontwikkelaars en beheerders kunnen dit type module gebruiken om modules te maken waarvan leden functies, variabelen en meer bevatten. In het hart is een scriptmodule gewoon een Windows PowerShell-script met een andere extensie, waarmee beheerders import-, export- en beheerfuncties kunnen gebruiken.

Daarnaast kunt u een manifestbestand gebruiken om andere resources in uw module op te nemen, zoals gegevensbestanden, andere afhankelijke modules of runtimescripts. Manifestbestanden zijn ook handig voor het bijhouden van metagegevens, zoals creatie- en versiebeheergegevens.

Ten slotte moet een scriptmodule, net als elke andere module die niet dynamisch is gemaakt, worden opgeslagen in een map die door PowerShell redelijk kan worden gedetecteerd. Dit bevindt zich meestal op het Pad van de PowerShell-module; maar indien nodig kunt u expliciet beschrijven waar uw module is geïnstalleerd. Zie Een PowerShell-scriptmodule schrijvenvoor meer informatie.

Binaire modules

Een binaire module is een .NET Framework-assembly (.dll) die gecompileerde code bevat, zoals C#. Cmdlet-ontwikkelaars kunnen dit type module gebruiken om cmdlets, providers en meer te delen. (Bestaande modules kunnen ook worden gebruikt als binaire modules.) In vergelijking met een scriptmodule kunt u met een binaire module cmdlets maken die sneller zijn of functies (zoals multithreading) gebruiken die niet zo eenvoudig te coderen zijn in Windows PowerShell-scripts.

Net als bij scriptmodules kunt u een manifestbestand opnemen om aanvullende resources te beschrijven die door uw module worden gebruikt en om metagegevens over uw module bij te houden. Op dezelfde manier moet u de binaire module waarschijnlijk ergens in een map installeren langs het Pad van de PowerShell-module. Zie How to How to Write a PowerShell Binary Module(Een binaire PowerShell-module schrijven) voor meer informatie.

Manifestmodules

Een manifestmodule is een module die gebruikmaakt van een manifestbestand om alle onderdelen ervan te beschrijven, maar geen kernassembly of script heeft. (Formeel laat een manifestmodule het ModuleToProcess of RootModule element van het manifest leeg.) U kunt echter nog steeds de andere functies van een module gebruiken, zoals de mogelijkheid om afhankelijke assembly's te laden of automatisch bepaalde scripts voor voorverwerking uit te voeren. U kunt ook een manifestmodule gebruiken als een handige manier om resources te verpakken die door andere modules worden gebruikt, zoals geneste modules, assembly's, typen of indelingen. Zie Een PowerShell-modulemanifest schrijvenvoor meer informatie.

Dynamische modules

Een dynamische module is een module die niet is geladen van of opgeslagen in een bestand. In plaats daarvan worden ze dynamisch gemaakt met behulp van de cmdlet New-Module. Met dit type module kan een script een module op aanvraag maken die niet hoeft te worden geladen of opgeslagen in permanente opslag. Volgens de aard is een dynamische module bedoeld om kort te leven en kan daarom niet worden geopend door de Get-Module cmdlet. Op dezelfde manier hebben ze meestal geen modulemanifesten nodig en hebben ze waarschijnlijk permanente mappen nodig om hun gerelateerde assembly's op te slaan.

Modulemanifesten

Een modulemanifest is een .psd1-bestand dat een hash-tabel bevat. De sleutels en waarden in de hash-tabel doen het volgende:

  • De inhoud en kenmerken van de module beschrijven.

  • Definieer de vereisten.

  • Bepaal hoe de onderdelen worden verwerkt.

    Manifesten zijn niet vereist voor een module. Modules kunnen verwijzen naar scriptbestanden (.ps1), scriptmodulebestanden (.psm1), manifestbestanden (.psd1), opmaak- en typebestanden (.ps1xml), cmdlet- en providerassembly's (.dll), resourcebestanden, Help-bestanden, lokalisatiebestanden of een ander type bestand of resource dat is gebundeld als onderdeel van de module. Voor een geinternationaliseerd script bevat de modulemap ook een set berichtencatalogusbestanden. Als u een manifestbestand aan de modulemap toevoegt, kunt u verwijzen naar de meerdere bestanden als één eenheid door naar het manifest te verwijzen.

    In het manifest zelf worden de volgende informatiecategorieën beschreven:

  • Metagegevens over de module, zoals het versienummer van de module, de auteur en de beschrijving.

  • Vereisten voor het importeren van de module, zoals de Windows PowerShell-versie, de CLR-versie (Common Language Runtime) en de vereiste modules.

  • Verwerkingsrichtlijnen, zoals de scripts, indelingen en typen die moeten worden verwerkt.

  • Beperkingen voor de leden van de module die moeten worden geëxporteerd, zoals de aliassen, functies, variabelen en cmdlets die moeten worden geëxporteerd.

    Zie Een PowerShell-modulemanifest schrijvenvoor meer informatie.

Een module opslaan en installeren

Zodra u een script, binair of manifestmodule hebt gemaakt, kunt u uw werk opslaan op een locatie waartoe anderen toegang hebben. Uw module kan bijvoorbeeld worden opgeslagen in de systeemmap waarin Windows PowerShell is geïnstalleerd of kan worden opgeslagen in een gebruikersmap.

Over het algemeen kunt u bepalen waar u uw module moet installeren met behulp van een van de paden die zijn opgeslagen in de variabele $Env:PSModulePath. Als u een van deze paden gebruikt, betekent dit dat PowerShell uw module automatisch kan vinden en laden wanneer een gebruiker deze aanroept in hun code. Als u uw module ergens anders opslaat, kunt u PowerShell expliciet laten weten door de locatie van uw module als parameter door te geven wanneer u Install-Moduleaanroept.

Ongeacht of het pad van de map wordt aangeduid als de basis- van de module (ModuleBase) en de naam van het script-, binaire of manifestmodulebestand moet hetzelfde zijn als de naam van de modulemap, met de volgende uitzonderingen:

  • Dynamische modules die door de New-Module cmdlet worden gemaakt, kunnen worden benoemd met behulp van de parameter Name van de cmdlet.

  • Modules die zijn geïmporteerd uit assemblyobjecten door de opdracht Import-Module -Assembly worden benoemd volgens de volgende syntaxis: "dynamic_code_module_" + assembly.GetName().

    Zie Een PowerShell-module installeren en about_PSModulePathvoor meer informatie.

Module-cmdlets en -variabelen

De volgende cmdlets en variabelen worden geleverd door Windows PowerShell voor het maken en beheren van modules.

cmdlet New-Module deze cmdlet maakt een nieuwe dynamische module die alleen in het geheugen bestaat. De module wordt gemaakt op basis van een scriptblok en de geëxporteerde leden, zoals de functies en variabelen, zijn onmiddellijk beschikbaar in de sessie en blijven beschikbaar totdat de sessie is gesloten.

cmdlet New-ModuleManifest cmdlet Met deze cmdlet wordt een nieuw modulemanifestbestand (.psd1) gemaakt, worden de waarden ingevuld en wordt het manifestbestand opgeslagen in het opgegeven pad. Deze cmdlet kan ook worden gebruikt om een modulemanifestsjabloon te maken die handmatig kan worden ingevuld.

cmdlet Import-Module deze cmdlet voegt een of meer modules toe aan de huidige sessie.

Get-Module cmdlet Deze cmdlet haalt informatie op over de modules die zijn of die kunnen worden geïmporteerd in de huidige sessie.

Export-ModuleMember cmdlet Deze cmdlet specificeert de moduleleden (zoals cmdlets, functies, variabelen en aliassen) die worden geëxporteerd uit een scriptmodulebestand (.psm1) of uit een dynamische module die is gemaakt met behulp van de cmdlet New-Module.

cmdlet Remove-Module cmdlet Met deze cmdlet worden modules uit de huidige sessie verwijderd.

Test-ModuleManifest cmdlet Deze cmdlet controleert of een modulemanifest de onderdelen van een module nauwkeurig beschrijft door te controleren of de bestanden die worden vermeld in het modulemanifestbestand (.psd1) daadwerkelijk bestaan in de opgegeven paden.

$PSScriptRoot Deze variabele bevat de map waaruit de scriptmodule wordt uitgevoerd. Hiermee kunnen scripts het modulepad gebruiken voor toegang tot andere resources.

$Env:PSModulePath Deze omgevingsvariabele bevat een lijst met de mappen waarin Windows PowerShell-modules worden opgeslagen. Windows PowerShell gebruikt de waarde van deze variabele bij het automatisch importeren van modules en het bijwerken van Help-onderwerpen voor modules.

Zie ook

een Windows PowerShell-module schrijven