Wie man sein eigenes PowerShell Modul erstellt

Page content

Hallo zusammen,

Bereits vor längerer Zeit habe ich mich mal damit befasst, wie man ein PowerShell Modul schreibt.

Im Prinzip besteht das ganze aus einem Ordner und mindestens zwei Dateien:

  • .psm1 –> PowerShell Script Module
  • .psd1 –> PowerShell Module Manifest

Docs

Ich habe den Ordner Icewolf.DemoModule erstellt. Anschliessend mit dem folgenden Befehl ein Modul Manifest erstellt

New-ModuleManifest -Path C:\GIT\_WorkingDir\PowerShellScripts\Icewolf.DemoModule\Icewolf.DemoModule.psd1 -ModuleVersion "1.0" -Author "Andres Bohren"

Das erstellt eine *.psd1 Datei im Ordner

Anschliessend habe ich ein PowerShell Script Modul erstellt “Icewolf.DemoModule.psm1”

##############################################################################
# Icewolf.DemoModule
# V1.0.0 30.09.2021 - Andres Bohren / Initial Version
##############################################################################
#Requires -Modules NetTCPIP*
*Function Get-DemoCommand
{
    # 
    .SYNOPSIS
    .DESCRIPTION
        Description of your Module. This is just a Demo Powershell Module
    .PARAMETER DemoParameter
        Just a Parameter for Demo Effect*
    .EXAMPLE
        .\Get-ComputerIP -Demoparameter*
    .LINK

Param(
        [parameter(Mandatory=$true)][String]$Demoparameter
        )
    Begin {
        Write-Host "Value of DemoParameter: $Demoparameter"
        Get-NetIPAddress -AddressFamily IPv4 -AddressState Preferred | Format-List InterfaceAlias, IpAddress
    }
}

So sieht das ganze nun aus

Im Manifest müssen noch das RootModule und die Funktionen welche exportiert (vom Benutzer des Moduls genutzt werden können) angegeben werden.

Mit folgendem Befehl wird das Modul geladen und die Commands und die Hilfe (Synopsys) des Moduls angezeigt

Import-Module C:\GIT\_WorkingDir\PowerShellScripts\Icewolf.DemoModule
Get-Module
Get-Command -Module Icewolf.DemoModule
Get-Help Get-DemoCommand

Also führen wir die Funktion aus dem Modul mal aus

Get-DemoCommand -Demoparameter Test

Wenn der Ordner mit dem Modul in einem der folgenden Pfade liegt, dann kann das Modul ohne Pfadangabe geladen werden.

($Env:PSModulePath).split(";")

Beim Testen des Moduls daran denken, dass wenn etwas verändert wird, das Modul zuerst entfernt und dann neu geladen werden muss.

Remove-Module Icewolf.DemoModule
Import-Module C:\GIT\_WorkingDir\PowerShellScripts\Icewolf.DemoModule

Wer mag, kann jetzt noch sein Modul in der PowerShell Gallery veröffentlichen. Dazu braucht man einen Account und einen API Key der PowerShell Gallery. Habe ich jetzt natürlich mit dem DemoModul nicht gemacht.

Publish-Module -Path C:\GIT\_WorkingDir\PowerShellScripts\Icewolf.DemoModule -NuGetApiKey <NuGetAPIKey> -Verbose

Ich hatte in der Vergangenheit Probleme beim Publizieren. Einzige Abhilfe hat das Ändern der Systemsprache gebracht.

Liebe Grüsse
Andres Bohren