Sdílet prostřednictvím


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 naleznete v tématu about_Logging.

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

  • PowerShell v Linuxu protokoluje do systémového deníku, který může předávat na syslog server. 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 provádění potrubí pro členy zadaných modulů. Protokolování modulu musí být aktivováno jak pro relaci, tak i pro specifické moduly. Další informace o konfiguraci tohoto protokolování naleznete v tématu about_PowerShell_Config.

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

    Pokud chcete například 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ů, skriptů, funkcí a skriptů bez ohledu na to, jestli jsou vyvolány interaktivně, nebo prostřednictvím automatizace.

    Když povolíte protokolování blokování skriptů, PowerShell zaznamená obsah všech skriptů, které zpracovává. Jakmile je funkce povolena, všechny nové relace PowerShellu protokolují tyto informace.

    Poznámka

    Při použití protokolování blokování skriptů se doporučuje povolit chráněné protokolování událostí pro účely jiné než diagnostické. 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á v souboru powershell.config.json. Soubor powershell.config.json je json formátovaný soubor umístěný v $PSHOME adresáři PowerShellu. 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 protokolování Informational do kanálu Operational. 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.
  • ÚroveňLogu
    • Hodnoty: Always, Critical, Error, Warning, Informational, Verbose, Debug
    • Popis: Zadejte jednu hodnotu. Hodnoty jsou uvedeny v rostoucím pořadí upovídanosti. Vámi zvolená hodnota se aktivuje spolu se všemi hodnotami, které jí předcházejí. Výchozí hodnota je Informational.
  • LogKeywords
    • Hodnoty: Runspace, Pipeline, Protocol, Transport, Host, Cmdlets, 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íží.
  • Pravidla PowerShell
    • Popis: Nastavení PowerShellPolicies obsahujeModuleLogging , ProtectedEventLogginga Možnosti ScriptBlockLogging. Další informace najdete v tématu Společná nastavení konfigurace.

Zobrazení dat protokolu PowerShellu v deníku v Linuxu

PowerShell zapisuje události do systémového deníku použitím démona journald v distribucích Linuxu, jako je Ubuntu a Red Hat Enterprise Linux (RHEL).

journald démon ukládá log zprávy v binárním formátu. Pomocí nástroje journalctl zadejte dotaz na protokol deníku pro položky PowerShellu.

journalctl --grep powershell

journald démon může předávat zprávy deníku na server syslog (System Logging Protocol). Povolte možnost v deníku konfiguračním souboru, pokud chcete v systému Linux použít syslog. 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 syslog server, jako je rsyslog, pokud chcete v systému Linux použít protokolování syslogu. Některé linuxové distribuce, jako je Ubuntu, mají předinstalovaný 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í:

  • Na distribucích založených 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á příkaz cat k dotazování na powershellové syslog položky 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, který napsal položku protokolu.
  • COMMITID – ID nebo značka git commit, která byla použita k vytvoření sestavení.
  • TID – ID vlákna, které zapisuje položku protokolu.
  • CID – šestnáctkový identifikátor kanálu záznamu protokolu.
    • 0x10 = provozní
    • 0x11 = analýza
  • ID události – identifikátor události položky protokolu.
  • ÚKOL – identifikátor úkolu pro položku události
  • OPCODE – operační kód pro záznam události
  • LEVEL – úroveň protokolu pro položku události
  • MESSAGE – zpráva přidružená k položce události

EVENTID, ÚKOL, OPCODEa LEVEL jsou stejné hodnoty jako při zápisu 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 syslog.

Následující kroky nakonfigurují záznamy protokolu PowerShell v Ubuntu pro zápis do souboru protokolu pojmenovaného powershell.log.

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

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

    :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áš soubor 40-powershell.conf jiné vlastnictví nebo oprávnění, proveďte následující kroky:

    1. Nastavte vlastnictví na kořenového.

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

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

    sudo systemctl restart rsyslog.service
    
  6. Spuštěním pwsh vygenerujte 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 soubor powershell.log 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

PowerShell se zapisuje do jednotného systému protokolování od společnosti Apple, což je funkce macOS, která umožňuje shromažďovat a ukládat systémové a aplikační protokoly na jedno centralizované místo.

Jednotný systém protokolování společnosti Apple ukládá zprávy protokolu v binárním formátu. Nástroj log musíte použít k dotazování jednotného systému protokolování událostí protokolu PowerShellu. Události protokolu PowerShellu se v aplikaci konzoly v systému macOS nezobrazují. Konzolová aplikace je určená pro starší protokolování založené na syslogu, které předchází systému sjednoceného protokolování.

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 příkaz log v terminálové nebo jiné hostitelské aplikaci prostředí. Tyto příkazy lze spouštět z PowerShellu, Z Shellnebo Bash.

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

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

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, 2022:

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

Pro více informací spusťte log show --help, abyste zobrazili nápovědu k příkazu log show.

Můžete také exportovat data protokolu ve formátu JSON, což umožňuje převést data události na objekty PowerShellu. Následující příklad vypíše události ve formátu JSON. Rutina ConvertFrom-Json slouží k převodu dat JSON na objekty PowerShellu, které se ukládají do proměnné $logRecord.

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

Můžete také zvážit uložení protokolů do bezpečnějšího místa, jako je například Systém pro správu bezpečnostních informací a událostí (SIEM) nebo agregátor. Pomocí Programu Microsoft Defender for Cloud Apps můžete nastavit SIEM v Azure. Pro více informací viz integraci SIEMobecného.

Režimy a úrovně záznamů 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 ukládá na disk pro jejich uchování (trvalost) v systému macOS. Toto chování lze změnit, aby bylo možné povolit jiný režim a úroveň protokolování pomocí příkazu log config.

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

Viz také

  • Informace o linuxových syslog u a rsyslog.conf najdete na místních stránkách počítače s Linuxem.
  • Informace o protokolování pro macOS najdete v dokumentaci pro vývojáře společnosti Apple k protokolování
  • Informace o Windows naleznete v části about_Logging_Windows
  • Integrace generického SIEM