zur Startseite von solmera GmbH
Start Kontakt Impressum

Evolution of dPEX – Step 1

Der Weg zum Modul

Veröffentlicht am Mittwoch, 02.07.2014

 

Im ersten Beitrag der Beitragsreihe "Evolution of dPEX" beschäftigen wir uns mit dem Umbau des Powershell Skriptes zum einfach zu wartenden und erweiterbaren Powershell Modul.

Einleitung Powershell Module

Powershell bietet seit der Version 2.0 die Möglichkeit eigene Module zu erstellen. Diese Module lassen sich dann sehr einfach in eine laufende Powershell-Session integrieren und wieder entfernen.

PS C:> Get-Module –ListAvailable

ModuleType Name                                ExportedCommands
---------- ----                                ----------------
Manifest   AppLocker
Manifest   BitsTransfer
Manifest   CimCmdlets
Manifest   ISE
Manifest   Microsoft.PowerShell.Diagnostics
Manifest   Microsoft.PowerShell.Host
…

Eigene entwickelte Module können von einem bestimmten Pfad aus importiert werden, oder sie werden im oben genannten Befehl angezeigt, wenn sie im „PSModulePath“ abgelegt sind. Damit ist eine Installation des Moduls auf bestimmten Computern oder für bestimmte Benutzer einfach zu realisieren. Innerhalb eines Moduls können Funktionen und Variablen definiert werden, die innerhalb des Kontextes des Moduls „sichtbar“ sind. Beim Import des Moduls werden aber nur die Funktionen und Variablen an die Powershell-Session weitergegeben, die explizit dafür vorgesehen sind. Interne Funktionen (wie z.B. DSMInitializeRequest) sind damit vor dem Anwender des Moduls versteckt.

Erzeugung eines neuen Moduls dPEX

Metadaten eines Moduls werden im sog. Manifest gespeichert. Zur Erstellung eines solchen gibt es ein Powershell-Commandlet:

New-ModuleManifest

Unser neues Modul legen wir direkt im benutzerbezogenen „PSModulePath“ an (%Documents%WindowsPowershellModules). Dabei muss es in einem gleichnamigen Unterordner abgelegt werden, damit es von

Get-Module –ListAvailable

erkannt wird. In unserem Fall nennen wir das Modul „dPEX“ und legen es deshalb im Unterordner „dpex“ ab.

„New-ModuleManifest“ fragt einige Parameter ab und legt dann ein „Module Manifest“ („dPEX.psd1“) an, in welchem die Metadaten unseres neuen Moduls gespeichert sind. Dieses Manifest kann nach der Erstellung noch editiert werden, wenn z.B. Versionsnummern oder abhängige Module geändert werden müssen.

PS C:”…”DocumentsWindowsPowershellModulesdPEX> New-ModuleManifest

cmdlet New-ModuleManifest at command pipeline position 1
Supply values for the following parameters:
Path: .dpex.psd1
NestedModules[0]:
Author: Lars Junkmann
CompanyName: Solmera GmbH
Copyright: none
ModuleToProcess: dPEX
Description: noch nicht
TypesToProcess[0]:
FormatsToProcess[0]:
RequiredAssemblies[0]:
FileList[0]:

Das eigentliche Skript des Moduls ist bei den oben benutzen Eingaben in einer Datei „dPEX.psm1“ zu speichern (vgl. „ModuleToProcess“). Ein fertiges Modul lässt sich aus der dPEX Version 1.0.0.6 jetzt ganz einfach erzeugen, indem das „dPEX.ps1“ in „dPEX.psm1“ umbenannt und im Modulverzeichnis gespeichert wird. Durch die Einstellung im Manifest, dass alle Funktionen und Variablen exportiert werden, verhält sich das Modul damit dann äquivalent zum Skript, mit dem Vorteil, dass es auch wieder aus der laufenden Session entfernt werden kann.

# Functions to export from this module
FunctionsToExport = '*'

# Cmdlets to export from this module
CmdletsToExport = '*'

# Variables to export from this module
VariablesToExport = '*'

Leichtere Wartung von Einzelkomponenten

Zur leichteren Verwaltung und Wartung der Einzelkomponenten des bisherigen Skripts habe ich die Funktionen entsprechend der Aufgaben in einzelne Dateien gespeichert. Diese Dateien werden dann vom Modulskript „dPEX.psm1“ geladen.

#region Load the module commands.

. "$PSScriptRootdPEXdPEX.Base.ps1"
. "$PSScriptRootdPEXdPEX.Objects.ps1"
. "$PSScriptRootdPEXdPEX.Computer.ps1"
. "$PSScriptRootdPEXdPEX.Container.ps1"

Zusätzlich gebe ich durch „Export-ModuleMember“ an, dass alle Funktionen, Variablen und Cmdlets explizit zu exportieren sind. Dies geschieht dann in den einzelnen Skripten bei der jeweiligen Definition der Funktion/Variable durch z.B.:

Export-ModuleMember -Variable administrationService
Export-ModuleMember -Function New-DSMScriptingEnvironment
Download dPEX - Step 1 - V1.1.0.0
 
 
 
Autor: Lars Junkmann
 
Markiert in: Powershell, DSM, SOAP
 
 

Vertrieb und Support

Emails    
 
Free Call    
+49 (08 00) 00 765 00
kostenfreier Anruf