- 2 Abschnitte
- 16 Lektionen
- Um den Kurs in deinem Profil zu hinterlegen klicke oben auf Starten
- Grundlagen & Einstieg9
- Fortgeschritten8
Arbeiten mit Modulen
Skripte sind toll – aber sobald du mehrere davon hast, willst du nicht jedes Mal dieselben Funktionen hineinkopieren. Dafür gibt es Module.
Ein Modul ist ein Container für wiederverwendbaren PowerShell-Code: Funktionen, Variablen, Klassen oder Cmdlets, die zusammengehören.
Damit kannst du eigene „Bibliotheken“ aufbauen, gepflegt versionieren und sie sogar an andere weitergeben.
Was ist ein Modul?
Ein Modul kann eine einfache .psm1-Datei oder ein kompletter Ordner mit Metadaten und Unterdateien sein.
Wenn du ein Modul importierst, werden alle enthaltenen Funktionen im aktuellen PowerShell-Kontext verfügbar.
| Typ | Beschreibung | Beispiel |
|---|---|---|
| Script-Modul (.psm1) | Enthält PowerShell-Code (Funktionen etc.) | MeinModul.psm1 |
| Manifest-Modul (.psd1) | Enthält Metadaten (Name, Version, Autor, Beschreibung) | MeinModul.psd1 |
| Binary-Modul (.dll) | Enthält kompilierte Cmdlets (C# /.NET) | Microsoft.PowerShell.Management.dll |
Warum Module?
Denke an Module wie an Werkzeugkoffer.
Statt überall Schraubenzieher herumliegen zu haben, legst du alle wichtigen Tools an einen festen Platz und beschriftest den Koffer.
So weiß PowerShell, wo sie deine Funktionen findet – und du kannst denselben Code in vielen Projekten nutzen.
Vorteile:
Funktionen zentral verwalten
Code auf mehreren Rechnern wiederverwenden
Automatische Versionskontrolle über das Manifest
Klare Abgrenzung zwischen internem Code und öffentlich exportierten Funktionen
Sauber dokumentierte Hilfeeinträge pro Modul
Dein erstes eigenes Modul
Modulordner anlegen
PowerShell sucht Module standardmäßig in den Pfaden, die in$env:PSModulePathgespeichert sind.
Der übliche Ort für eigene Module ist:
C:\Users\<Benutzer>\Documents\PowerShell\Modules\<Modulname>\
Beispiel:
C:\Users\Ricky\Documents\PowerShell\Modules\Werkzeugkasten\
2. Moduldatei erstellen
Lege darin eine Datei Werkzeugkasten.psm1 mit folgendem Inhalt an:
function Sag-Hallo {
param([string]$Name)
"Hallo $Name, willkommen im Werkzeugkasten!"
}
function Verdopple {
param([int]$Zahl)
return $Zahl * 2
}
Export-ModuleMember -Function Sag-Hallo, Verdopple
Mit Export-ModuleMember bestimmst du, welche Funktionen sichtbar sind, wenn das Modul importiert wird.
3. Modul laden und testen
Import-Module Werkzeugkasten
Sag-Hallo -Name "Ricky"
Verdopple -Zahl 10
Ergebnis:
Hallo Ricky, willkommen im Werkzeugkasten!
20
So findet PowerShell deine Module
PowerShell durchsucht beim Import automatisch alle Ordner in $env:PSModulePath.
$env:PSModulePath -split ';'
Wenn dein Modul im Benutzer-Module-Pfad liegt, kannst du es einfach mit Import-Module Werkzeugkasten laden, ohne Pfad anzugeben.
Liegt es woanders, gib den vollständigen Pfad an:
Import-Module "C:\Skripte\Werkzeugkasten\Werkzeugkasten.psm1"
Geladene und verfügbare Module prüfen
Get-Module # zeigt geladene Module
Get-Module -ListAvailable # zeigt alle auf dem System installierten Module
Ein Modul wieder entladen:
Remove-Module Werkzeugkasten
Modulversionen
Wenn du dein Modul weiterentwickelst, kannst du Versionen verwalten, indem du Unterordner anlegst:
Werkzeugkasten\
├─ 1.0.0\
│ ├─ Werkzeugkasten.psm1
│ └─ Werkzeugkasten.psd1
└─ 1.1.0\
├─ Werkzeugkasten.psm1
└─ Werkzeugkasten.psd1
Beim Import wird automatisch die neueste Version verwendet.
Wenn du eine bestimmte willst:
Import-Module Werkzeugkasten -RequiredVersion 1.0.0
Das Manifest (.psd1)
Das Manifest ist die „Visitenkarte“ deines Moduls – eine strukturierte Datei mit Informationen wie Name, Version, Autor, Beschreibung, Exporten usw.
Du kannst sie automatisch erzeugen:
New-ModuleManifest -Path "$HOME\Documents\PowerShell\Modules\Werkzeugkasten\Werkzeugkasten.psd1" `
-RootModule "Werkzeugkasten.psm1" `
-Author "Ricky" `
-Description "Ein einfaches Beispielmodul mit zwei Basisfunktionen"
Beispielinhalt:
@{
RootModule = 'Werkzeugkasten.psm1'
ModuleVersion = '1.0.0'
Author = 'Ricky'
Description = 'Ein Beispielmodul mit Begrüßungs- und Mathefunktionen'
FunctionsToExport = @('Sag-Hallo','Verdopple')
}
Damit PowerShell dein Modul vollständig erkennt, sollten .psm1 und .psd1 denselben Namen haben.
Automatisches Laden
Ab PowerShell 3.0 werden Module automatisch geladen, wenn du eine ihrer Funktionen verwendest.
Beispiel:
Wenn du Sag-Hallo tippst und das Modul im Modulpfad liegt, lädt PowerShell es still im Hintergrund.
Interne vs. öffentliche Funktionen
In einem Modul möchtest du oft Hilfsfunktionen behalten, die nur intern verwendet werden.
Mit Export-ModuleMember steuerst du, was sichtbar ist.
Alles, was du nicht exportierst, bleibt privat.
Beispiel:
function _BerechneIntern {
# private Hilfsfunktion
}
function Offiziell {
"Diese Funktion darf aufgerufen werden"
}
Export-ModuleMember -Function Offiziell
Modul neu laden
Wenn du Änderungen an der .psm1 vornimmst, musst du das Modul neu laden, sonst arbeitet PowerShell mit der alten Version im Speicher.
Import-Module Werkzeugkasten -Force
Oder, wenn du ganz sauber sein willst:
Remove-Module Werkzeugkasten
Import-Module Werkzeugkasten
Module teilen oder veröffentlichen
Wenn du dein Modul anderen geben möchtest, kannst du es:
als ZIP weitergeben (Ordnerstruktur beibehalten)
auf ein gemeinsames Netzlaufwerk legen (das im Modulpfad enthalten ist)
oder öffentlich in der PowerShell Gallery bereitstellen.
Installation von dort erfolgt ganz einfach:
Install-Module -Name Az -Scope CurrentUser
PowerShell lädt das Modul aus der Gallery und legt es automatisch im richtigen Pfad ab.
Für eigene Module kannst du auch eine private Gallery oder einen internen Artefakt-Feed verwenden (NuGet-basiert).
Beispiel: Kleines Administrationsmodul
# Datei: AdminTools.psm1
function Get-FreeDiskSpace {
param([string]$ComputerName = $env:COMPUTERNAME)
Get-WmiObject Win32_LogicalDisk -ComputerName $ComputerName -Filter "DriveType=3" |
Select-Object DeviceID, @{n='FreeGB';e={[math]::Round($_.FreeSpace / 1GB,2)}}
}
function Get-LoggedOnUser {
param([string]$ComputerName = $env:COMPUTERNAME)
Get-WmiObject Win32_ComputerSystem -ComputerName $ComputerName |
Select-Object UserName
}
Export-ModuleMember -Function Get-FreeDiskSpace, Get-LoggedOnUser
Danach kannst du auf jedem Rechner (oder per Remoting) damit arbeiten:
Import-Module AdminTools
Get-FreeDiskSpace -ComputerName SRV-01
Get-LoggedOnUser -ComputerName SRV-02
Visualisierung: Modulstruktur
Werkzeugkasten
│
├── Werkzeugkasten.psm1 # Enthält die eigentlichen Funktionen
├── Werkzeugkasten.psd1 # Enthält Metadaten (Name, Version, Autor)
└── (optional weitere Skripte, z. B. Hilfsfunktionen)
