erstelle-HTMLReport (PowerShell-Funktion)

Die Idee

Viele meiner Scripte senden mir Daten und Auswertungen per Mail zu. Das Lesen kann je nach Datenmenge und Mailhäufigkeit schnell zum Zeitfresser werden. Daher färbe ich die Informationen gerne ein und signalisiere damit bereits beim Überfliegen der Mails, ob alles ok ist oder ob vielleicht doch Probleme aufgetreten sind. Gerade am Handy scrolle ich die Mails nur schnell nach unten. Ist alles grün, dann muss ich nicht genauer hinschauen.

Aber wie färbt man gezielt Informationen in der Darstellung? Natürlich mit HTML. Das hat zudem den Vorteil, dass gängige Mailclients den Text korrekt darstellen. Leider hat Microsoft aber kenie passenden cmdlets für meine Aufgabenstellung geliefert. Also habe ich mir eine Funktion für die Lösung erstellt. Diese möchte ich hier kurz vorstellen.

Von der Idee zum Code

Das ist mein Ziel: Bestimmte Informationen sollen sich farblich vom Rest abheben:

PowerShell-Funktion erstelle-HTMLReport

Der HTML-Text dazu sieht dann so aus:

PowerShell-Funktion erstelle-HTMLReport

Im Header definiere ich zu Beginn einige Style-Elemente. Diese kann ich dann in den einzelnen TD-Tags (also den Tabellenzeilen) verwenden. Welche Zeile welche class zugewiesen bekommt, soll durch meine Funktion gesteuert werden.

Das fertige Script

Der finale Code wurde von mir wieder in Teilbereiche untergliedert. Zusätzlich stellte ich mir noch die Anforderung der Pipeline-Fähigkeit. Daher benötigte ich die Blöcke Begin, Process und End:

PowerShell-Funktion erstelle-HTMLReport

Die Parameter habe ich in 3 Teile gegliedert. Deren Verwendung zeige ich nachher praktisch an verschiedenen Beispielen.

Im Block Begin wird der HTML-Header generiert. Natürlich nur, wenn der HTML-Text noch leer ist. So kann ich auch mehrere Tabellen in einer HTML-Datei zusammenfassen, ohne dass es dublizierte Header gibt:

PowerShell-Funktion erstelle-HTMLReport

Im Block Process werden nur die einzelnen Zeilen der Eingabetabelle gesammelt:

PowerShell-Funktion erstelle-HTMLReport

Im Block End passiert das eigentliche Rendern der HTML-Tabelle. Zuerst werden die Spaltennamen in einem TH-Tag gebildet. Diese können automatisch mit get-member ausgelesen werden oder der Anwender gibt sie als Parameterargument mit an:

PowerShell-Funktion erstelle-HTMLReport

Dann wird die Tabelle zeilenweise erstellt. Für jede Zeile können durch Bedingungen die entsprechenden CSS-Classes bestimmt werden:

PowerShell-Funktion erstelle-HTMLReport

Im dritten Teil vom End-Block wird die Ausgabe vorgenommen: Wahlweise als String oder als Datei im Dateisystem:

PowerShell-Funktion erstelle-HTMLReport

Das ist der finale Code:

Mögliche Aufrufe

Und so könnten die Szenarien der Verwendung aussehen. Hier übergebe ich ein paar Zeilen aus der Prozessliste an die Funktion. Mit dem Parameter -Muster generiere ich abwechselnde Hintergrundfarben für die Zeilen. Der Text wird als Ergebnis ausgegeben:

PowerShell-Funktion erstelle-HTMLReport

Im nächsten Beispiel verwende ich Bedingungen für die gezielte Einfärbung der Zeilen. Die Syntax entspricht dabei der vom Cmdlet Where-Object:

PowerShell-Funktion erstelle-HTMLReport

Das dritte Beispiel zeigt die Verbindung von zwei PowerShell-Tabellen in einem HTML-Text. Das Ergebnis des ersten Aufrufs wird in der Variable $HTML gespeichert und beim zweiten Aufruf als Argument übergeben. Die zweite Tabelle wird dabei an die richtige Stelle im HTML-Text eingebettet:

PowerShell-Funktion erstelle-HTMLReport
PowerShell-Funktion erstelle-HTMLReport

Mein 4. Beispiel zeigt die Pipeline-Fähigkeit. Ebenso kann natürlich auch auf die Einfärbung verzichtet werden:

PowerShell-Funktion erstelle-HTMLReport

Zusammenfassung

Die Funktion habe ich bereits in vielen meiner Scripte verbaut. So spare ich mir viel Zeit beim Lesen der unzähligen Logmails pro Tag. Und etwas Farbe kann man auch so immer gut gebrauchen.

Das Script mit Beispielen könnt ihr hier als zip-Archiv herunterladen.

Stay tuned!

Kommentar hinterlassen