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
**********************

Transcript für alle PowerShell-Sessions und Skripts

Wer auf einem Computer oder Server pauschal alle PowerShell-Befehle in Transcripts sammeln will, kann die Transcript-Funktion in der Registry aktivieren. Dazu folgenden Inhalt in eine .reg-Datei kopieren und diese im Anschluss durch einen Doppelklick importieren. 

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShellCore\Transcription]
"EnableTranscripting"=dword:00000001
"OutputDirectory"="c:\\windows\\temp\\pstranscripts"

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell\Transcription]
"EnableTranscripting"=dword:00000001
"OutputDirectory"="c:\\windows\\temp\\pstranscripts"

Für PowerShell-Core wird an dieser Stelle ein anderer Registry-Pfad verwendet, entsprechend benötigt PowerShell Core einen eigenen Eintrag in der Registry. Der Pfad für die Logs kann natürlich entsprechend angepasst werden.

Alternativ kann die Einstellung auch über eine Gruppenrichtlinie gesetzt werden. Als Pfad könnte auch ein UNC-Share im Netzwerk verwendet werden.

Alle PowerShell-Sessions protokollieren deren Ausgabe somit in eine eigene Datei in dem angegebenen Ordner:

Out-File

Wer die Ausgabe der Logzeilen in eine 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 08.09.2021 von Bernhard


Top-Artikel in diesem Bereich

Preview PowerShell Loops und Array

PowerShell Loops und Array

geändert: 11.11.2020 von Bernhard (Erstveröffentlichung: 21.03.2013)

Ein Array speichert mehrere Werte, ähnlich einer 2 spaltigen Tabelle. ... weiterlesen

Preview wie erstelle ich ein Windows PowerShell Skript

wie erstelle ich ein Windows PowerShell Skript

geändert: 08.09.2021 von Bernhard (Erstveröffentlichung: 28.11.2012)

Ganz einfach erklärt: Ein PowerShell-Skript ist eine Textdatei mit einer Reihe von PowerShell-Befehlen. Als PowerShell Skript versteht man eine Datei mit der Endung .ps1. Die Skriptdatei kann eine Sammlung von Befehlen, Funktionen oder Cmdlets enthalten. ... weiterlesen

Preview Windows PowerShell Befehle im Überblick

Windows PowerShell Befehle im Überblick

geändert: 12.09.2017 von Bernhard (Erstveröffentlichung: 16.11.2011)

die verfügbaren PowerShell Befehle können mit dem Befehl: ... weiterlesen


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.