PowerShell
Powershell-Module
Suche…
Einführung
Mit der PowerShell-Version 2.0 können Entwickler PowerShell-Module erstellen. PowerShell-Module kapseln eine Reihe allgemeiner Funktionen. Beispielsweise gibt es herstellerspezifische PowerShell-Module, die verschiedene Cloud-Services verwalten. Es gibt auch allgemeine PowerShell-Module, die mit Social-Media-Diensten interagieren und gängige Programmieraufgaben ausführen, z. B. Base64-Codierung, Arbeiten mit Named Pipes usw.
Module können Befehlsaliase, Funktionen, Variablen, Klassen und mehr verfügbar machen.
Erstellen Sie ein 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 = @()
}
Jedes gute PowerShell-Modul verfügt über ein Modulmanifest. Das Modulmanifest enthält lediglich Metadaten zu einem PowerShell-Modul und definiert nicht den tatsächlichen Inhalt des Moduls.
Die Manifestdatei ist eine PowerShell-Skriptdatei mit der Erweiterung .psd1
, die eine HashTable enthält. Die HashTable im Manifest muss bestimmte Schlüssel enthalten, damit PowerShell sie als PowerShell-Moduldatei richtig interpretieren kann.
Das obige Beispiel enthält eine Liste der wichtigsten HashTable-Schlüssel, aus denen ein Modulmanifest besteht, es gibt jedoch noch viele andere. Mit dem Befehl New-ModuleManifest
Sie ein neues Skelett für das New-ModuleManifest
erstellen.
Einfaches Modulbeispiel
function Add {
[CmdletBinding()]
param (
[int] $x
, [int] $y
)
return $x + $y
}
Export-ModuleMember -Function Add
Dies ist ein einfaches Beispiel, wie eine PowerShell-Skriptmodul-Datei aussehen könnte. Diese Datei würde MyCoolModule.psm1
heißen und wird aus der Modulmanifestdatei (.psd1) referenziert. Sie werden feststellen, dass wir mit dem Befehl Export-ModuleMember
angeben können, welche Funktionen in dem Modul für den Benutzer des Moduls "exportiert" werden sollen. Einige Funktionen sind nur für den internen Export-ModuleMember
und sollten nicht Export-ModuleMember
werden, sodass sie beim Aufruf von Export-ModuleMember
.
Eine Variable aus einem Modul exportieren
$FirstName = 'Bob'
Export-ModuleMember -Variable FirstName
Um eine Variable aus einem Modul zu exportieren, verwenden Sie den Befehl Export-ModuleMember
mit dem Parameter -Variable
. Denken Sie jedoch daran, dass, wenn die Variable auch nicht explizit in der Modulmanifestdatei (.psd1) exportiert wird, die Variable für den Modulverbraucher nicht sichtbar ist. Stellen Sie sich das Manifest des Moduls wie einen "Gatekeeper" vor. Wenn eine Funktion oder Variable im Modulmanifest nicht zulässig ist, ist sie für den Modulverbraucher nicht sichtbar.
Anmerkung: Das Exportieren einer Variablen ähnelt dem Veröffentlichen eines Felds in einer Klasse. Es ist nicht ratsam. Es wäre besser, eine Funktion freizulegen, um das Feld zu erhalten, und eine Funktion, um das Feld festzulegen.
Strukturieren von PowerShell-Modulen
Anstatt alle Funktionen in einer einzigen PowerShell-Skriptmoduldatei .psm1
, möchten Sie möglicherweise Ihre Funktion in einzelne Dateien .psm1
. Sie können diese Dateien dann aus Ihrer Skriptmodul-Datei mit einem Punkt versehen, die sie im Wesentlichen so behandelt, als wären sie Teil der .psm1
Datei.
Betrachten Sie diese Modulverzeichnisstruktur:
\MyCoolModule
\Functions
Function1.ps1
Function2.ps1
Function3.ps1
MyCoolModule.psd1
MyCoolModule.psm1
In Ihre MyCoolModule.psm1
Datei können Sie folgenden Code einfügen:
Get-ChildItem -Path $PSScriptRoot\Functions |
ForEach-Object -Process { . $PSItem.FullName }
Dadurch würden die einzelnen Funktionsdateien in die .psm1
Moduldatei aufgenommen.
Lage der Module
PowerShell sucht nach Modulen in den Verzeichnissen, die unter $ Env: PSModulepath aufgeführt sind.
Ein Modul namens foo in einem Ordner namens foo wird mit dem Import-Module foo
In diesem Ordner sucht PowerShell nach einem Modulmanifest (foo.psd1), einer Moduldatei (foo.psm1) und einer DLL (foo.dll).
Sichtbarkeit von Modulmitgliedern
Standardmäßig sind nur die in einem Modul definierten Funktionen außerhalb des Moduls sichtbar. Wenn Sie also Variablen und Aliase in einem Modul definieren, stehen diese nur im Code des Moduls zur Verfügung.
Um dieses Verhalten zu überschreiben, können Sie das Export-ModuleMember
verwenden. Mit den Parametern -Function
, -Variable
und -Alias
können Sie genau angeben, welche -Alias
exportiert werden sollen.
Beachten Sie, dass bei Verwendung von Export-ModuleMember
nur die von Ihnen angegebenen Elemente sichtbar sind.