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"
{{percentage}} % positiv
DANKE für deine Bewertung!
Fragen / Kommentare
(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]
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
ah, im Screenshot war das auch noch falsch, vielen Dank: jetzt sollte es passen.
Beitrag erstellt von Bernhard
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"
danke, habe ich ausgebessert
Beitrag erstellt von Bernhard