Zum Hauptinhalt springen

DashOps - Eine generische GUI zur Shell-Befehlsausführung

·1048 Wörter

Meine Intention mit diesem Artikel ist es, DashOps als Beispiel für eine Brücke zwischen avancierter und zugänglicher Benutzerschnittstelle vorzustellen. Ich möchte die Motivation für das Projekt und die Entwicklung kurz darstellen. Der Artikel soll ein Startpunkt sein. In nachfolgenden Artikeln werde ich auf einzelne Aspekte tiefer eingehen.

Dieser Artikel nimmt Bezug auf:

Einleitung #

2018 übernahm ich die Verantwortung für eine Reihe von Linux-Servern, die ich von einem Windows-Desktop aus betreuen musste. Es gab zu dem Zeitpunkt bereits eine Reihe von PowerShell-Skripten, die Administrationstätigkeiten auf den Servern automatisierten. Dabei kam u. a. SSH, SFTP und Docker-Compose zum Einsatz. Einige Skripte konnten für mehrere Server genutzt werden, andere waren hingegen für Dienste zuständig, die nur auf einem einzelnen Server liefen. Obwohl ich mich in einer Shell nicht unwohl fühle, verspürte ich schnell den Bedarf für eine Oberfläche, mit der ich die verschiedenen Skripte nach mehreren Perspektiven filtern und komfortabel ausführen könnte. Ich vermute das liegt daran, dass ich ein visueller Typ bin und es mir i. d. R. hilft, möglichst viele Aspekte meiner jeweiligen Arbeit grafisch vor mir zu sehen.

Ich sammelte einige Anforderungen und begann eine schlichte GUI mit C# und WPF zu bauen. In der Zeit entwickelte sich gerade ein gewisser Hype um den neuen Begriff DevOps1 und ich ließ mich verleiten meine GUI in Anlehnung daran DashOps2 zu nennen. Die jeweils aktuelle Version kann auf GitHub3 heruntergeladen werden.

Meine Anforderungen #

Der Fokus für das Projekt war zunächst, wie eben beschrieben, die Ausführung von PowerShell-Skripten mit administrativen Funktionen. Daraus leitete ich die folgenden Anforderungen ab:

  • Definition von Aktionen in Form von PowerShell-Skripten oder Shell-Befehlen
  • Filtern von Aktionen nach verschiedenen Perspektiven (Server, Service, Tätigkeit)
  • Nachvollziehbarkeit durch Protokollierung der Ausführung von Aktionen einschließlich der Standard- und Fehlerausgabe, der Ausführungszeit und des Exit-Codes
  • Unterschiedliche Ausführungsmodi
    • Terminalfenster anzeigen oder verbergen
    • Terminalfenster nach Ausführung offen halten oder schließen
    • Vor Ausführung Sicherheitsnachfrage einblenden oder direkt ausführen
  • Visualisierung der letzten Ausführung jeder Aktion durch ein Symbol für Erfolg und Fehler
  • Überwachung von Diensten durch regelmäßiges Ausführen eines Befehls und Auswertung der Ergebnisse: Exit-Code, Stichwort in Ausgabe
  • Überwachung von Web-Diensten durch regelmäßigen Abruf einer HTTP-URL und Auswertung der Antwort: HTTP-Status, Stichwort in HTML-Inhalt

Ergebnis #

Die erste Version von DashOps entstand zwischen April und Juli 2018.

Screenshot von DashOps v1
DashOps Version 1

Ich bemerkte schnell, dass ich DashOps auch in anderem Kontext gut gebrauchen konnte. Ich arbeitete mehrere Jahre an einem größeren Softwareprojekt, welches einige Skripte und Befehle für bestimmte Entwicklungsschritte enthielt. Z. B. das Leeren und Initialisieren einer Datenbank mit verschiedenen Zuständen, das Erstellen oder Zurückrollen von Datenbankmigrationen, Transpilieren des JavaScript-Codes für die Web-UI oder auch das Starten und Beenden von Service-Programmen in verschiedenen Konstellationen, die mit der Hauptanwendung in Beziehung standen. DashOps war gut geeignet, um mir einen übersichtlichen Zugang zu den verschiedenen Skripten und Befehlen zu geben. Gerade dann, wenn eine längere Zeit zwischen der Nutzung verging. Ich behielt besser im Blick, was bereits automatisiert war und wann ich welches Skript zuletzt genutzt hatte. Es ermöglichte mir einen einfachen und explorativen Zugang zu der avancierten Schnittstelle der Skripte.

Anfang diesen Jahres (2025) griff ich das Projekt wieder auf und implementierte die Benutzeroberfläche neu, um dem Fluent-Design des Windows 11 Desktops gerecht zu werden. Dabei erweiterte ich die Fähigkeiten der Anwendung an mehreren Stellen und integrierte einen Editor mit Syntax-Highlighting und Code-Vervollständigung für die YAML-Konfiguration. Das Ergebnis ist Version 2.

Screenshot von DashOps v2
DashOps Version 2

Es gibt noch eine ganze Reihe von Funktionen, die ich gerne in DashOps sehen würde, aber noch nicht implementieren konnte.

Eine Brücke #

DashOps stellt ein Beispiel für Anwendungen dar, die die Brücke zwischen Befehlszeilenprogrammen und grafischer Benutzeroberfläche spannen. Anders als z. B. FotoKilof4 oder grafische Oberflächen für OpenSSL5, welche auf ein konkretes Befehlszeilenprogramm spezialisiert sind, erleichtert DashOps einem Anwender den Zugang zu einer Sammlung von Skripten und Befehlen. Es kann dabei naturgemäß keine spezialisierte Oberfläche für einzelne Skripte anbieten, vielmehr bietet es einen explorativen Zugang zu den gemeinsamen Aspekten aller Befehlszeilenprogramme:

  • Befehlszeile mit Parametern
  • Arbeitsverzeichnis
  • Umgebungsvariablen
  • Standard- und Fehlerausgabe
  • Exit-Code

Die Aktionen, die in DashOps mit Hilfe von Schaltflächen ausführbar sind, werden in einer JSON- oder YAML-Datei definiert. Das Bearbeiten dieser Konfiguration ist nicht kompliziert, setzt aber technisches Know-How voraus und kann schlecht von einem Anwender geleistet werden, der keine grundlegenden Kenntnisse im Umgang mit der Shell und Konfigurationsdateien besitzt. Das ist aber kein Hindernis, weil schon die Formulierung der Befehlszeile für eine Aktion Kenntnisse über die Shell voraussetzt.

Die grafische Oberfläche von DashOps ist also ohne oder mit sehr wenig technischem Hintergrundwissen nutzbar, während die Programmierung von Skripten und die Konfiguration von DashOps Benutzern mit den entsprechenden Kenntnissen vorbehalten ist. Damit wird eine Brücke zwischen den bevorzugten Werkzeugen von Administratoren und Programmierern und einer Nutzerschaft ohne Shell- oder Programmierkenntnissen geschlagen. Administratoren und Programmierer können so in einigen Fällen den Aufwand einer grafischen Benutzeroberfläche vermeiden und einfache Skripte oder Befehlszeilenprogramme entwickeln. Für die Nutzer wird lediglich zusätzlich eine DashOps-Konfiguration angelegt und damit eine einfache GUI bereitgestellt.

Grenzen #

DashOps passt nicht zu jedem Szenario. Es bietet zur Zeit keine Möglichkeit zur Benutzereingabe von dynamischen Werten für Befehlszeilenargumente. Die grafische Ergebnisdarstellung einer Ausführung beschränkt sich im Moment auf erfolgreich oder fehlgeschlagen. Es kann jedoch unkompliziert eine Protokolldatei mit der vollständigen Ausgabe einer Ausführung aufgerufen werden.

DashOps verwendet entweder die klassische Windows-Konsole oder den modernen Windows Terminal. Es besitzt aber keinen integrierten Terminal für die Live-Ausgabe einer Ausführung. Es kann jedoch Aktionen als Tabs in einem benannten Windows Terminal-Fenster ausführen, so dass sich nicht für jede Aktion ein neues Fenster öffnet.

DashOps ist auf den Windows-Desktop beschränkt. Aber es gibt auch verwandte Anwendungen die über den Browser nutzbar sind, z. B. das Projekt OliveTin6.

Zusammenfassung #

DashOps hat sich aus einem persönlichen Bedarf für eine explorative GUI zur nachvollziehbaren Ausführung von Skripten und Befehlen entwickelt. Nicht lange nach dem es für die Ausführung von Skripten zur Serverwartung einsatzbereit war, wurde klar, dass es sich auch gut für die Ausführung von Skripten in anderen Szenarien wie einem Softwareentwicklungsprojekt eignet. Die Filtermöglichkeiten über die sichtbaren Aktionen und die Protokolle zur Nachvollziehbarkeit sind auch dort eine willkommene Bereicherung.

DashOps bildet eine Brücke zwischen den avancierten Interaktionswegen von Administratoren und Programmieren und den zugänglichen Interaktionswegen, die für weniger technische Nutzer besser geeignet sind.