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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow