PowerShell Log-Files: Logging in eine Textdatei

Logfiles in PowerShell können über den Befehl Out-File, über eine eigene Funktion oder über das in PowerShell integrierte Transcript erstellt werden.  

Transcript

Eine sehr einfache Variante die Command-Line-Ausgabe in eine Textdatei zu schreiben, bietet der PowerShell-Befehl Transcript.

PS C:\temp> start-transcript c:\temp\transcript.txt
Die Aufzeichnung wurde gestartet. Die Ausgabedatei ist "c:\temp\transcript.txt".
PS C:\temp> write-host "test"
test
PS C:\temp> stop-transcript

Transcript schreibt einen Header mit Informationen zum User und Computer und im Anschluss die komplette Konsolenausgabe in eine Textdatei:

**********************
Start der Windows PowerShell-Aufzeichnung
Startzeit: 20200822123630
Benutzername: DOMAIN\User
RunAs-Benutzer: DOMAIN\User
Computer: COMPUTERNAME (Microsoft Windows NT 10.0.15063.0)
Hostanwendung: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Prozess-ID: 2832
PSVersion: 5.1.15063.1387
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.15063.1387
BuildVersion: 10.0.15063.1387
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
Die Aufzeichnung wurde gestartet. Die Ausgabedatei ist "c:\temp\transcript.txt".
PS C:\temp> write-host "test"
test
PS C:\temp> stop-transcript
**********************
Ende der Windows PowerShell-Aufzeichnung
Endzeit: 20200822123640
**********************

Out-File

Wer die Ausgabe in die Textdatei selbst in die Hand nehmen will, kann das mit dem Befehl Out-File, siehe auch: PowerShell-Textdatei. Mit Hilfe des Befehles Out-File ist es möglich von PowerShell in eine Textdatei zu schreiben, hier ein einfaches Beispiel:

"Logzeileneintrag" | out-file "c:\temp\log.txt" -Append

Der Parameter -Append erstellt die Datei, falls diese nicht vorhanden ist und fügt bei einem erneuten Aufruf zusätzliche Logzeilen hinzu.

Damit, wie für ein Logfile üblich, auch die Zeit am Beginn der Logzeile geschrieben wird, kann diese mit folgendem Befehl hinzugefügt werden:

"$(get-date -format "yyyy-MM-dd HH:mm:ss"): Logzeileneintrag" | out-file "c:\temp\log.txt" -Append

Ausgabe in die Datei:

eigene Logging-Funktion

Damit im Befehl für die Ausgabe der Logzeile nicht immer der Command für das Datum eingebaut werden muss, kann für das Logging auch eine eigene Funktion erstellt werden. Die Funktion könnte dann auch Dinge wie eine automatische Benennung der Log-Datei, Log-Rotation oder ähnliches implementieren. 

Um bei dem Beispiel mit Out-File zu bleiben und um die Funktion möglichst einfach zu halten, habe ich den Befehl in eine kleine Funktion gegeben: der Schreibvorgang in das Log-File erfolgt dann mittels "Write-Log -text "Logtext", hier die Funktion und deren Aufruf:

function Write-Log
{
    Param
    (
        $text
    )

    "$(get-date -format "yyyy-MM-dd HH:mm:ss"): $($text)" | out-file "c:\temp\log.txt" -Append
}

Write-Log -text "Logzeile1"
Write-Log -text "Logzeile2"
positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!


veröffentlicht am 26.08.2020 von Bernhard
geändert am 19.05.2021 von Bernhard



Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍anonym
erstellt am 18.05.2021 23:05
Haha :D - Bin gerade so richtig und Powershell-Stimmung und schreibe für meine Scripts gerade eine .log-Datei.
Alls erstes ein Riesen Dankeschön an DICH! Hast ein paar coole Sachen die ich mir abgeschaut habe!!

Und dann ich musste gerade so lachen - Ich schaute mir deine "Datums" Ausgabe in der Log-Datei an, und war zuerst ein bisschen Verwirrt "2020-29-22" :DD - bis ich gemerkt habe, dass du die 'mm' Verwechselt hast :D
✍Bernhard
erstellt am 19.05.2021 06:05
ah, im Screenshot war das auch noch falsch, vielen Dank: jetzt sollte es passen.

erstellt von Bernhard

✍anonym
erstellt am 31.03.2021 12:03
Beim Format müssten natürlich für den Monat zwei große Ms verwendet werden, sonst stehen an der Stelle die Minuten.
-format "yyyy-MM-dd H:mm:ss"
✍Bernhard
erstellt am 31.03.2021 12:03
danke, habe ich ausgebessert

erstellt von Bernhard

Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Außerdem geben wir Informationen zu Ihrer Nutzung unserer Website an unsere Partner für soziale Medien, Werbung und Analysen weiter. Details anzeigen.