Zoeken…


Invoering

Beginnend met PowerShell versie 2.0 kunnen ontwikkelaars PowerShell-modules maken. PowerShell-modules bevatten een reeks algemene functionaliteit. Er zijn bijvoorbeeld leverancierspecifieke PowerShell-modules die verschillende cloudservices beheren. Er zijn ook generieke PowerShell-modules die communiceren met sociale mediadiensten en algemene programmeertaken uitvoeren, zoals Base64-codering, werken met Named Pipes en meer.

Modules kunnen opdrachtaliassen, functies, variabelen, klassen en meer weergeven.

Maak een modulemanifest

@{
  RootModule = 'MyCoolModule.psm1'
  ModuleVersion = '1.0'
  CompatiblePSEditions = @('Core')
  GUID = '6b42c995-67da-4139-be79-597a328056cc'
  Author = 'Bob Schmob'
  CompanyName = 'My Company'
  Copyright = '(c) 2017 Administrator. All rights reserved.'
  Description = 'It does cool stuff.'
  FunctionsToExport = @()
  CmdletsToExport = @()
  VariablesToExport = @()
  AliasesToExport = @()
  DscResourcesToExport = @()
}

Elke goede PowerShell-module heeft een module-manifest. Het modulemanifest bevat eenvoudig metagegevens over een PowerShell-module en definieert niet de werkelijke inhoud van de module.

Het manifestbestand is een PowerShell-scriptbestand met de extensie .psd1 dat een HashTable bevat. De HashTable in het manifest moet specifieke sleutels bevatten, zodat PowerShell het correct kan interpreteren als een PowerShell-modulebestand.

Het bovenstaande voorbeeld biedt een lijst met de belangrijkste HashTable-sleutels waaruit een module-manifest bestaat, maar er zijn er nog veel meer. De opdracht New-ModuleManifest helpt u bij het maken van een nieuw module manifest skelet.

Voorbeeld van een eenvoudige module

function Add {
  [CmdletBinding()]
  param (
    [int] $x
  , [int] $y
  )

  return $x + $y
}

Export-ModuleMember -Function Add

Dit is een eenvoudig voorbeeld van hoe een PowerShell-scriptmodulebestand eruit zou kunnen zien. Dit bestand zou MyCoolModule.psm1 worden genoemd en er wordt naar verwezen vanuit het module-manifestbestand (.psd1). U zult merken dat de opdracht Export-ModuleMember ons in staat stelt om aan te geven welke functies in de module we willen "exporteren" of bloot willen stellen aan de gebruiker van de module. Sommige functies zijn alleen voor intern gebruik en mogen niet worden weergegeven, zodat deze worden weggelaten uit de aanroep van Export-ModuleMember .

Een variabele exporteren vanuit een module

$FirstName = 'Bob'
Export-ModuleMember -Variable FirstName

Als u een variabele uit een module wilt exporteren, gebruikt u de opdracht Export-ModuleMember , met de parameter -Variable . Houd er echter rekening mee dat als de variabele ook niet expliciet wordt geëxporteerd in het module-manifestbestand (.psd1), de variabele niet zichtbaar is voor de moduleconsument. Zie het module-manifest als een "poortwachter". Als een functie of variabele niet is toegestaan in het module-manifest, is deze niet zichtbaar voor de moduleconsument.

Opmerking: het exporteren van een variabele is vergelijkbaar met het openbaar maken van een veld in een klasse. Het is niet aan te raden. Het is beter om een functie bloot te leggen om het veld te krijgen en een functie om het veld in te stellen.

PowerShell-modules structureren

In plaats van al uw functies in één .psm1 PowerShell- .psm1 definiëren, wilt u uw functie mogelijk opsplitsen in afzonderlijke bestanden. U kunt deze bestanden vervolgens dot- .psm1 vanuit uw .psm1 , dat ze in wezen behandelt alsof ze deel uitmaken van het .psm1 bestand zelf.

Overweeg deze module directory-structuur:

\MyCoolModule
  \Functions
    Function1.ps1
    Function2.ps1
    Function3.ps1
MyCoolModule.psd1
MyCoolModule.psm1

In uw MyCoolModule.psm1 bestand kunt u de volgende code invoegen:

Get-ChildItem -Path $PSScriptRoot\Functions | 
  ForEach-Object -Process { . $PSItem.FullName }

Dit zou de individuele functiebestanden .psm1 in het .psm1 modulebestand.

Locatie van modules

PowerShell zoekt naar modules in de mappen in het $ Env: PSModulepath.

Een module genaamd foo , in een map met de naam foo , wordt gevonden met Import-Module foo

In die map zoekt PowerShell naar een modulemanifest (foo.psd1), een modulebestand (foo.psm1), een DLL (foo.dll).

Zichtbaarheid van module-leden

Standaard zijn alleen functies gedefinieerd in een module zichtbaar buiten de module. Met andere woorden, als u variabelen en aliassen in een module definieert, zijn deze alleen beschikbaar in de code van de module.

Om dit gedrag te onderdrukken, kunt u de cmdlet Export-ModuleMember . Het heeft parameters genaamd -Function , -Variable en -Alias waarmee u precies kunt opgeven welke leden worden geëxporteerd.

Het is belangrijk op te merken dat als u Export-ModuleMember , alleen de items die u opgeeft zichtbaar zijn.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow