Das Protokollieren in einfachen Textdateien ist praktisch, wenn Sie schnell den Überblick über die Aktionen Ihrer PowerShell-Skripte behalten möchten. Ob Sie ein komplexes Skript debuggen oder einfach nur die Aktionen protokollieren wollen – diese Methoden können sehr hilfreich sein. Aber Vorsicht: Die Standardmethoden sind recht einfach und enthalten weder Zeitstempel noch andere nützliche Informationen, sodass sie manchmal etwas unübersichtlich wirken. Dennoch sind sie nützlich für schnelle und unkomplizierte Protokolle, insbesondere wenn Sie unter Zeitdruck arbeiten oder etwas Einfaches Skript schreiben.
- Umleiten der PowerShell-Terminalausgabe in eine Protokolldatei
- Hinzufügen einer Protokollierungsfunktion zu einem PowerShell-Skript
- Automatische PowerShell-Protokollierung mit Start-Transcript
Umleiten der PowerShell-Terminalausgabe in eine Protokolldatei
>>Am einfachsten lässt sich die Ausgabe eines Befehls mit Operatoren wie `cd` oder Befehlen wie `cd` Add-Contentund `cd` erfassen Out-File. Diese Methoden sind schnell, protokollieren aber weder Zeitstempel noch Kontext – etwas ungenau, aber ausreichend, wenn man lediglich die Ausgabe bestimmter Befehle festhalten möchte.
- Umleitung mit
>>Anhängen der Ausgabe direkt an eine Protokolldatei, z. B.
Write-Output "Files are successfully created in $env:COMPUTERNAME" >> C:\PS\Logs\TestLog.txt
- Hinweis: Sie können
Set-Contentdie Datei bei Bedarf bei jedem Durchlauf überschreiben.
Alternativ dazu Add-Contentist es genau wie >>, lässt sich aber leichter skripten:
Add-Content -Path C:\PS\Logs\TestLog.txt -Value "Files are successfully created in $env:COMPUTERNAME"
Und wenn Sie es etwas ausgefeilter gestalten möchten (oder einfach nur die Standardausgabe in einem Skript umleiten wollen), können Sie Folgendes tun:
Some-Command | Out-File -FilePath C:\PS\Logs\TestLog.txt -Append
Jede dieser Zeilen hängt einfach die Ausgabe des Befehls an das Protokoll an. Ziemlich einfach, aber Achtung: Zeitstempel und die Verarbeitung mehrerer Einträge funktionieren nicht korrekt, es sei denn, Sie implementieren dies in einem separaten Skript.
Set-Contentwerden die vorherigen Daten gelöscht. Gehen Sie daher mit Vorsicht vor:
Set-Content -Path C:\PS\Logs\TestLog.txt -Value "New log start at $(Get-Date)"
Ein kleiner Hinweis: Diese Methoden fügen keine Zeitstempel automatisch hinzu, daher fragen Sie sich manchmal, wann eine Aktion protokolliert wurde. Wenn Ihnen das wichtig ist, ist die nächste Methode wahrscheinlich besser geeignet.
Hinzufügen einer Protokollierungsfunktion zu einem PowerShell-Skript
Dies ist die elegantere Methode, wenn Sie Skripte schreiben und Protokolle mit Zeitstempeln benötigen – was bei der Fehlersuche unerlässlich ist. Im Prinzip fügen Sie eine kleine Funktion hinzu, die einen Zeitstempel und eine Meldung in Ihre Protokolldatei einfügt, wodurch alles übersichtlicher und professioneller aussieht (naja, mehr oder weniger).
Hier ist ein kurzes Beispiel, das Sie in Ihr Skript kopieren können (passen Sie einfach den Pfad nach Ihren Wünschen an):
$LogFile = "C:\PS\Logs\$($env:COMPUTERNAME)_posh.log" function Write-Log { Param ([string]$LogString) $Stamp = (Get-Date).ToString("yyyy/MM/dd HH:mm:ss") $LogMessage = "$Stamp $LogString" Add-Content -Path $LogFile -Value $LogMessage -Encoding UTF8 }
Warum ist das hilfreich? Nun, jede Nachricht erhält einen Zeitstempel, und Sie können diesen Write-Log "message"im gesamten Skript verteilen, wodurch es viel einfacher wird, nachzuvollziehen, was wann passiert ist. Das ist besonders bei längeren Skripten praktisch, wo die Fortschrittsverfolgung wichtig ist.
Anwendungsbeispiel:
Write-Log "Script started" # do work Write-Log "Calculating..." Start-Sleep -Seconds 20 # more work Write-Log "Script completed"
Auf diese Weise füllt sich Ihre Protokolldatei mit zeitgestempelten Einträgen, was das Debuggen oder Überprüfen deutlich vereinfacht.
Wenn Sie die Protokolldateien während ihres Wachstums beobachten möchten, können Sie Folgendes ausführen:
Get-Content -Path $LogFile -Tail 10 -Wait
Hier werden die letzten 10 Einträge in Echtzeit gestreamt, was ziemlich nützlich ist, wenn man den Fortschritt live überwachen möchte.
Automatische PowerShell-Protokollierung mit Start-Transcript
Nun kommen wir zur integrierten, quasi automatisierten Methode. PowerShell Start-Transcripterfasst alles – ausgeführte Befehle, Ausgaben, Fehler – und speichert alles in einer einzigen Protokolldatei. Das ist ideal, wenn Sie keine eigenen Protokollierungsfunktionen schreiben oder die Ausgabe manuell umleiten möchten.
Um die Protokollierung zu starten, führen Sie einfach Folgendes aus:
Start-Transcript -Path C:\PS\Logs\MyTranscript.txt
Alle Befehle und Ergebnisse werden protokolliert, bis Sie Folgendes ausführen:
Stop-Transcript
Bei manchen Konfigurationen kann dies etwas unzuverlässig sein oder ohne Administratorrechte gar nicht funktionieren, aber im Allgemeinen ist es äußerst zuverlässig. Sie können auch einen bestimmten Ordner angeben, indem Sie.verwenden -Path.
Wenn Sie die Protokolldateien anhängen statt überschreiben möchten, fügen Sie einfach Folgendes hinzu -Append:
Start-Transcript -Path C:\PS\Logs\PSScriptLog.txt -Append
Das ist gut, wenn Sie mehrere Skripte ausführen, die alle in dasselbe Protokoll schreiben.
Außerdem können Sie diese in Ihre Skripte einbetten: Starten Sie das Transkript am Anfang, führen Sie Ihre Aktionen aus und stoppen Sie es am Ende, wodurch Sie eine umfassende Aufzeichnung von allem erhalten, was während des Ablaufs geschah.
Und falls Sie befürchten, Protokolle zu verlieren, gibt es unter Computerkonfiguration > Administrative Vorlagen > Windows-Komponenten > Windows PowerShell eine Gruppenrichtlinieneinstellung namens „PowerShell-Transkription aktivieren“. Ist diese aktiviert, protokolliert Windows automatisch alle PowerShell-Aktivitäten – ganz ohne Skripte. Sie können zwar auch die Registrierungseinstellungen anpassen, wenn Sie experimentierfreudig sind, aber die Richtlinienoption ist in den meisten Fällen der einfachste Weg.
Ob einfache Umleitung, praktische Protokollierungsfunktionen oder vollständige Protokolle – PowerShell bietet verschiedene Optionen. Die beste Methode hängt von Ihren Anforderungen ab: schnelle Protokolle, detaillierte Zeitstempel oder die vollständige Befehlshistorie.