Jetzt testen

Weihnachts-Spaß mit PowerShell und ScriptRunner

Inhaltsverzeichnis

Post Featured Image

Weihnachten ist die schönste Zeit des Jahres: Geschenke, Glühwein, die Liebsten unter dem Mistelzweig küssen. Die aufwendige Dekoration, der Weihnachtsbaum und die mitreißende Musik … lieben wir das nicht alle?

Leider hat COVID-19 das meiste davon unmöglich gemacht. Auf der positiven Seite werden die Leute während des Lockdowns kreativ. Wir haben die Chance genutzt, um die Möglichkeiten von ScriptRunner in Kombination mit einer IOT-Box zu demonstrieren.

Hinweis: Die Scripte und Beispiele sind für Demozwecke erstellt und nicht serienreif, daher erfolgt die Verwendung auf eigene Gefahr!

1. Hardware-Voraussetzungen

Für dieses Projekt haben wir eine NETIO-4C steuerbare PDU verwendet. Diese magische Blackbox hat 4 x 230V Ausgänge, die mit verschiedenen Protokollen (REST API, SNMP, MQTT, Modbus/TCP) angesteuert werden können. Für unsere kleine Demo haben wir folgende Geräte an die Ausgänge angeschlossen und die Ausgänge im Webinterface entsprechend benannt (Abbildung 1):

  1. Xmas Tree
  2. Disco Light
  3. Santa Claus

Ausgang #4 wurde für unser Projekt nicht verwendet.

Bild1

Abb. 1: Benennung der Ausgänge im Webinterface der NETIO-4C-PDU

Außerdem haben wir einen „write“-Benutzer mit einem Passwort angelegt und die entsprechenden API-Berechtigungen vergeben.

Abbildung 2 zeigt unseren Testaufbau:

Foto des Testaufbaus, das die pdu-Box, eine LED-Weihnachtsdekoration, eine LED-Diskokugel und eine elektrische Weihnachtsmannpuppe zeigt

Abb. 2: Der Versuchsaufbau

2. Vorbereitung der Rest-API

REST steht für REpresentational State Transfer. Es ist ein Ansatz, um in der heutigen Zeit API’s zu erstellen. API steht für Application Programming Interface und kann mit einem Kellner im Restaurant verglichen werden, der die Bestellung vom Kunden an die Küche weitergibt und das Ergebnis an den Kunden liefert.

Die Hauptbausteine der REST-API-Architektur sind:

  • BASE-URI
  • ENDPOINT
  • ACTION (get, post, put, merge, delete,….)

Erläutern wir dies anhand eines kurzen PowerShell-Beispiels:

 

und der Endpoint ist 007. Das von der API gelieferte Ergebnis ist eine Liste der James Bond-Filme mit einigen Details in JSON-Format.

Um das Ergebnis lesbar zu machen, können Sie es mit dem Commandlet ConvertFrom-Json von JSON in ein PowerShell-Objekt konvertieren (Abbildung 3)

Screenshot: PowerShell-Ausgabe bei Ausführung des obigen Befehls

Abb. 3: Liste der James Bond-Filme, die mit PowerShell über eine REST-Api abgerufen wird

3. Auslesen der Ausgänge

Sie benötigen einige Informationen, um mit der Scripterstellung zu beginnen:

  • Hostname/IP Ihrer Box
  • Credentials
  • Base-URI und Endpoint
Screenshot: PowerShell-Ausgabe von Variable $io_box

Abb. 4: PowerShell Ausgabe der Variablen $io_box

Wenn Sie die 2 Codezeilen in eine Funktion umwandeln und die Html-Formatierungs- und Formgebungsfunktionen von ScriptRunner nutzen (Abbildung 5), erhalten Sie eine wirklich schöne Ausgabe:

Bild5

Abb. 5: Mit ScriptRunner können wir die PowerShell-Ausgabe in einen HTML-Bericht umwandeln

Die folgende Funktion gibt den inversen Zustand eines gegebenen Ausgangs zurück. Die erforderlichen Parameter sind:

  • Credentials, durch Verwendung des Typs System.Management.Automation.PSCredential (die eingebaute Credential-Verwaltung von ScriptRunner kann verwendet werden)
  • IP, durch Verwendung des Typs ipaddress wird eine eingebaute Validierung durchgeführt
  • Der Ausgang, der von 1 bis 4 begrenzt ist, da wir 4 Ausgänge zur Verfügung haben

 

4. Einstellen der Ausgänge

Die folgenden Parameter sind erforderlich, um den Ausgangszustand festzulegen:

  • HostName, URI und Endpunkt Ihrer Box
  • Credentials
  • Ein Body im JSON-Format, der die Ausgangsdefinition enthält:
    • ID, die die Nummer des Ausgangs darstellt (1-4)
    • Action, die den gewünschten Zustand darstellt (0 = Aus, 4 = Ein)Wenn wir dieses Stück Code in eine nette Funktion verpacken, sieht das folgendermaßen aus:

5. Showtime!

Basierend auf dieser Funktion erstellen wir eine Action im ScriptRunner Portal. Zur einfacheren Handhabung betten wir sie in eine Webseite ein. Das neue ScriptRunner Portal Widget ist dafür perfekt geeignet.

Wenn wir die Codestücke in ScriptRunner zusammensetzen und die Schnittstelle für die IOBox mit dem Portal-Widget kombinieren, erhalten wir eine schöne Übersicht, wie in Abbildung 6 zu sehen ist … und den Rest sehen Sie im Demo-Video.

Screenshot: Übersicht der NETIO-Ausgänge in der Weboberfläche neben der ScriptRunner-Aktion, die zur Steuerung des Prüfaufbaus dient

Abb. 6: Mit dem ScriptRunner-Portal-Widget können wir unseren Testaufbau nun bequem per PowerShell steuern

Das Video

Wie Sie im Video sehr schön sehen können, haben wir uns mit wenigen Schritten eine eigene kleine weihnachtliche Kommandozentrale gebaut.

Wenn Sie dieses Projekt inspiriert hat, würden wir uns natürlich freuen, wenn Sie Ihre Ergebnisse mit uns teilen, z. B. auf Twitter unter dem Hashtag #merryscriptmas.

Viel Spaß beim Scripten & frohe Feiertage!

Weiterführende Links

Über den Autor: