ReportWeb - Pfade

Die universelle Plattform zur Anzeige von Informationen ist ein Browser und ein Webserver kann die Inhalte bereitstellen. Stellt sich also noch die Frage, wie die Inhalte entstehen. Dynamische Seiten wie ASP (VBScript-ähnlich) oder ASPX (C#) sind für die meisten Administratoren zu aufwändig und knifflig zu debuggen. Zudem sind aktive Seiten immer auch ein Risiko, wenn bestimmte Prozesse mit erweiterte Rechte benötigen. Zudem ist es nicht so einfach, direkt PowerShell aufzurufen, auch wenn es mit PowerShell ASP (http://www.PowerShellinside.com/PowerShell/asp/) durchaus interessante Dinge gibt.

Ich habe mich für PowerShell-Skripte in Reinform entschieden, welche durch den Windows Taskplaner regelmäßig ausgeführt werden, um die entsprechenden HTML-Dateien zu erzeugen. Wie werden erstaunt sein, wie einfach und effektiv das sein kann. Damit das nun kein Mega-Skript wird, bietet sich der Einsatz von "PowerShell-Skripten" als eigenständige Module an. Anfang hatte ich auch mit echten Modulen (Erweiterung PSM1) gearbeitet, die von einer Masterprogramm einfach mit "import-module" eingebunden und eine vordefinierte Funktion aufgerufen wird. Aber dann ist der Test einzelner Module nicht so einfach. Daher starte ich nun PS1-Dateien, die über die Pipeline die Ausgabe zurück geben.

Das zentrale Skript verwaltet die verschiedenen Module und verbindet diese mit Vorlagen und Ausgabedateien. Dabei kommen neben dem Basis-Verzeichnis mehrere unterverzeichnisse zum Einsatz:

Die Bedeutung im Detail:

Verzeichnis Bedeutung

\

Das Basisverzeichnis enthält alle PowerShell-Skripte und deren Konfiguration.

  • reportweb.cmd
  • reportweb-controller.ps1
  • reportweb-trigger.ps1
  • reportweb-worker.ps1

Zudem die Konfigurationsdateien

  • reportweb.csv
  • reportweb-global.ps1

Und eventuell INCLUDE-Dateien. Hier z.B. das Exchange Modul

CONFIG

Platz für die XML-Dateien zur Konfiguration.

Wir keine XML-Datei als Parameter mit angegeben, dann suchen die Skripte dort erst nach einer "%computername%.xml und dann nach einer reportweb.xml.

LOGS

Dieses Verzeichnis dient zur Ablage von Protokolldateien jeder Form für eine Fehlersuche. In der Regel legt hier der Worker auch für jeden Report eine entsprechende Datei an. ältere Dateien werden automatisch gemäß der Konfiguration wieder gelöscht.

DATA

Sofern Daten von mehreren Reports genutzt werden oder z.B. längere Zeiträume aufgezeichnet werden müssen, werden die Daten hier als CSV, XML o.ä. gespeichert. Es ist auch denkbar, dass ganz andere Programme Daten ermitteln und hier als Metainformation ablegen, so dass ein passendes Modul diese dann im ReportWeb einbinden kann.

JOBSTATUS

Diese Verzeichnis wird vom Controller und Worker genutzt, um den Status der aktuellen Jobs abzulegen. Sie finden hier Dateien mit dem Reportnamen und der Endung DONE, RUN, ERR, TRIGGER, die den Status anzeigen. Zudem locken hier der Worker und Controller Dateien, so lange Sie ablaufen. So können andere Prozesse erkennen, wer noch aktiv ist.

HTML

Dieses Verzeichnis wird z.B.: über einen IIS zugänglich gemacht. Der IIS und ACLs bestimmen, wie sich Anwender anmelden müssen, um die Berichte zu sehen. Es reicht allein lesender Zugriff. Dieses Verzeichnis enthält keine ausführbaren Komponenten. Denkbar sind natürlich unterverzeichnisse für die Ablage von Bildern oder JavaScript für den Client (JQuery o.ä.)

In diesem Verzeichnis legt der "Worker" auch die Ergebnisse ab. Natürlich können auch unterverzeichnisse verwenden werden, um eine Struktur oder Berechtigungen umzusetzen.

HTML\Templates

Das Hauptprogramm fügt die vom Modul erstellten Informationen in ein Template ein und speichert es wieder ab. Die Ablage dieses Templates im HTML-Verzeichnis erlaubt eine einfacher Erstellung, da Pfade zu Stylesheets etc. mit der Ausgabe übereinstimmen.

Hier lege ich auch die HTML-Vorlagen, DWT-Vorlagen, Logos, Bilder und CSS-Dateien. Damit enthält dieses Verzeichnis quasi alle Kundennahen Einstellungen bezüglich der Webseite.

HTML\Trigger

Hier befindet sich die ASPX-Seite, um Berichte anzutriggern. Siehe auch Reportweb:Trigger

HTML\Error

Der Worker "fängt" die Errors der Skripte ab und legt hier eine zum Report passende Datei ab, die etwaige Fehler enthält. So kann der Admin per Browser schnell sehen, wann die Daten erstellt wurden und welcher Fehler im Report aufgetreten ist.

MODULES

In diesem Verzeichnis befinden sich die eigentlichen aktiven Programme, welche vom Hauptprogramm dynamisch geladen und ausgeführt werden. Sie können selbst Daten ermitteln oder auf zugelieferte Daten aus dem Verzeichnis DATA aufbauen. Ob ein Report selbst Daten ermitteln oder nicht, hängt davon ab, ob die Daten von mehreren Reports genutzt werden können und die Ermittlung "teuer" ist.

INCLUDE

Viele Report-Module benötigen weitere Commandlets, die sie sich z.B. per Import einbinden. Exchange und Lync aber auch Office 365 sind hier Beispiele, die immer wieder verwendet werden. Anstatt nun in jedem Report den Code zu hinterlegen, können die Module diese globalen "Include-"Dateien nutzen.

Die unterteilung in Verzeichnisse hat auch den Vorteil, dass statische Inhalte und Code von den zu verändernden Dateien wie Konfiguration, Modulen, HTML-Code einfach getrennt werden. Ich versuche, auch wenn ich es nicht versprechen kann, dass neue Versionen einfach durch ein COPY installiert werden können.