Udostępnij za pośrednictwem


about_Rejestrowanie_Non-Windows

Krótki opis

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

Długi opis

PowerShell rejestruje szczegóły operacji, takie jak uruchamianie i zatrzymywanie silnika oraz uruchamianie i zatrzymywanie dostawców. Rejestruje również szczegółowe informacje o poleceniach programu PowerShell.

Aby uzyskać informacje na temat rejestrowania w programie Windows PowerShell 5.1, zobacz about_Logging.

Lokalizacja dzienników programu PowerShell zależy od platformy docelowej.

  • W systemie Linux program PowerShell rejestruje dziennik dziennika systemowego, który może przekazywać dane do serwera dziennika systemu . Aby uzyskać więcej informacji, zobacz strony man dla dystrybucji systemu Linux.
  • W systemie macOS używany jest ujednolicony system rejestrowania firmy Apple. Aby uzyskać więcej informacji, zobacz dokumentację deweloperów firmy Apple dotyczącą rejestrowania.

Program PowerShell obsługuje konfigurowanie dwóch kategorii rejestrowania:

  • Rejestrowanie modułów — rejestrowanie zdarzeń wykonywania potoku dla składników określonych modułów. Rejestrowanie modułów musi być włączone zarówno dla sesji, jak i określonych modułów. Aby uzyskać więcej informacji na temat konfigurowania tego rejestrowania, zobacz about_PowerShell_Config.

    Jeśli rejestrowanie modułów jest włączone za pośrednictwem konfiguracji, możesz włączyć i wyłączyć rejestrowanie dla określonych modułów w sesji, ustawiając wartość LogPipelineExecutionDetails właściwości modułu.

    Aby na przykład włączyć rejestrowanie dla modułu PSReadLine :

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadLine | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Rejestrowanie bloków skryptów — rejestruj przetwarzanie poleceń, bloków skryptów, funkcji i skryptów niezależnie od tego, czy wywoływane interaktywnie, czy za pośrednictwem automatyzacji.

    Po włączeniu rejestrowania bloków skryptów program PowerShell rejestruje zawartość wszystkich bloków skryptów, które przetwarza. Po włączeniu tej informacji wszystkie nowe sesje programu PowerShell rejestrują te informacje.

    Notatka

    Zaleca się włączenie rejestrowania zdarzeń chronionych w przypadku korzystania z rejestrowania bloków skryptów w celach innych niż diagnostyka. Aby uzyskać więcej informacji, zobacz about_PowerShell_Config.

Konfigurowanie rejestrowania w systemie Linux lub macOS

Konfiguracja rejestrowania w systemach Linux i macOS jest przechowywana w pliku powershell.config.json. Plik powershell.config.json jest plikiem JSON sformatowanym w katalogu $PSHOME programu PowerShell. Jeśli ten plik konfiguracji nie istnieje, musisz go utworzyć, aby zmienić ustawienia domyślne. Każda instalacja programu PowerShell używa własnej kopii tego pliku.

Program PowerShell domyślnie włącza rejestrowanie Informational na kanale Operational. Konfigurację można zmienić, jeśli potrzebujesz dodatkowych danych wyjściowych dziennika, takich jak szczegółowe dane lub włączenie danych wyjściowych dziennika analitycznego.

Poniższy kod to przykładowa konfiguracja:

{
    "ModuleLogging": {
        "EnableModuleLogging": false,
        "ModuleNames": [
            "PSReadLine",
            "PowerShellGet"
        ]
    },
    "ScriptBlockLogging": {
        "EnableScriptBlockInvocationLogging": true,
        "EnableScriptBlockLogging": true
    },
    "LogLevel": "verbose"
}

Poniżej znajduje się lista właściwości konfigurowania rejestrowania programu PowerShell. Jeśli właściwość nie znajduje się na liście w konfiguracji, program PowerShell używa wartości domyślnej.

  • LogIdentity
    • Wartości: <string name>, powershell
    • Opis: nazwa używana podczas rejestrowania. Tożsamość domyślna to powershell. Ta wartość może służyć do określania różnicy między dwoma wystąpieniami instalacji programu PowerShell, takimi jak wersja wersji i wersja beta. Ta wartość służy również do przekierowywania danych wyjściowych dziennika do oddzielnego pliku.
  • LogChannels
    • Wartości: Operational, Analytic
    • Opis: kanały, które należy włączyć. Rozdziel wartości przecinkami podczas określania więcej niż jednego. Wartość domyślna to Operational.
  • PoziomLogu
    • Wartości: Always, Critical, Error, Warning, Informational, Verbose, Debug
    • Opis: określ pojedynczą wartość. Wartości są wymienione w rosnącej kolejności szczegółowości. Wybrana wartość umożliwia siebie i wszystkie wartości przed nią. Wartość domyślna to Informational.
  • LogKeywords
    • Wartości: Runspace, Pipeline, Protocol, Transport, Host, Cmdlets, Serializer, Session, ManagedPlugin
    • Opis: Słowa kluczowe umożliwiają ograniczenie rejestrowania do określonych komponentów w PowerShell. Domyślnie wszystkie słowa kluczowe są włączone i zmiana tej wartości jest przydatna tylko w przypadku wyspecjalizowanych rozwiązywania problemów.
  • Polityki PowerShell
    • Opis: ustawienie PowerShellPolicies zawiera opcje ModuleLogging, ProtectedEventLoggingi ScriptBlockLogging. Aby uzyskać więcej informacji, zobacz Typowe ustawienia konfiguracji.

Wyświetlanie danych dziennika programu PowerShell w dzienniku w systemie Linux

PowerShell loguje w dzienniku systemowym systemd przy użyciu demona journald w dystrybucjach systemu Linux, takich jak Ubuntu i Red Hat Enterprise Linux (RHEL).

Demon journald przechowuje komunikaty dziennika w formacie binarnym. Użyj narzędzia journalctl, aby wysłać zapytanie do dziennika w celu uzyskania wpisów programu PowerShell.

journalctl --grep powershell

Demon journald może przekazywać komunikaty dziennika do serwera protokołu rejestrowania systemu (syslog). Włącz opcję ForwardToSysLog w pliku konfiguracji dziennika /etc/systemd/journald.conf, jeśli chcesz użyć dziennika systemowego rejestrowania w systemie Linux. Jest to domyślna konfiguracja dla wielu dystrybucji systemu Linux.

Wyświetlanie danych dziennika programu PowerShell w dzienniku systemowym w systemie Linux

Użyj menedżera pakietów dla dystrybucji systemu Linux, aby zainstalować serwer dziennika systemu , taki jak rsyslog, jeśli chcesz użyć rejestrowania dziennika systemowego w systemie Linux. Niektóre dystrybucje systemu Linux, takie jak preinstalacja systemu Ubuntu rsyslog.

Protokół syslog przechowuje komunikaty dziennika w standardowym formacie tekstowym. Możesz użyć dowolnego narzędzia do przetwarzania tekstu do wykonywania zapytań lub wyświetlania zawartości dziennika systemowego .

Domyślnie syslog zapisuje wpisy dziennika w następującej lokalizacji:

  • W dystrybucjach opartych na debianie, w tym Ubuntu: /var/log/syslog
  • W dystrybucjach opartych na systemie RHEL: /var/log/messages

W poniższym przykładzie użyto polecenia cat do wykonywania zapytań dotyczących wpisów dziennika systemu programu PowerShell w systemie Ubuntu.

cat /var/log/syslog | grep -i powershell

Format komunikatu dziennika systemowego

Komunikaty dziennika systemowego mają następujący format:

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
  • TIMESTAMP — data/godzina utworzenia wpisu dziennika.
  • MACHINENAME — nazwa systemu, w którym wygenerowano dziennik.
  • PID — identyfikator procesu, który zapisał wpis dziennika.
  • commitID — identyfikator lub tag zatwierdzenia git używany do tworzenia kompilacji.
  • TID — identyfikator wątku, który napisał wpis dziennika.
  • CID — identyfikator kanału w formacie szesnastkowym wpisu dziennika.
    • 0x10 = Operacyjny
    • 0x11 = analityka
  • EVENTID — identyfikator zdarzenia wpisu dziennika.
  • task — identyfikator zadania dla wpisu zdarzenia
  • OPCODE — kod operacji dla wpisu zdarzenia
  • LEVEL — poziom dziennika wpisu zdarzenia
  • wiadomości — komunikat związany z wpisem zdarzenia

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

Zapisywanie komunikatu dziennika programu PowerShell do oddzielnego pliku

Istnieje również możliwość przekierowania wpisów dziennika programu PowerShell do oddzielnego pliku. Gdy wpisy dziennika programu PowerShell są przekierowywane do oddzielnego pliku, nie są już rejestrowane do domyślnego pliku dziennika systemowego.

Poniższe kroki umożliwiają skonfigurowanie wpisów dziennika programu PowerShell w systemie Ubuntu w celu zapisania w pliku dziennika o nazwie powershell.log.

  1. Utwórz plik konfiguracji (conf) dla konfiguracji dziennika programu PowerShell w katalogu /etc/rsyslog.d przy użyciu edytora plików tekstowych, takiego jak nano. Poprzedź nazwę pliku cyfrą mniejszą niż domyślna. Na przykład 40-powershell.conf, gdzie wartość domyślna to 50-default.conf.

    sudo nano /etc/rsyslog.d/40-powershell.conf
    
  2. Dodaj następujące informacje do pliku 40-powershell.conf:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. Sprawdź, czy /etc/rsyslog.conf ma instrukcję include dla nowego pliku. Może mieć ogólne stwierdzenie, które to uwzględnia, na przykład:

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

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

  4. Sprawdź, czy atrybuty i uprawnienia zostały odpowiednio ustawione.

    ls -l /etc/rsyslog.d/40-powershell.conf
    
    -rw-r--r-- 1 root root   67 Nov 28 12:51 40-powershell.conf
    

    Jeśli plik 40-powershell.conf ma inną własność lub uprawnienia, wykonaj następujące kroki:

    1. Ustaw własność na root.

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. Ustaw uprawnienia dostępu: root ma odczyt/zapis, a użytkownicy mają odczyt.

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. Uruchom ponownie usługę rsyslog.

    sudo systemctl restart rsyslog.service
    
  6. Uruchom pwsh, aby wygenerować informacje programu PowerShell do rejestrowania.

    pwsh
    

    Notatka

    Plik /var/log/powershell.log nie zostanie utworzony, dopóki usługa rsyslog zostanie ponownie uruchomiona, a program PowerShell generuje informacje do rejestrowania.

  7. Wykonaj zapytanie dotyczące pliku powershell.log, aby sprawdzić, czy informacje programu PowerShell są rejestrowane w nowym pliku.

    cat /var/log/powershell.log
    

Wyświetlanie danych dziennika programu PowerShell w systemie macOS

PowerShell zapisuje dzienniki w ujednoliconym systemie rejestrowania firmy Apple, co jest funkcją systemu macOS, która pozwala na zbieranie i przechowywanie dzienników systemu i aplikacji w jednej scentralizowanej lokalizacji.

Ujednolicony system rejestrowania firmy Apple przechowuje komunikaty dziennika w formacie binarnym. Do wykonywania zapytań dotyczących ujednoliconego systemu rejestrowania dla zdarzeń dziennika programu PowerShell należy użyć narzędzia log. Zdarzenia dziennika programu PowerShell nie są wyświetlane w aplikacji konsoli w systemie macOS. Aplikacja konsolowa jest przeznaczona dla starszego systemu rejestrowania opartego na syslog, który poprzedza ujednolicony system rejestrowania.

Wyświetlanie danych dziennika programu PowerShell z poziomu wiersza polecenia w systemie macOS

Aby wyświetlić dane dziennika PowerShell z wiersza polecenia w systemie macOS, użyj polecenia log w Terminal lub innej aplikacji powłoki. Te polecenia można uruchamiać z programu PowerShell, Z Shelllub powłoki Bash.

W poniższym przykładzie polecenie log służy do wyświetlania danych dziennika w systemie w czasie rzeczywistym. Proces filtruje dane dziennika tylko dla procesu pwsh. Jeśli masz więcej niż jedno wystąpienie uruchomione, parametr procesu akceptuje również identyfikator procesu jako swoją wartość. Parametr na poziomie pokazuje komunikaty na określonym poziomie i poniżej.

log stream --predicate "subsystem == 'com.microsoft.powershell'" --level info

Polecenie log show może służyć do eksportowania elementów dziennika. Polecenie log show udostępnia opcje eksportowania ostatnich elementów N, 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, 2022:

log show --start "2022-04-05 09:00:00" --predicate "subsystem == 'com.microsoft.powershell'"

Aby uzyskać więcej informacji, uruchom log show --help, aby wyświetlić pomoc dotyczącą polecenia log show.

Możesz również wygenerować dane dziennika w formacie JSON, co umożliwia konwertowanie danych zdarzenia na obiekty programu PowerShell. Poniższy przykład generuje zdarzenia w formacie JSON. Polecenie cmdlet ConvertFrom-Json służy do konwertowania danych JSON na obiekty programu PowerShell, które są przechowywane w zmiennej $logRecord.

log show --predicate "subsystem == 'com.microsoft.powershell'" --style json |
    ConvertFrom-Json | Set-Variable logRecord

Możesz również rozważyć zapisanie dzienników w bardziej bezpiecznym miejscu, takim jak agregator Systemu Zarządzania Informacjami i Zdarzeniami Bezpieczeństwa (SIEM). Za pomocą usługi Microsoft Defender for Cloud Apps można skonfigurować rozwiązanie SIEM na platformie Azure. Aby uzyskać więcej informacji, zobacz generic SIEM integration.

Tryby i poziomy danych dziennika programu PowerShell w systemie macOS

Domyślnie podsystem PowerShell rejestruje komunikaty na poziomie informacji do pamięci (tryb) i domyślne komunikaty na poziomie dysku (trwałość) w systemie macOS. To zachowanie można zmienić, aby włączyć inny tryb i poziom rejestrowania przy użyciu polecenia log config.

Poniższy przykład umożliwia rejestrowanie i trwałość na poziomie informacji dla podsystemu programu PowerShell:

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

Użyj parametru reset, aby przywrócić ustawienia dziennika do ustawień domyślnych podsystemu programu PowerShell:

sudo log config --subsystem com.microsoft.powershell --reset

Zobacz także

  • Informacje o dziennika systemu Linux i rsyslog.conf znajdują się na lokalnych stronach komputera z systemem Linux
  • Aby uzyskać informacje dotyczące rejestrowania systemu macOS, zobacz dokumentację deweloperów firmy Apple dotyczącą rejestrowania
  • Dla systemu Windows zobacz about_Logging_Windows
  • ogólna integracja SIEM