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

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

Aby uzyskać informacje o logowaniu w Windows PowerShell 5.1, zobacz about_Logging.

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

  • W systemie Linux program PowerShell rejestruje dziennik systemowy , który może przekazywać dalej do serwera dziennika syslog . Aby uzyskać więcej informacji, zobacz man strony dystrybucji systemu Linux.
  • W systemie macOS jest używany 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łu — rejestruje zdarzenia wykonywania potoku dla elementów członkowskich 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ść właściwości LogPipelineExecutionDetails modułu.

    Aby na przykład włączyć rejestrowanie modułu 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 — rejestrowanie przetwarzania poleceń, bloków skryptów, funkcji i skryptów, niezależnie od tego, czy są wywoływane interaktywnie, czy za pośrednictwem automatyzacji.

    Po włączeniu rejestrowania bloków skryptów program PowerShell rejestruje zawartość wszystkich bloków skryptu, które przetwarza. Po włączeniu tej opcji każda nowa sesja programu PowerShell rejestruje te informacje.

    Uwaga

    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 powershell.config.json pliku. Plik powershell.config.json jest plikiem w formacie JSON znajdującym się w katalogu programu PowerShell $PSHOME . 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.

Domyślnie program PowerShell umożliwia Informational rejestrowanie w Operational kanale. Konfigurację można zmienić, jeśli potrzebujesz dodatkowych danych wyjściowych dziennika, takich jak pełne lub włączanie 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. Domyślną tożsamością jest powershell. Ta wartość może służyć do określania różnicy między dwoma wystąpieniami instalacji programu PowerShell, takimi jak wersja wydania i wersja beta. Ta wartość jest również używana do przekierowywania danych wyjściowych dziennika do oddzielnego pliku.
  • LogChannels
    • Wartości: Operational, Analytic
    • Opis: kanały do włączenia. Rozdziel wartości przecinkami podczas określania więcej niż jednego. Wartość domyślna to Operational.
  • LogLevel
    • Wartości: Always, , Critical, WarningError, Informational, , VerboseDebug
    • Opis: określ pojedynczą wartość. Wartości są wymienione w rosnącej kolejności szczegółowości. Wybrana wartość włącza się i wszystkie wartości przed nim. Wartość domyślna to Informational.
  • LogKeywords
    • Wartości: Runspace, , ProtocolPipeline, TransportSerializerHostCmdlets, , SessionManagedPlugin
    • Opis: Słowa kluczowe umożliwiają ograniczenie rejestrowania do określonych składników w programie 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.
  • PowerShellPolicies
    • Opis: Ustawienie Programu PowerShellPolicies zawiera opcje Rejestrowanie modułów, ProtectedEventLogging i ScriptBlockLogging . Aby uzyskać więcej informacji, zobacz Typowe ustawienia konfiguracji.

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

Dzienniki programu PowerShell do dziennika systemowego przy użyciu demona dziennika w dystrybucjach systemu Linux, takich jak Ubuntu i Red Hat Enterprise Linux (RHEL).

Demon dziennika przechowuje komunikaty dziennika w formacie binarnym. journalctl Użyj narzędzia do wykonywania zapytań dotyczących dziennika dziennika dla wpisów programu PowerShell.

journalctl --grep powershell

Demon dziennika może przekazywać komunikaty dziennika do serwera protokołu rejestrowania systemu (syslog). ForwardToSysLog Włącz opcję w pliku konfiguracji dziennika, /etc/systemd/journald.conf jeśli chcesz użyć rejestrowania dziennika systemowego 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 syslog , 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 dziennik syslog zapisuje wpisy dziennika w następującej lokalizacji:

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

W poniższym przykładzie użyto polecenia do cat wykonywania zapytań dotyczących wpisów dziennika syslog 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 został utworzony dziennik.
  • PID — identyfikator procesu, który zapisał wpis dziennika.
  • COMMITID — identyfikator zatwierdzenia usługi Git lub tag używany do tworzenia kompilacji.
  • TID — identyfikator wątku wątku, który napisał wpis dziennika.
  • CID — identyfikator kanału szesnastkowego wpisu dziennika.
    • 0x10 = operacyjne
    • 0x11 = analityczne
  • EVENTID — identyfikator zdarzenia wpisu dziennika.
  • TASK — identyfikator zadania wpisu zdarzenia
  • OPCODE — kod opcode wpisu zdarzenia
  • LEVEL — poziom dziennika wpisu zdarzenia
  • MESSAGE — komunikat skojarzony z wpisem zdarzenia

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

Zapisywanie komunikatu dziennika programu PowerShell w osobnym 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 w domyślnym pliku dziennika systemu.

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. Twórca plik konfiguracji (conf) dla konfiguracji dziennika programu PowerShell w /etc/rsyslog.d katalogu przy użyciu edytora plików tekstowych, takiego jak nano. Prefiks nazwy pliku z liczbą 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 40-powershell.conf pliku:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. Sprawdź, czy /etc/rsyslog.conf ma instrukcję include dla nowego pliku. Może zawierać ogólną instrukcję zawierającą ją, 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 są odpowiednio ustawione.

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

    40-powershell.conf Jeśli plik 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. Ustawianie uprawnień dostępu: katalog główny ma odczyt/zapis, 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 polecenie , pwsh aby wygenerować informacje programu PowerShell w celu zarejestrowania.

    pwsh
    

    Uwaga

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

  7. Wykonaj zapytanie o plik, 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

Dzienniki programu PowerShell w ujednoliconym systemie rejestrowania firmy Apple— funkcja systemu macOS, która umożliwia zbieranie i przechowywanie dzienników systemu i aplikacji w jednej scentralizowanej lokalizacji.

Ujednolicony system rejestrowania firmy Apple przechowuje komunikaty dziennika w formacie binarnym. Użyj narzędzia Konsola lub dziennika, aby wysłać zapytanie do ujednoliconego systemu rejestrowania dla wpisów programu PowerShell.

Wyświetlanie danych dziennika programu PowerShell w aplikacji konsolowej w systemie macOS

Aplikacja konsolowa w systemie macOS to narzędzie, które udostępnia graficzny interfejs użytkownika do wyświetlania danych dziennika. Aplikacja konsolowa jest domyślnie dołączona do systemu macOS i można uzyskać do nich dostęp, otwierając folder Narzędzia w folderze Aplikacje .

Wykonaj następujące kroki, aby wyświetlić dane dziennika programu PowerShell w aplikacji konsolowej w systemie macOS:

  1. Search dla aplikacji konsolowej i uruchom ją.
  2. Wybierz nazwę maszyny w obszarze Urządzenia.
  3. W polu Search wprowadź pwsh dla głównego pliku binarnego programu PowerShell i naciśnij klawisz Return.
  4. Zmień filtr wyszukiwania z Any na Process.
  5. Kliknij przycisk Uruchom.
  6. Uruchom polecenie , pwsh aby wygenerować informacje programu PowerShell w celu zarejestrowania.

Identyfikator procesu uruchomionego wystąpienia programu PowerShell jest przechowywany w zmiennej $PID . Wykonaj następujące kroki, aby filtrować określone wystąpienie procesu programu PowerShell w aplikacji konsolowej .

  1. Uruchom wystąpienie klasy pwsh.
  2. Uruchom polecenie $PID w wystąpieniu programu PowerShell uruchomionego w poprzednim kroku, aby określić jego identyfikator procesu.
  3. Wprowadź identyfikator procesu w pwsh polu Search i naciśnij klawisz Return.
  4. Zmień filtr wyszukiwania z Any na PID.
  5. Kliknij przycisk Uruchom.
  6. Generowanie informacji programu PowerShell do rejestrowania z wystąpienia programu PowerShell uruchomionego w pierwszym kroku.

Aby uzyskać więcej informacji, zobacz wyświetlanie komunikatów dziennika w konsoli na komputerze Mac.

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

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

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

log stream --process pwsh --level info

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 log config polecenia .

Poniższy przykład umożliwia rejestrowanie na poziomie informacji i trwałość 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 wartości domyślnych podsystemu programu PowerShell:

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

Polecenie może służyć do eksportowania log show elementów dziennika. Polecenie log show 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 2022

log show --info --start "2022-04-05 09:00:00" --process pwsh

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

Warto również rozważyć zapisanie dzienników w bezpieczniejszej lokalizacji, takiej jak agregator zabezpieczeń informacji i zdarzeń (SIEM). Za pomocą Microsoft Defender for Cloud Apps można skonfigurować usługę SIEM na platformie Azure. Aby uzyskać więcej informacji, zobacz Ogólna integracja rozwiązania SIEM.

Zobacz też