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
How to write a PowerShell module manifest
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.