PowerShell
Powershell-moduler
Sök…
Introduktion
Från och med PowerShell version 2.0 kan utvecklare skapa PowerShell-moduler. PowerShell-moduler kapslar in en uppsättning gemensam funktionalitet. Till exempel finns det leverantörspecifika PowerShell-moduler som hanterar olika molntjänster. Det finns också generiska PowerShell-moduler som interagerar med sociala medietjänster och utför vanliga programmeringsuppgifter, till exempel Base64-kodning, arbetar med Named Pipes och mer.
Moduler kan exponera kommandot alias, funktioner, variabler, klasser och mer.
Skapa ett modulmanifest
@{
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 = @()
}
Varje bra PowerShell-modul har ett modulmanifest. Modulmanifestet innehåller helt enkelt metadata om en PowerShell-modul och definierar inte det faktiska innehållet i modulen.
Manifestfilen är en PowerShell-skriptfil med en .psd1
filändelse som innehåller en HashTable. Hashtabellen i manifestet måste innehålla specifika nycklar för att PowerShell ska tolka den korrekt som en PowerShell-modulfil.
Exemplet ovan ger en lista över de viktigaste HashTable-nycklarna som utgör en modulmanifest, men det finns många andra. Kommandot New-ModuleManifest
hjälper dig att skapa ett nytt modul manifest-skelett.
Enkelt modulexempel
function Add {
[CmdletBinding()]
param (
[int] $x
, [int] $y
)
return $x + $y
}
Export-ModuleMember -Function Add
Detta är ett enkelt exempel på hur en PowerShell-skriptmodulfil kan se ut. Denna fil skulle kallas MyCoolModule.psm1
och hänvisas till från modulmanifest (.psd1) -filen. Du kommer att märka att kommandot Export-ModuleMember
gör det möjligt för oss att specificera vilka funktioner i modulen vi vill "exportera" eller exponera till modulens användare. Vissa funktioner är endast interna och bör inte exponeras, så de skulle utelämnas från samtalet till Export-ModuleMember
.
Exportera en variabel från en modul
$FirstName = 'Bob'
Export-ModuleMember -Variable FirstName
För att exportera en variabel från en modul använder Export-ModuleMember
kommandot Export-ModuleMember
med parametern -Variable
. Kom ihåg att om variabeln inte heller exporteras eksplicit i modulmanifest (.psd1) -filen, så kommer inte variabeln att vara synlig för modulkonsumenten. Tänk på modulmanifestet som en "gatekeeper". Om en funktion eller variabel inte är tillåten i modulmanifestet är den inte synlig för modulkonsumenten.
Obs: Exportera en variabel liknar att göra ett fält i en klass offentligt. Det är inte tillrådligt. Det skulle vara bättre att exponera en funktion för att få fältet och en funktion för att ställa in fältet.
Strukturera PowerShell-moduler
I stället för att definiera alla dina funktioner i en enda .psm1
PowerShell- .psm1
, kanske du vill dela upp din funktion i enskilda filer. Du kan sedan dot-source dessa filer från din skriptmodulfil, som i princip behandlar dem som om de ingick i själva .psm1
filen.
Tänk på denna modulkatalogstruktur:
\MyCoolModule
\Functions
Function1.ps1
Function2.ps1
Function3.ps1
MyCoolModule.psd1
MyCoolModule.psm1
Inuti din MyCoolModule.psm1
fil kan du infoga följande kod:
Get-ChildItem -Path $PSScriptRoot\Functions |
ForEach-Object -Process { . $PSItem.FullName }
Detta skulle källa till de enskilda funktionsfilerna i .psm1
.
Plats för moduler
PowerShell letar efter moduler i katalogerna som listas i $ Env: PSModulepath.
En modul som heter foo , i en mapp som heter foo kommer att hittas med Import-Module foo
I den mappen letar PowerShell efter ett modulmanifest (foo.psd1), en modulfil (foo.psm1), en DLL (foo.dll).
Modulmedlems synlighet
Som standard är det bara funktioner som är definierade i en modul synliga utanför modulen. Med andra ord, om du definierar variabler och alias i en modul kommer de inte att vara tillgängliga utom i modulens kod.
För att åsidosätta detta beteende kan du använda Export-ModuleMember
cmdlet. Den har parametrar som kallas -Function
, -Variable
och -Alias
som låter dig specificera exakt vilka medlemmar som exporteras.
Det är viktigt att notera att om du använder Export-ModuleMember
är det bara de objekt du anger.