Udostępnij za pośrednictwem


about_Logging_Non-Windows

Krótki opis

Program PowerShell rejestruje operacje wewnętrzne z aparatu, dostawców i poleceń cmdlet.

Długi opis

Szczegółowe informacje o operacjach programu PowerShell są dzienniki programu PowerShell. Na przykład program PowerShell będzie rejestrować operacje, takie jak uruchamianie i zatrzymywanie aparatu oraz uruchamianie i zatrzymywanie dostawców. Będzie również rejestrować szczegółowe informacje o poleceniach programu PowerShell.

Lokalizacja dzienników programu PowerShell jest zależna od platformy docelowej. W systemie Linux można używać dzienników programu PowerShell do dzienników syslog i rsyslog.conf . Aby uzyskać więcej informacji, zapoznaj się ze stronami lokalnymi man komputera z systemem Linux. W systemie macOS jest używany system rejestrowania os_log . Aby uzyskać więcej informacji, zobacz dokumentację dla deweloperów os_log.

Wyświetlanie danych wyjściowych dziennika programu PowerShell w systemie Linux

Dzienniki programu PowerShell do dziennika systemu w systemie Linux i dowolne narzędzia powszechnie używane do wyświetlania zawartości dziennika syslog mogą być używane.

Format wpisów dziennika używa następującego szablonu:

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
Pole Opis
TIMESTAMP Data/godzina utworzenia wpisu dziennika.
MACHINENAME Nazwa systemu, w którym został utworzony dziennik.
PID Identyfikator procesu, który napisał wpis dziennika.
COMMITID Identyfikator git commit lub tag używany do tworzenia kompilacji.
TID Identyfikator wątku wątku, który napisał wpis dziennika.
CID Identyfikator kanału szesnastkowy wpisu dziennika.
10 = operacyjne, 11 = analityczne
EVENTID Identyfikator zdarzenia wpisu dziennika.
TASK Identyfikator zadania wpisu zdarzenia
OPCODE Kod opcode dla wpisu zdarzenia
LEVEL Poziom dziennika wpisu zdarzenia
MESSAGE Komunikat skojarzony z wpisem zdarzenia

Uwaga

EVENTID, TASK, OPCODEi LEVEL są tymi samymi wartościami, które są używane podczas rejestrowania w dzienniku zdarzeń systemu Windows.

Filtrowanie wpisów dziennika programu PowerShell przy użyciu narzędzia rsyslog

Zwykle wpisy dziennika programu PowerShell są zapisywane domyślnie location/file dla dziennika systemowego. Można jednak przekierować wpisy do pliku niestandardowego.

  1. Twórca konfiguracji dziennika programu PowerShell i podaj liczbę, która jest mniejsza niż 50 (dla 50-default.conf), na przykład 40-powershell.conf. Plik powinien zostać umieszczony w obszarze /etc/rsyslog.d.

  2. Dodaj następujący wpis do pliku:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. Upewnij się, że /etc/rsyslog.conf zawiera nowy plik. Często ma ogólną instrukcję include, która wygląda następująco:

    $IncludeConfig /etc/rsyslog.d/*.conf

    Jeśli tak nie jest, musisz ręcznie dodać instrukcję include.

  4. Upewnij się, że atrybuty i uprawnienia są odpowiednio ustawione.

    -rw-r--r-- 1 root root   67 Nov 28 12:51 40-powershell.conf
    
  5. Ustaw własność na root.

    chown root:root /etc/rsyslog.d/40-powershell.conf
    
  6. Ustawianie uprawnień dostępu: katalog główny ma odczyt/zapis, użytkownicy mają odczyt.

    chmod 644 /etc/rsyslog.d/40-powershell.conf
    

Wyświetlanie danych wyjściowych dziennika programu PowerShell w systemie macOS

Najprostszą metodą wyświetlania danych wyjściowych dziennika programu PowerShell w systemie macOS jest użycie aplikacji konsolowej .

  1. Search dla aplikacji konsolowej i uruchom ją.
  2. Wybierz nazwę maszyny w obszarze Urządzenia.
  3. W polu Search wprowadź pwsh nazwę głównego pliku binarnego programu PowerShell.
  4. Zmień filtr wyszukiwania z Any na Process.
  5. Wykonaj operacje.
  6. Opcjonalnie zapisz wyszukiwanie w przyszłości.

Aby filtrować określone wystąpienie procesu programu PowerShell w konsoli programu , zmienna $pid zawiera identyfikator procesu.

  1. Wprowadź pid (identyfikator procesu) w polu Search.
  2. Zmień filtr wyszukiwania na PID.
  3. Wykonaj operacje.

Wyświetlanie danych wyjściowych dziennika programu PowerShell z wiersza polecenia

Polecenie log może służyć do wyświetlania wpisów dziennika programu PowerShell z poziomu wiersza polecenia.

sudo log stream --predicate 'process == "pwsh"' --info

Utrwalanie danych wyjściowych dziennika programu PowerShell

Domyślnie program PowerShell używa domyślnego rejestrowania tylko do pamięci w systemie macOS. To zachowanie można zmienić, aby włączyć trwałość przy użyciu log config polecenia .

Następujący skrypt umożliwia rejestrowanie i trwałość na poziomie informacji:

log config --subsystem com.microsoft.powershell --mode=persist:info,level:info

Następujące polecenie przywraca rejestrowanie programu PowerShell do stanu domyślnego:

log config --subsystem com.microsoft.powershell --mode=persist:default,level:default

Po włączeniu log show trwałości można użyć polecenia do eksportowania elementów dziennika. Polecenie udostępnia opcje eksportowania ostatnich N elementów, elementów od danego czasu lub elementów w danym przedziale czasu.

Na przykład następujące polecenie eksportuje elementy od :9am on April 5 of 2018

log show --info --start "2018-04-05 09:00:00" --predicate "process = 'pwsh'"

Aby uzyskać pomoc, możesz uzyskać pomoc, log uruchamiając log show --help dodatkowe informacje.

Porada

Podczas wykonywania dowolnych poleceń dziennika z wiersza lub skryptu programu PowerShell użyj podwójnych cudzysłowów wokół całego ciągu predykatu i pojedynczych cudzysłowów w obrębie. Pozwala to uniknąć konieczności ucieczki znaków podwójnego cudzysłowu w ciągu predykatu.

Warto również rozważyć zapisanie dzienników zdarzeń w bezpieczniejszej lokalizacji, takiej jak centralny moduł zbierający dziennik zdarzeń lub agregator SIEM . Usługę SIEM można skonfigurować na platformie Azure. Aby uzyskać więcej informacji, zobacz Ogólna integracja rozwiązania SIEM.

Konfigurowanie rejestrowania w systemie spoza systemu Windows

W systemie Windows rejestrowanie jest konfigurowane przez utworzenie odbiorników śledzenia ETW lub użycie Podgląd zdarzeń w celu włączenia rejestrowania analitycznego. W systemach Linux i macOS rejestrowanie jest konfigurowane przy użyciu pliku powershell.config.json. W pozostałej części tej sekcji omówiono konfigurowanie rejestrowania programu PowerShell w systemie spoza systemu Windows.

Domyślnie program PowerShell umożliwia rejestrowanie informacyjne w kanale operacyjnym. Oznacza to, że wszystkie dane wyjściowe dziennika generowane przez program PowerShell oznaczone jako operacyjne i mają poziom dziennika (śledzenia) większy niż informacje będą rejestrowane. Czasami diagnozy mogą wymagać dodatkowych danych wyjściowych dziennika, takich jak pełne dane wyjściowe dziennika lub włączenie danych wyjściowych dziennika analitycznego.

Plik powershell.config.json jest plikiem w formacie JSON znajdującym się w katalogu programu PowerShell $PSHOME . Każda instalacja programu PowerShell używa własnej kopii tego pliku. W przypadku normalnego działania ten plik pozostaje niezmieniony. Chociaż może to być przydatne, aby zmienić niektóre ustawienia w pliku, diagnostykę lub rozróżnienie między wieloma wersjami programu PowerShell w tym samym systemie, a nawet wieloma kopiami tej samej wersji (zobacz LogIdentity w poniższej tabeli).

Poniższy kod to przykładowa konfiguracja:

{
  "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"
}

Właściwości konfigurowania rejestrowania programu PowerShell są wymienione w poniższej tabeli. Wartości oznaczone gwiazdką, takie jak Operational*, wskazują wartość domyślną, gdy w pliku nie podano żadnej wartości.

Właściwość Wartości Opis
LogIdentity (nazwa ciągu) Nazwa do użycia podczas rejestrowania. Domyślnie usługa
Powershell* PowerShell to tożsamość. Ta wartość może być następująca:
służy do określania różnicy między dwoma
wystąpienia instalacji programu PowerShell, takie jak
jako wersja wersji i wersji beta. Ta wartość to
służy również do przekierowywania danych wyjściowych dziennika do elementu
oddzielny plik w systemie Linux. Zobacz dyskusję na temat
rsyslog powyżej.
LogChannels Operacyjne* Kanały do włączenia. Oddzielanie wartości
Analityczne z przecinkiem podczas określania więcej niż jednego.
LogLevel Zawsze Określ pojedynczą wartość. Wartość jest włączona
Krytyczne wartości i wszystkie powyższe wartości w
Błąd po lewej stronie.
Ostrzeżenie
Informacyjne*
Pełny
Debugowanie
LogKeywords Przestrzeń uruchamiania Słowa kluczowe umożliwiają ograniczenie rejestrowania
Potok do określonych składników w programie PowerShell. Autor:
Protokół domyślnie wszystkie słowa kluczowe są włączone i zmieniane
Transport ta wartość jest przydatna tylko dla bardzo
Host wyspecjalizowane rozwiązywanie problemów.
Polecenia cmdlet
Serializer
Sesja
ManagedPlugin

Zobacz też