PowerShell
Powershell-modules
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.