Share via


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, OPCODEund 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.

  1. 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.dplatziert werden.

  2. Fügen Sie der Datei den folgenden Eintrag hinzu:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. 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.

  4. Stellen Sie sicher, dass Attribute und Berechtigungen entsprechend festgelegt sind.

    -rw-r--r-- 1 root root   67 Nov 28 12:51 40-powershell.conf
    
  5. Legen Sie den Besitz auf stamm fest.

    chown root:root /etc/rsyslog.d/40-powershell.conf
    
  6. 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 .

  1. Search für die Konsolenanwendung, und starten Sie sie.
  2. Wählen Sie unter Geräte den Computernamen aus.
  3. Geben Sie pwsh im Feld Search für die PowerShell-Standard Binärdatei ein.
  4. Ändern Sie den Suchfilter von in AnyProcess.
  5. Führen Sie die Vorgänge aus.
  6. 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.

  1. Geben Sie pid (Prozess-ID) in das Feld Search ein.
  2. Ändern Sie den Suchfilter in PID.
  3. 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.jsonkonfiguriert. 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