about_Logging_Non-Windows

Krátký popis

PowerShell protokoluje interní operace z modulu, poskytovatelů a rutin.

Dlouhý popis

PowerShell protokoluje podrobnosti o operacích PowerShellu, jako je spouštění a zastavování modulu a spouštění a zastavování zprostředkovatelů. Protokoluje také podrobnosti o příkazech PowerShellu.

Informace o protokolování v prostředí Windows PowerShell 5.1 najdete v tématu about_Logging.

Umístění protokolů PowerShellu závisí na cílové platformě.

  • V Linuxu protokoluje PowerShell do systémového deníku , který může předávat na server syslogu . Další informace najdete na man stránkách distribuce Linuxu.
  • V systému macOS se používá jednotný systém protokolování společnosti Apple. Další informace najdete v dokumentaci pro vývojáře společnosti Apple k protokolování.

PowerShell podporuje konfiguraci dvou kategorií protokolování:

  • Protokolování modulu – Zaznamená události spuštění kanálu pro členy zadaných modulů. Protokolování modulu musí být povolené jak pro relaci, tak pro konkrétní moduly. Další informace o konfiguraci tohoto protokolování najdete v tématu about_PowerShell_Config.

    Pokud je protokolování modulu povoleno prostřednictvím konfigurace, můžete povolit a zakázat protokolování pro konkrétní moduly v relaci nastavením hodnoty LogPipelineExecutionDetails vlastnosti modulu.

    Pokud například chcete povolit protokolování modulu pro modul PSReadLine :

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Protokolování bloku skriptu – Zaznamenává zpracování příkazů, bloků skriptů, funkcí a skriptů bez ohledu na to, jestli jsou vyvolány interaktivně, nebo prostřednictvím automatizace.

    Když povolíte protokolování bloku skriptu, PowerShell zaznamená obsah všech skriptů, které zpracovává. Po povolení protokoluje všechny nové relace PowerShellu tyto informace.

    Poznámka:

    Při použití protokolování blokování skriptů se doporučuje povolit protokolování chráněných událostí pro jiné účely než diagnostické účely. Další informace najdete v tématu about_PowerShell_Config.

Konfigurace protokolování v Linuxu nebo macOS

Konfigurace pro protokolování v Linuxu a macOS je uložená powershell.config.json v souboru. Soubor powershell.config.json je soubor ve formátu JSON umístěný v adresáři PowerShellu $PSHOME . Pokud tento konfigurační soubor neexistuje, budete ho muset vytvořit, abyste změnili výchozí nastavení. Každá instalace PowerShellu používá vlastní kopii tohoto souboru.

PowerShell ve výchozím nastavení umožňuje Informational protokolování do Operational kanálu. Konfiguraci můžete změnit, pokud potřebujete další výstup protokolu, například podrobný výstup nebo povolení výstupu analytického protokolu.

Následující kód je příkladem konfigurace:

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

Následuje seznam vlastností pro konfiguraci protokolování PowerShellu. Pokud tato vlastnost není uvedená v konfiguraci, PowerShell použije výchozí hodnotu.

  • LogIdentity
    • Hodnoty: <string name>, powershell
    • Popis: Název, který se má použít při protokolování. Výchozí identita je powershell. Tato hodnota se dá použít k určení rozdílu mezi dvěma instancemi instalace PowerShellu, jako je verze a beta verze. Tato hodnota se také používá k přesměrování výstupu protokolu do samostatného souboru.
  • LogChannels
    • Hodnoty: Operational, Analytic
    • Popis: Kanály, které chcete povolit. Hodnoty oddělte čárkou při zadávání více hodnot. Výchozí hodnota je Operational.
  • Loglevel
    • Hodnoty: Always, Critical, Error, Warning, Informational, VerboseDebug
    • Popis: Zadejte jednu hodnotu. Hodnoty jsou uvedeny v rostoucím pořadí podrobností. Hodnota, kterou zvolíte, se povolí a všechny hodnoty před ní. Výchozí hodnota je Informational.
  • LogKeywords
    • Hodnoty: Runspace, Pipeline, Protocol, Transport, HostCmdlets, Serializer, , Session,ManagedPlugin
    • Popis: Klíčová slova poskytují možnost omezit protokolování na konkrétní komponenty v PowerShellu. Ve výchozím nastavení jsou všechna klíčová slova povolená a změnit tuto hodnotu je užitečná jenom pro specializované řešení potíží.
  • PowerShellPolicies
    • Popis: Nastavení PowerShellPolicies obsahuje možnosti ModuleLogging, ProtectedEventLogging a ScriptBlockLogging . Další informace najdete v tématu Běžná nastavení konfigurace.

Zobrazení dat protokolu PowerShellu v deníku v Linuxu

PowerShell protokoluje do systémového deníku pomocí démon deníku v linuxových distribucích, jako je Ubuntu a Red Hat Enterprise Linux (RHEL).

Démon deníku ukládá zprávy protokolu v binárním formátu. journalctl Pomocí nástroje můžete dotazovat protokol deníku pro položky PowerShellu.

journalctl --grep powershell

Démon deníku může předávat zprávy protokolu na server syslog (System Logging Protocol). ForwardToSysLog Pokud chcete v systému Linux použít protokolování syslogu, povolte možnost v konfiguračním /etc/systemd/journald.confsouboru deníku. Toto je výchozí konfigurace pro mnoho distribucí Linuxu.

Zobrazení dat protokolu PowerShellu v syslogu v Linuxu

Pomocí správce balíčků pro vaši linuxovou distribuci nainstalujte server syslog, jako je rsyslog, pokud chcete v systému Linux použít protokolování syslogu. Některé linuxové distribuce, jako je předinstalace Ubuntu rsyslog.

Protokol syslog ukládá zprávy protokolu ve standardizovaném textovém formátu. K dotazování nebo zobrazení obsahu syslogu můžete použít libovolný nástroj pro zpracování textu.

Ve výchozím nastavení syslog zapisuje položky protokolu do následujícího umístění:

  • Distribuce založené na Debianu, včetně Ubuntu: /var/log/syslog
  • V distribucích založených na RHEL: /var/log/messages

Následující příklad používá cat příkaz k dotazování na položky syslog PowerShellu v Ubuntu.

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

Formát zprávy Syslogu

Zprávy Syslog mají následující formát:

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
  • TIMESTAMP – Datum a čas vytvoření položky protokolu.
  • MACHINENAME – název systému, ve kterém byl protokol vytvořen.
  • PID – ID procesu procesu, který zapisoval položku protokolu.
  • COMMITIDID potvrzení gitu nebo značka použitá k vytvoření sestavení.
  • TID – ID vlákna vlákna, které zapisuje položku protokolu.
  • CID – identifikátor šestnáctkového kanálu položky protokolu.
    • 0x10 = provozní
    • 0x11 = analýza
  • EVENTID – identifikátor události položky protokolu.
  • TASK – identifikátor úkolu pro položku události
  • OPCODE – opcode pro položku události
  • LEVEL – úroveň protokolu pro položku události
  • MESSAGE - Zpráva přidružená k položce události

EVENTID, TASK, OPCODE a LEVEL jsou stejné hodnoty jako při protokolování do protokolu událostí Systému Windows.

Zápis zprávy protokolu PowerShellu do samostatného souboru

Položky protokolu PowerShellu je také možné přesměrovat do samostatného souboru. Když se položky protokolu PowerShellu přesměrují do samostatného souboru, nebudou se už protokolovat do výchozího souboru syslogu.

Následující kroky nakonfigurují položky protokolu PowerShellu v Ubuntu pro zápis do souboru protokolu s názvem powershell.log.

  1. Vytvořte konfigurační soubor proconf konfiguraci protokolu PowerShellu /etc/rsyslog.d v adresáři pomocí textového editoru souborů, například nano. Předpona názvu souboru číslem, které je menší než výchozí. Například kde 40-powershell.conf je 50-default.confvýchozí hodnota .

    sudo nano /etc/rsyslog.d/40-powershell.conf
    
  2. Do souboru přidejte následující informace 40-powershell.conf :

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. Ověřte, že /etc/rsyslog.conf obsahuje příkaz include pro nový soubor. Může mít obecný příkaz, který ho obsahuje, například:

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

    Pokud ne, budete muset přidat příkaz include ručně.

  4. Ověřte, že jsou atributy a oprávnění správně nastavené.

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

    Pokud má váš 40-powershell.conf soubor jiné vlastnictví nebo oprávnění, proveďte následující kroky:

    1. Nastavte vlastnictví na root.

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. Nastavit přístupová oprávnění: uživatel má oprávnění ke čtení a zápisu, uživatelé si ho přečetli.

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. Restartujte službu rsyslog.

    sudo systemctl restart rsyslog.service
    
  6. Spuštěním vygenerujte pwsh informace PowerShellu pro protokolování.

    pwsh
    

    Poznámka:

    Soubor /var/log/powershell.log se nevytvořil, dokud se nerestartuje služba rsyslog a PowerShell vygeneruje informace pro protokolování.

  7. Zadejte dotaz na powershell.log soubor a ověřte, že se do nového souboru protokolují informace PowerShellu.

    cat /var/log/powershell.log
    

Zobrazení dat protokolu PowerShellu v systému macOS

Protokoly PowerShellu do jednotného systému protokolování Společnosti Apple, který umožňuje shromažďování a ukládání protokolů systému a aplikací do jednoho centralizovaného umístění.

Jednotný systém protokolování společnosti Apple ukládá zprávy protokolu v binárním formátu. K dotazování jednotného systému protokolování pro položky PowerShellu použijte konzolovou aplikaci nebo nástroj protokolu.

Zobrazení dat protokolu PowerShellu v konzolové aplikaci v macOS

Konzolová aplikace v systému macOS je nástroj, který poskytuje grafické uživatelské rozhraní pro zobrazení dat protokolu. Konzolová aplikace je ve výchozím nastavení součástí systému macOS a je k ní přístupná otevřením složky Nástroje ve složce Aplikace.

Pomocí následujících kroků zobrazíte data protokolu PowerShellu v konzolové aplikaci v systému macOS:

  1. Vyhledejte konzolovou aplikaci a spusťte ji.
  2. V části Zařízení vyberte název počítače.
  3. Do vyhledávacího pole zadejte pwsh hlavní binární soubor PowerShellu a stiskněte return.
  4. Změňte filtr hledání z Any na Process.
  5. Klikněte na tlačítko Spustit.
  6. Spuštěním vygenerujte pwsh informace PowerShellu pro protokolování.

ID procesu spuštěné instance PowerShellu $PID je uloženo v proměnné. Následující postup použijte k filtrování konkrétní instance procesu PowerShellu v konzolové aplikaci.

  1. Spusťte instanci pwsh.
  2. Spuštěním $PID v instanci PowerShellu, která byla spuštěna v předchozím kroku, zjistěte ID procesu.
  3. Do vyhledávacího pole zadejte ID pwsh procesu a stiskněte return.
  4. Změňte filtr hledání z Any na PID.
  5. Klikněte na tlačítko Spustit.
  6. Vygenerujte informace PowerShellu pro přihlášení z instance PowerShellu, která byla spuštěna v prvním kroku.

Další informace najdete v tématu Zobrazení zpráv protokolu v konzole na Macu.

Zobrazení dat protokolu PowerShellu z příkazového řádku v macOS

Pokud chcete zobrazit data protokolu PowerShellu z příkazového řádku v systému macOS, použijte log příkaz v terminálové nebo jiné hostitelské aplikaci prostředí. Tyto příkazy je možné spouštět z Prostředí PowerShell, Z Shell (Zsh) nebo Bash.

V následujícím příkladu se log příkaz používá k zobrazení dat protokolu ve vašem systému, když se vyskytují v reálném čase. Parametr procesu filtruje data protokolu pouze pwsh pro tento proces. Pokud máte spuštěnou pwsh více než jednu instanci, parametr procesu přijímá jako hodnotu také ID procesu. Parametr úrovně zobrazuje zprávy na zadané úrovni a níže.

log stream --process pwsh --level info

Režimy a úrovně dat protokolu PowerShellu v macOS

Ve výchozím nastavení subsystém PowerShell protokoluje zprávy na úrovni informací do paměti (režim) a výchozí zprávy na úrovni disku (trvalost) v systému macOS. Toto chování je možné změnit, aby se pomocí log config příkazu povolil jiný režim a úroveň protokolování.

Následující příklad umožňuje protokolování na úrovni informací a trvalost subsystému PowerShellu:

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

Pomocí parametru resetování vraťte nastavení protokolu na výchozí hodnoty subsystému PowerShellu:

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

Příkaz log show lze použít k exportu položek protokolu. Příkaz log show poskytuje možnosti pro export posledních N položek, položek od určitého času nebo položek v daném časovém rozsahu.

Následující příkaz například exportuje položky od 9am on April 5 of 2022:

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

Další informace zobrazíte spuštěním log show --help nápovědy k log show příkazu.

Můžete také zvážit uložení protokolů do bezpečnějšího umístění, jako je agregátor zabezpečení informací a správa událostí (SIEM ). Pomocí Programu Microsoft Defender for Cloud Apps můžete nastavit SIEM v Azure. Další informace najdete v tématu Obecná integrace SIEM.

Viz také