Managementfunktionen (1/2): Für PowerShell eigene Cmdlets erstellen ist simpel

Hiermit starte ich einen zweiteiligen Artikel zu Architektur, Managementfunktionen und PowerShell! Im Teil 1 geht es um die Erstellung von einfachen Cmdlets für die PowerShell und im Teil 2 geht es um die Integration in eine Anwendungsarchitektur. Ich setzt die Kenntnis der PowerShell voraus (Verb-Noun; PowerShell Hosting Engine; Import-Module; .NET Assembly).

Teil1

Entwicklerbrille: Als Entwickler macht man sich in Projekten viele Gedanken zur Anwendungsarchitektur, über Programmiersprachen, nutzbaren Frameworks, Schnittstellen, UserExperience, … . Was kann uns die Entwicklung vereinfachen und dem Kunden eine tolles Softwareerlebnis bieten? Ich spare mir hier die übliche Auflistung von Beispielen wie Angular, TypeScript, BootStrap, ASP.NET MVC u.v.m. Ist die Anwendung ausgeliefert und in den Betrieb übergeben, sind viele Entwickler raus.

Das ist falsch!

Denn auch im Betrieb gibt es das ein oder andere, was wir als Entwickler für die lieben Admins tun können. Das Zauberwort heißt Managementfunktionen!

Vom Entwickler angebotene Managementfunktionen könnten z.B. als REST API angeboten werden, was der Entwickler für die Anbindung einer Client-Web-Anwendung an das Hintergrund-(Server-)System sowieso erstellt. Jedoch ist PowerShell bestens geeignet für viele administrative Aufgaben und in Admin-Kreise noch weit vertreten.

Die Erstellung eines eigenen Cmdlets ist dabei sehr einfach und mit wenigen Handgriffen erledigt:

  • Im Visual Studio eine Klassenbibliothek erstellen bzw. dem eigenen Software Projekt hinzufügen.
  • Zur Bereitstellung von Cmdlets müssen wir unsere Klasse von Cmdlet aus dem Namespace System.Management.Automation ableiten. Die Referenz erhält man entweder vom eigenen Rechner oder über NuGet. In NuGet nach Microsoft PowerShell suchen und dort die aktuellste Version dem Projekt hinzufügen.PowerShellNuGet Im Anschluss ist ein Verweis auf das Assembly System.Management.Automation.dll aus dem Packages Ordner hinzuzufügen.
  • Jetzt können wir unser erstes Cmdlet erstellen. Ich habe den Code bei einem Vortrag bei der PowerShell UserGroup Hannover verwendet, deshalb beginnt der Namespace mit Psugh:
    using System;
    using System.Management.Automation;
     
    namespace Psugh.Buchung.PowerShell.Demo1
    {
        [Cmdlet(VerbsCommon.Get, "CurrentTime")]
        public class GetCurrentTimeCommand : Cmdlet
        {
            protected override void ProcessRecord()
            {
                WriteObject("Es ist " + DateTime.Now.ToString() + "!");
            }
        }
    }
  • Nach dem Kompilieren erhält man im bin/debug-Verzeichnis das Assembly. Dieses Modul ist nun in PowerShell zu importieren und das programmierte Cmdlet Get-CurrentTime aufrufen:
    PS C:\Projekte\PSUGH\Buchung\PowerShell\PowerShell\bin\Debug> Import-Module .\Psugh.Buchung.PowerShell.Demo1.dll
    
    PS C:\Projekte\PSUGH\Buchung\PowerShell\PowerShell\bin\Debug> Get-CurrentTime
    
    Es ist 19.02.2018 23:05:57!

 

Ergebnis in der PowerShell:

PowerShellImportModuleGetCurrentTime.JPG

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s