about_Logging_Non-Windows
Kurze Beschreibung
PowerShell protokolliert interne Vorgänge des Moduls, der Anbieter und der Cmdlets.
Lange Beschreibung
PowerShell protokolliert Details zu PowerShell-Vorgängen, z. B. Starten und Beenden des Moduls und Starten und Beenden von Anbietern. Außerdem werden Details zu PowerShell-Befehlen protokolliert.
Informationen zur Protokollierung in Windows PowerShell 5.1 finden Sie unter about_Logging.
Der Speicherort von PowerShell-Protokollen hängt von der Zielplattform ab.
- Unter Linux protokolliert PowerShell das systemd journal , das an einen Syslog-Server weitergeleitet werden kann. Weitere Informationen finden Sie auf den
man
Seiten für Ihre Linux-Verteilung. - Unter macOS wird das einheitliche Protokollierungssystem von Apple verwendet. Weitere Informationen finden Sie in der Entwicklerdokumentation von Apple zur Protokollierung.
PowerShell unterstützt das Konfigurieren von zwei Protokollierungskategorien:
Modulprotokollierung – Zeichnen Sie die Pipelineausführungsereignisse für Elemente der angegebenen Module auf. Die Modulprotokollierung muss sowohl für die Sitzung als auch für bestimmte Module aktiviert sein. Weitere Informationen zum Konfigurieren dieser Protokollierung finden Sie unter about_PowerShell_Config.
Wenn die Modulprotokollierung über die Konfiguration aktiviert ist, können Sie die Protokollierung für bestimmte Module in einer Sitzung aktivieren und deaktivieren, indem Sie den Wert der LogPipelineExecutionDetails-Eigenschaft des Moduls festlegen.
So aktivieren Sie beispielsweise die Modulprotokollierung für das PSReadLine-Modul :
$psrl = Get-Module PSReadLine $psrl.LogPipelineExecutionDetails = $true Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
Name LogPipelineExecutionDetails ---- --------------------------- PSReadLine True
Skriptblockprotokollierung – Aufzeichnen der Verarbeitung von Befehlen, Skriptblöcken, Funktionen und Skripts, unabhängig davon, ob sie interaktiv oder durch Automatisierung aufgerufen werden.
Wenn Sie die Skriptblockprotokollierung aktivieren, zeichnet PowerShell den Inhalt aller Skriptblöcke auf, die verarbeitet werden. Nach der Aktivierung protokolliert jede neue PowerShell-Sitzung diese Informationen.
Hinweis
Es wird empfohlen, die geschützte Ereignisprotokollierung zu aktivieren, wenn Sie die Skriptblockprotokollierung für andere Zwecke als Diagnosezwecke verwenden. Weitere Informationen finden Sie unter about_PowerShell_Config.
Konfigurieren der Protokollierung unter Linux oder macOS
Die Konfiguration für die Protokollierung unter Linux und macOS wird in der powershell.config.json
Datei gespeichert. Die powershell.config.json
Datei ist eine JSON-formatierte Datei, die sich im PowerShell-Verzeichnis $PSHOME
befindet. Wenn diese Konfigurationsdatei nicht vorhanden ist, müssen Sie sie erstellen, um die Standardeinstellungen zu ändern. Jede Installation von PowerShell verwendet eine eigene Kopie dieser Datei.
Standardmäßig ermöglicht Informational
PowerShell die Protokollierung für den Operational
Kanal. Sie können die Konfiguration ändern, wenn Sie eine zusätzliche Protokollausgabe benötigen, z. B. ausführlich oder die Analyseprotokollausgabe aktivieren.
Der folgende Code ist eine Beispielkonfiguration:
{
"ModuleLogging": {
"EnableModuleLogging": false,
"ModuleNames": [
"PSReadLine",
"PowerShellGet"
]
},
"ScriptBlockLogging": {
"EnableScriptBlockInvocationLogging": true,
"EnableScriptBlockLogging": true
},
"LogLevel": "verbose"
}
Im Folgenden finden Sie eine Liste der Eigenschaften zum Konfigurieren der PowerShell-Protokollierung. Wenn die Eigenschaft nicht in der Konfiguration aufgeführt ist, verwendet PowerShell den Standardwert.
- LogIdentity
- Werte:
<string name>
,powershell
- Beschreibung: Der Name, der bei der Protokollierung verwendet werden soll. Die Standardidentität lautet
powershell
. Dieser Wert kann verwendet werden, um den Unterschied zwischen zwei Instanzen einer PowerShell-Installation zu ermitteln, z. B. einer Release- und Betaversion. Dieser Wert wird auch verwendet, um die Protokollausgabe an eine separate Datei umzuleiten.
- Werte:
- LogChannels
- Werte:
Operational
,Analytic
- Beschreibung: Die zu aktivierenden Kanäle. Trennen Sie die Werte durch ein Komma, wenn Sie mehrere angeben. Der Standardwert ist
Operational
.
- Werte:
- LogLevel
- Werte:
Always
, ,Critical
,Warning
Error
,Informational
, ,Verbose
Debug
- Beschreibung: Geben Sie einen einzelnen Wert an. Die Werte werden in der zunehmenden Reihenfolge der Ausführlichkeit aufgeführt. Der von Ihnen ausgewählte Wert aktiviert sich selbst und alle Werte davor. Der Standardwert ist
Informational
.
- Werte:
- LogKeywords
- Werte:
Runspace
, ,Pipeline
,Protocol
,Host
Transport
,Cmdlets
, ,Serializer
,Session
ManagedPlugin
- Beschreibung: Schlüsselwörter bieten die Möglichkeit, die Protokollierung auf bestimmte Komponenten in PowerShell zu beschränken. Standardmäßig sind alle Schlüsselwörter aktiviert und ändern diesen Wert nur für spezielle Problembehandlungen.
- Werte:
- PowerShellPolicies
- Beschreibung: Die PowerShellPolicies-Einstellung enthält die Optionen "ModuleLogging", "ProtectedEventLogging" und "ScriptBlockLogging" . Weitere Informationen finden Sie unter "Allgemeine Konfigurationseinstellungen".
Anzeigen von PowerShell-Protokolldaten im Journal unter Linux
PowerShell meldet sich mit dem aufgezeichneten Daemon für Linux-Distributionen wie Ubuntu und Red Hat Enterprise Linux (RHEL) beim systemd Journal an.
Der journalierte Daemon speichert Protokollnachrichten in einem Binärformat. Verwenden Sie das journalctl
Hilfsprogramm, um das Journalprotokoll für PowerShell-Einträge abzufragen.
journalctl --grep powershell
Der aufgezeichnete Daemon kann Protokollnachrichten an einen Systemprotokollprotokollserver (Syslog) weiterleiten. Aktivieren Sie die ForwardToSysLog
Option in der /etc/systemd/journald.conf
journalierten Konfigurationsdatei, wenn Sie die Syslog-Protokollierung auf Ihrem Linux-System verwenden möchten. Dies ist die Standardkonfiguration für viele Linux-Distributionen.
Anzeigen von PowerShell-Protokolldaten in Syslog unter Linux
Verwenden Sie den Paket-Manager für Ihre Linux-Verteilung, um einen Syslog-Server wie z. B. rsyslog zu installieren, wenn Sie die Syslog-Protokollierung auf Ihrem Linux-System verwenden möchten. Einige Linux-Distributionen wie Ubuntu vorinstalliert rsyslog.
Das Syslog-Protokoll speichert Protokollmeldungen in einem standardisierten Textformat. Sie können ein beliebiges Hilfsprogramm für die Textverarbeitung verwenden, um Syslog-Inhalte abzufragen oder anzuzeigen.
Standardmäßig schreibt Syslog Protokolleinträge an den folgenden Speicherort:
- Auf Debian-basierten Distributionen, einschließlich Ubuntu:
/var/log/syslog
- Auf RHEL-basierten Verteilungen:
/var/log/messages
Im folgenden Beispiel wird der cat
Befehl zum Abfragen von PowerShell-Syslog-Einträgen auf Ubuntu verwendet.
cat /var/log/syslog | grep -i powershell
Syslog-Nachrichtenformat
Syslog-Nachrichten weisen das folgende Format auf:
TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
[EVENTID:TASK.OPCODE.LEVEL] MESSAGE
- TIMESTAMP – Ein Datum/eine Uhrzeit, zu der der Protokolleintrag erstellt wurde.
- MACHINENAME – Der Name des Systems, in dem das Protokoll erstellt wurde.
- PID – Die Prozess-ID des Prozesses, der den Protokolleintrag geschrieben hat.
- COMMITID : Die Git-Commit-ID oder das Tag, das zum Erstellen des Builds verwendet wird.
- TID – Die Thread-ID des Threads, der den Protokolleintrag geschrieben hat.
- CID – Der Hexkanalbezeichner des Protokolleintrags.
- 0x10 = Betriebsbereit
- 0x11 = Analyse
- EVENTID – Der Ereignisbezeichner des Protokolleintrags.
- TASK – Der Vorgangsbezeichner für den Ereigniseintrag
- OPCODE – Der Opcode für den Ereigniseintrag
- LEVEL – Die Protokollebene für den Ereigniseintrag
- MESSAGE – Die Nachricht, die dem Ereigniseintrag zugeordnet ist
EVENTID, TASK, OPCODE und LEVEL sind die gleichen Werte wie beim Anmelden im Windows-Ereignisprotokoll.
Schreiben einer PowerShell-Protokollnachricht in eine separate Datei
Es ist auch möglich, die PowerShell-Protokolleinträge an eine separate Datei umzuleiten. Wenn die PowerShell-Protokolleinträge zu einer separaten Datei umgeleitet werden, werden sie nicht mehr mit der Standard syslog-Datei protokolliert.
Die folgenden Schritte konfigurieren PowerShell-Protokolleinträge auf Ubuntu so, dass sie in eine Protokolldatei mit dem Namen powershell.log
schreiben.
Erstellen Sie eine Konfigurationsdatei (
conf
) für die PowerShell-Protokollkonfiguration im/etc/rsyslog.d
Verzeichnis mithilfe eines Textdatei-Editors wie znano
. B. . Stellen Sie dem Dateinamen eine Zahl voran, die kleiner als der Standardwert ist. Beispiel:40-powershell.conf
Dabei ist50-default.conf
der Standardwert .sudo nano /etc/rsyslog.d/40-powershell.conf
Fügen Sie der Datei die folgenden Informationen hinzu
40-powershell.conf
::syslogtag, contains, "powershell[" /var/log/powershell.log & stop
Stellen Sie sicher, dass
/etc/rsyslog.conf
eine Include-Anweisung für die neue Datei enthalten ist. Es kann eine generische Anweisung haben, die sie enthält, z. B.:$IncludeConfig /etc/rsyslog.d/*.conf
Wenn dies nicht der Fehler ist, müssen Sie manuell eine Include-Anweisung hinzufügen.
Überprüfen Sie, ob die Attribute und Berechtigungen entsprechend festgelegt sind.
ls -l /etc/rsyslog.d/40-powershell.conf
-rw-r--r-- 1 root root 67 Nov 28 12:51 40-powershell.conf
Wenn Ihre
40-powershell.conf
Datei über unterschiedliche Besitzrechte oder Berechtigungen verfügt, führen Sie die folgenden Schritte aus:Legen Sie den Besitz auf stamm fest.
sudo chown root:root /etc/rsyslog.d/40-powershell.conf
Zugriffsberechtigungen festlegen: Stamm hat Lese-/Schreibzugriff, Benutzer haben Lesezugriff.
sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
Starten Sie den rsyslog-Dienst neu.
sudo systemctl restart rsyslog.service
Führen Sie zum Generieren von PowerShell-Informationen zum Protokollieren aus
pwsh
.pwsh
Hinweis
Die
/var/log/powershell.log
Datei wird erst erstellt, wenn der rsyslog-Dienst neu gestartet wird und PowerShell Informationen zum Protokollieren generiert.Fragen Sie die
powershell.log
Datei ab, um zu überprüfen, ob PowerShell-Informationen in der neuen Datei protokolliert werden.cat /var/log/powershell.log
Anzeigen von PowerShell-Protokolldaten unter macOS
PowerShell protokolliert das einheitliche Protokollierungssystem von Apple, ein Feature von macOS, das die Sammlung und Speicherung von System- und Anwendungsprotokollen an einem zentralen Ort ermöglicht.
Das einheitliche Protokollierungssystem von Apple speichert Protokollnachrichten im Binärformat. Sie müssen das log
Tool verwenden, um das einheitliche Protokollierungssystem für PowerShell-Protokollereignisse abzufragen. Die PowerShell-Protokollereignisse werden in der Konsolenanwendung unter macOS nicht angezeigt. Die Konsolen-App wurde für die ältere syslogbasierte Protokollierung entwickelt, die das einheitliche Protokollierungssystem voraussetzt.
Anzeigen von PowerShell-Protokolldaten über die Befehlszeile unter macOS
Um PowerShell-Protokolldaten über eine Befehlszeile unter macOS anzuzeigen, verwenden Sie den log
Befehl in der Terminal - oder anderen Shellhostanwendung. Diese Befehle können über PowerShell, Z Shell oder Bash ausgeführt werden.
Im folgenden Beispiel wird der log
Befehl verwendet, um die Protokolldaten in Ihrem System anzuzeigen, da er in Echtzeit auftritt. Der Prozessparameter filtert die Protokolldaten nur für den pwsh
Prozess. Wenn mehrere Instanzen pwsh
ausgeführt werden, akzeptiert der Prozessparameter auch eine Prozess-ID als Wert. Der Levelparameter zeigt Nachrichten auf der angegebenen Ebene und darunter an.
log stream --predicate "subsystem == 'com.microsoft.powershell'" --level info
Der log show
Befehl kann zum Exportieren von Protokollelementen verwendet werden. Der log show
Befehl bietet Optionen zum Exportieren der letzten N
Elemente, Elemente seit einer bestimmten Zeit oder Elemente innerhalb eines bestimmten Zeitraums.
Der folgende Befehl exportiert z. B. Elemente seit 9am on April 5, 2022
:
log show --start "2022-04-05 09:00:00" --predicate "subsystem == 'com.microsoft.powershell'"
Weitere Informationen können Sie ausführen log show --help
, um die Hilfe für den log show
Befehl anzuzeigen.
Sie können die Protokolldaten auch im JSON-Format ausgeben, sodass Sie die Ereignisdaten in PowerShell-Objekte konvertieren können. Im folgenden Beispiel werden die Ereignisse im JSON-Format ausgegeben. Das ConvertFrom-Json
Cmdlet wird verwendet, um die JSON-Daten in PowerShell-Objekte zu konvertieren, die in der $logRecord
Variablen gespeichert werden.
log show --predicate "subsystem == 'com.microsoft.powershell'" --style json |
ConvertFrom-Json | Set-Variable logRecord
Möglicherweise sollten Sie auch erwägen, die Protokolle an einem sichereren Ort wie dem SIEM-Aggregator (Security Information and Event Management) zu speichern. Mit Microsoft Defender für Cloud-Apps können Sie SIEM in Azure einrichten. Weitere Informationen finden Sie unter generische SIEM-Integration.
Modi und Ebenen von PowerShell-Protokolldaten unter macOS
Standardmäßig protokolliert das PowerShell-Subsystem Nachrichten auf Informationsebene im Speicher (Modus) und Standardnachrichten auf Datenträger (Persistenz) unter macOS. Dieses Verhalten kann geändert werden, um einen anderen Modus und eine andere Protokollierungsebene mithilfe des log config
Befehls zu aktivieren.
Im folgenden Beispiel wird die Protokollierung und Persistenz auf Informationsebene für das PowerShell-Subsystem aktiviert:
sudo log config --subsystem com.microsoft.powershell --mode level:info,persist:info
Verwenden Sie den Reset-Parameter , um die Protokolleinstellungen auf die Standardwerte für das PowerShell-Subsystem zurückzusetzen:
sudo log config --subsystem com.microsoft.powershell --reset
Siehe auch
- Informationen zu Linux syslog und rsyslog.conf finden Sie auf den lokalen
man
Seiten des Linux-Computers. - Informationen zur MacOS-Protokollierung finden Sie in der Entwicklerdokumentation von Apple zur Protokollierung
- Informationen zu Windows finden Sie unter about_Logging_Windows
- Generische SIEM-Integration