about_Logging_Non-Windows
Kurze Beschreibung
PowerShell protokolliert interne Vorgänge der Engine, anbieter und Cmdlets.
Lange Beschreibung
PowerShell protokolliert Details zu PowerShell-Vorgängen. PowerShell protokolliert beispielsweise Vorgänge wie das Starten und Beenden der Engine sowie das Starten und Beenden von Anbietern. Außerdem werden Details zu PowerShell-Befehlen protokolliert.
Der Speicherort von PowerShell-Protokollen hängt von der Zielplattform ab. Unter Linux können PowerShell-Protokolle für syslog und rsyslog.conf verwendet werden. Weitere Informationen finden Sie auf den lokalen man
Seiten des Linux-Computers. Unter macOS wird das os_log Protokollierungssystem verwendet. Weitere Informationen finden Sie in os_log Entwicklerdokumentation.
Anzeigen der PowerShell-Protokollausgabe unter Linux
PowerShell-Protokolle für syslog unter Linux und alle Tools, die häufig zum Anzeigen von Syslog-Inhalten verwendet werden, können verwendet werden.
Das Format der Protokolleinträge verwendet die folgende Vorlage:
TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
[EVENTID:TASK.OPCODE.LEVEL] MESSAGE
Feld | BESCHREIBUNG |
---|---|
TIMESTAMP |
Ein Datum/Uhrzeit, zu dem 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, die zum Erstellen des Builds verwendet wird. |
TID |
Die Thread-ID des Threads, der den Protokolleintrag geschrieben hat. |
CID |
Der Hexkanalbezeichner des Protokolleintrags. |
10 = Betriebsbereit, 11 = Analyse | |
EVENTID |
Der Ereignisbezeichner des Protokolleintrags. |
TASK |
Der Aufgabenbezeichner für den Ereigniseintrag |
OPCODE |
Der Opcode für den Ereigniseintrag |
LEVEL |
Die Protokollebene für den Ereigniseintrag |
MESSAGE |
Die dem Ereigniseintrag zugeordnete Nachricht |
Hinweis
EVENTID
, TASK
, OPCODE
und LEVEL
sind dieselben Werte, die bei der Protokollierung beim Windows-Ereignisprotokoll verwendet werden.
Filtern von PowerShell-Protokolleinträgen mithilfe von rsyslog
Normalerweise werden PowerShell-Protokolleinträge in den Standardwert location/file
für syslog geschrieben. Es ist jedoch möglich, die Einträge in eine benutzerdefinierte Datei umzuleiten.
Create eine Konf für die PowerShell-Protokollkonfiguration und geben Sie eine Zahl an, die kleiner als 50 (für
50-default.conf
) ist, z40-powershell.conf
. B. . Die Datei sollte unter/etc/rsyslog.d
platziert werden.Fügen Sie der Datei den folgenden Eintrag hinzu:
:syslogtag, contains, "powershell[" /var/log/powershell.log & stop
Stellen Sie sicher, dass
/etc/rsyslog.conf
die neue Datei eingeschlossen ist. Häufig verfügt sie über eine generische include-Anweisung, die wie die folgende Konfiguration aussieht:$IncludeConfig /etc/rsyslog.d/*.conf
Wenn dies nicht der Fall ist, müssen Sie eine include-Anweisung manuell hinzufügen.
Stellen Sie sicher, dass Attribute und Berechtigungen entsprechend festgelegt sind.
-rw-r--r-- 1 root root 67 Nov 28 12:51 40-powershell.conf
Legen Sie den Besitz auf stamm fest.
chown root:root /etc/rsyslog.d/40-powershell.conf
Festlegen von Zugriffsberechtigungen: Root hat Lese-/Schreibzugriff, Benutzer haben Lesezugriff.
chmod 644 /etc/rsyslog.d/40-powershell.conf
Anzeigen der PowerShell-Protokollausgabe unter macOS
Die einfachste Methode zum Anzeigen der PowerShell-Protokollausgabe unter macOS ist die Verwendung der Konsolenanwendung .
- Search für die Konsolenanwendung, und starten Sie sie.
- Wählen Sie unter Geräte den Computernamen aus.
- Geben Sie
pwsh
im Feld Search für die PowerShell-Standard Binärdatei ein. - Ändern Sie den Suchfilter von in
Any
Process
. - Führen Sie die Vorgänge aus.
- Speichern Sie optional die Suche für die zukünftige Verwendung.
Um nach einem bestimmten Prozess instance von PowerShell in der Konsole zu filtern, enthält die Variable $pid
die Prozess-ID.
- Geben Sie pid (Prozess-ID) in das Feld Search ein.
- Ändern Sie den Suchfilter in
PID
. - Führen Sie die Vorgänge aus.
Anzeigen der PowerShell-Protokollausgabe über eine Befehlszeile
Mit dem log
Befehl können PowerShell-Protokolleinträge über die Befehlszeile angezeigt werden.
sudo log stream --predicate 'process == "pwsh"' --info
Beibehalten der PowerShell-Protokollausgabe
Standardmäßig verwendet PowerShell unter macOS die Standardprotokollierung nur für Arbeitsspeicher. Dieses Verhalten kann mithilfe des Befehls geändert werden, um die log config
Persistenz zu aktivieren.
Das folgende Skript aktiviert die Protokollierung und Persistenz auf Infoebene:
log config --subsystem com.microsoft.powershell --mode=persist:info,level:info
Mit dem folgenden Befehl wird die PowerShell-Protokollierung auf den Standardzustand zurückgesetzt:
log config --subsystem com.microsoft.powershell --mode=persist:default,level:default
Nachdem die Persistenz aktiviert wurde, kann der log show
Befehl zum Exportieren von Protokollelementen verwendet werden. Der Befehl bietet Optionen zum Exportieren der letzten N-Elemente, Elemente seit einer bestimmten Zeit oder Elemente innerhalb einer bestimmten Zeitspanne.
Der folgende Befehl exportiert z. B. Elemente seit 9am on April 5 of 2018
:
log show --info --start "2018-04-05 09:00:00" --predicate "process = 'pwsh'"
Sie können Hilfe für log
erhalten, indem Sie für weitere Details ausführen log show --help
.
Tipp
Wenn Sie einen der Protokollbefehle über eine PowerShell-Eingabeaufforderung oder ein PowerShell-Skript ausführen, verwenden Sie doppelte Anführungszeichen um die gesamte Prädikatzeichenfolge und einzelne Anführungszeichen darin. Dadurch wird vermieden, dass doppelte Anführungszeichen innerhalb der Prädikatzeichenfolge escapen müssen.
Sie können auch in Erwägung ziehen, die Ereignisprotokolle an einem sichereren Speicherort zu speichern, z. B. an einem zentralen Ereignisprotokollsammler oder an einem SIEM-Aggregator . Sie können SIEM in Azure einrichten. Weitere Informationen finden Sie unter Generische SIEM-Integration.
Konfigurieren der Protokollierung auf einem Nicht-Windows-System
Unter Windows wird die Protokollierung durch Erstellen von ETW-Ablaufverfolgungslistenern oder mithilfe der Ereignisanzeige konfiguriert, um die analytische Protokollierung zu aktivieren. Unter Linux und macOS wird die Protokollierung mithilfe der Datei powershell.config.json
konfiguriert. Im Rest dieses Abschnitts wird die Konfiguration der PowerShell-Protokollierung auf einem Nicht-Windows-System erläutert.
Standardmäßig aktiviert PowerShell die Informationsprotokollierung für den Betriebskanal. Dies bedeutet, dass jede von PowerShell erzeugte Protokollausgabe als betriebsbereit gekennzeichnet ist und eine Protokollebene (Ablaufverfolgung) aufweist, die größer ist als Die Informationen protokolliert werden. Gelegentlich erfordern Diagnosen möglicherweise eine zusätzliche Protokollausgabe, z. B. ausführliche Protokollausgabe oder Aktivieren der Analyseprotokollausgabe.
Die Datei powershell.config.json
ist eine JSON-formatierte Datei, die sich im PowerShell-Verzeichnis $PSHOME
befindet. Jede Installation von PowerShell verwendet eine eigene Kopie dieser Datei. Beim normalen Vorgang bleibt diese Datei unverändert. Es kann zwar nützlich sein, einige Der Einstellungen in der Datei zu ändern, zur Diagnose oder zur Unterscheidung zwischen mehreren PowerShell-Versionen auf demselben System oder sogar mehreren Kopien derselben Version (siehe LogIdentity
folgende Tabelle).
Der folgende Code ist eine Beispielkonfiguration:
{
"Microsoft.PowerShell:ExecutionPolicy": "RemoteSigned",
"PowerShellPolicies": {
"ScriptExecution": {
"ExecutionPolicy": "RemoteSigned",
"EnableScripts": true
},
"ScriptBlockLogging": {
"EnableScriptBlockInvocationLogging": true,
"EnableScriptBlockLogging": true
},
"ModuleLogging": {
"EnableModuleLogging": false,
"ModuleNames": [
"PSReadline",
"PowerShellGet"
]
},
"ProtectedEventLogging": {
"EnableProtectedEventLogging": false,
"EncryptionCertificate": [
"Joe"
]
},
"Transcription": {
"EnableTranscripting": true,
"EnableInvocationHeader": true,
"OutputDirectory": "F:\\tmp\\new"
},
"UpdatableHelp": {
"DefaultSourcePath": "f:\\temp"
},
"ConsoleSessionConfiguration": {
"EnableConsoleSessionConfiguration": false,
"ConsoleSessionConfigurationName": "name"
}
},
"LogLevel": "verbose"
}
Die Eigenschaften zum Konfigurieren der PowerShell-Protokollierung sind in der folgenden Tabelle aufgeführt. Mit einem Sternchen markierte Werte, z Operational*
. B. , geben den Standardwert an, wenn in der Datei kein Wert angegeben ist.
Eigenschaft | Werte | BESCHREIBUNG |
---|---|---|
LogIdentity |
(Zeichenfolgenname) | Der Name, der bei der Protokollierung verwendet werden soll. Standardmäßig wird von |
Powershell* | powershell ist die Identität. Dieser Wert kann | |
wird verwendet, um den Unterschied zwischen zwei zu erkennen | ||
Instanzen einer PowerShell-Installation, z. B. | ||
als Release- und Betaversion. Dieser Wert ist | ||
wird auch verwendet, um die Protokollausgabe an eine umzuleiten. | ||
separate Datei unter Linux. Sehen Sie sich die Diskussion von | ||
rsyslog oben. | ||
LogChannels |
Operative* | Die zu aktivierenden Kanäle. Trennen der Werte |
Analytic | mit einem Komma, wenn mehr als eins angegeben wird. | |
LogLevel |
Immer | Geben Sie einen einzelnen Wert an. Der Wert aktiviert |
Kritisch | sich selbst und alle darüber stehenden Werte in der | |
Fehler | auf der linken Seite. | |
Warnung | ||
Informations* | ||
Ausführlich | ||
Debuggen | ||
LogKeywords |
Runspace | Schlüsselwörter bieten die Möglichkeit, die Protokollierung einzuschränken. |
Pipeline | zu bestimmten Komponenten in PowerShell. nach | |
Protocol | standard, alle Schlüsselwörter sind aktiviert und ändern sich | |
Transport | Dieser Wert ist nur für sehr nützlich | |
Host | spezialisierte Problembehandlung. | |
Cmdlets | ||
serializer | ||
Sitzung | ||
ManagedPlugin |
Weitere Informationen
- Informationen zu Linux syslog und rsyslog.conf finden Sie auf den lokalen
man
Seiten des Linux-Computers. - Informationen zu macOS-os_log finden Sie in os_log Entwicklerdokumentation.
- about_Logging_Windows
- Generische SIEM-Integration