PowerShell Log-Files: Logging in eine Textdatei - write to file

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!

Aktualisiert: 07.09.2021 von Bernhard | Translation English |­čöö

Ô×Ę PowerShell - Best Practice - bessere Skripts erstellen | Ô׎ Windows PowerShell | PowerShell Textdatei und csv lesen / schreiben Ô×Ę

Top-Artikel in diesem Bereich


Windows PowerShell Skript erstellen und ausf├╝hren

Im einfachsten Fall ist ein PowerShell-Skript 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.


PowerShell regex - Einf├╝hrung und Beispiele

Regex kann in den meisten Skriptsprachen nahezu gleich verwendet werden, daher habe ich die Grundbegriffe und Funktionsweise in einem gesonderten Beitrag zusammengefasst, siehe┬áRegex - ├ťberblick. Dieser Beitrag beinhaltet Speziali├Ąten bei der Verwendung von Regex in PowerShell, sowie die Beispiele des Regex - Grundlagen Artikels. ┬á Powershell: verschiedene Regex-Varianten PowerShell verf├╝gt ├╝ber eigene Regex-Operatoren, als Beispiel: -match oder -replace. Nachdem Po...


PowerShell Textdatei und csv lesen / schreiben

Dieser Artikel ist eine Zusammenfassung von Beispielen für das Erstellen und Auslesen von Text und CSV Dateien in PowerShell.

Fragen / Kommentare


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

ÔťŹanonym
18.05.2021 23:37
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
gepostet am 19.05.2021 06:58
ah, im Screenshot war das auch noch falsch, vielen Dank: jetzt sollte es passen.

Beitrag erstellt von Bernhard

ÔťŹanonym
31.03.2021 12:01
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
gepostet am 31.03.2021 12:28
danke, habe ich ausgebessert

Beitrag erstellt von Bernhard