Wie man sein eigenes PowerShell Modul erstellt

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

 

Writing a Windows PowerShell Module

https://docs.microsoft.com/en-us/powershell/scripting/developer/module/writing-a-windows-powershell-module?view=powershell-7.1

  

How to write a PowerShell module manifest

https://docs.microsoft.com/en-us/powershell/scripting/developer/module/how-to-write-a-powershell-module-manifest?view=powershell-7.1

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

Publizieren des Moduls in der PowerShell Gallery

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.

How to Publish Your First PowerShell Gallery Package

https://jeffbrown.tech/how-to-publish-your-first-powershell-gallery-package/

Publish-Module

https://docs.microsoft.com/en-us/powershell/module/powershellget/publish-module?view=powershell-7.1

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