Eine eigene Logfunktion mit der Powershell

Ich bin ein Typ der immer alles wissen und vor allem sehen möchte was meine Scripte da so schönes treiben. Leider ist es mit der Powershell recht umständlich Logs zu schreiben und auch zu speichern. Ok mal abgesehen von der Möglichkeit direkt in die Eventlogs von Windows seinen Mist auszukippen.
Bei mir laufen täglich irgendwelche Scripte und ich möchte einfach alles schön auf einen Blick sehen bzw. mir einen kurzen Überblick dabei verschaffen ob auch alles sauber durchgelaufen ist. Außerhalb der Powershell hilft mir hierbei LogExpert.

Ein kurzes Statement zu LogExpert und dem Loggen sei mir an dieser Stelle gestattet. Ich vertrette den Standpunkt: Erst mal alles mitschreiben, ausblenden kann man später immer noch. Aufgrund der derzeitigen Festplattenpreise sehe ich keinen Grund warum man nur bei Bedarf entsprechende Informationen logt. Meist benötigt man umfangreiche Logs wenn etwas schief gelaufen ist, nur sind diese Informationen dann nicht da wenn man nur einen Bruchteil gelogt hat. Also lieber alles loggen was geht um später dann auch gut gerüstet Informationen zu sammeln.
LogExpert hilft mir dabei mich in den umfangreichen Logs schnell zurecht zufinden in dem man bestimmte Einträge farbig markieren oder bei entsprechenden Markierungen sogar ein Loglevel einstellen kann. Mehr dazu weiter unten im Beitrag.

function LogWrite {
    Param ([string]$logString, [string]$logLevel)
    $nowDate = Get-Date -format dd.MM.yyyy
    $nowTime = Get-Date -format HH:mm:ss
    if ($logLevel -eq "EMPTY") {
        Add-content $logfile -value "$logString"
        Write-Host "$logString"
    } else {
        Add-content $logfile -value "[$logLevel][$nowDate][$nowTime] - $logString"
        Write-Host "[$logLevel][$nowDate][$nowTime] - $logString"
    }    
}

Der Einfachheit halber fange ich nun direkt mit dem Script an. Ja wirklich ... das ist alles. Aber eigentlich zum reinen Loggen könnte man die Funktion auch noch abspecken. Aber wenn wir uns das Leben schon einfach machen wollen dann richtig. In der Funktion passieren immer 2 Dinge. Zum einen wird die Information auf der Konsole ausgegeben und zum anderen garniert mit einem formatierten Zeitstempel und einem Flag in die Logdatei geschrieben.
Bei mir schauen dann die Logfiles in etwa so aus:

[LOGLEVEL] [DATUM] [UHRZEIT] - Information

Der Aufruf der Funktion gestaltet sich dann folgendermaßen:

LogWrite "Information" "LOGLEVEL"

Auf der Konsole wird mit dieser Funktion nur die Information geschrieben. Das Logfile muss natürlich vor Aufruf der Funktion einmalig mit Pfadangabe bekannt gemacht werden. Nun kann man anhand des Loglevels die benötigten Informationen im LogExpert entsprechend Filtern oder Farbig hervorheben.

Erweitern kann man diese Funktion noch um ein entsprechendes Mailreporting. Hierfür nutze ich aber bei mir im Moment noch eine kleine einzeilige Funktion, die man hier aber durchaus mit integrieren könnte. Ich habe jedoch vor diese Logfunktion noch zu erweitern. Mehr dazu aber später in einem neuen Beitrag.