Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
manstrá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, LogPipelineExecutionDetailsName LogPipelineExecutionDetails ---- --------------------------- PSReadLine TrueProtokolová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.
- Hodnoty:
-
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.
- Hodnoty:
-
Ú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.
- Hodnoty:
-
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íží.
- Hodnoty:
-
Pravidla PowerShell
- Popis: Nastavení
PowerShellPolicies obsahuje ModuleLogging , ProtectedEventLogging aMožnosti ScriptBlockLogging. Další informace najdete v tématu Společná nastavení konfigurace.
- Popis: Nastavení
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
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.
Vytvořte soubor konfigurace (
conf) pro konfiguraci protokolu PowerShellu v adresáři/etc/rsyslog.dpomocí textového editoru souborů, jako jenano. Předpona názvu souboru číslem, které je menší než výchozí. Například40-powershell.conf, kde je výchozí50-default.conf.sudo nano /etc/rsyslog.d/40-powershell.confDo souboru
40-powershell.confpřidejte následující informace::syslogtag, contains, "powershell[" /var/log/powershell.log & stopOvěřte, že
/etc/rsyslog.confobsahuje příkaz include pro nový soubor. Může mít obecný příkaz, který ho obsahuje, například:$IncludeConfig /etc/rsyslog.d/*.confPokud ne, budete muset přidat příkaz include ručně.
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.confPokud má váš soubor
40-powershell.confjiné vlastnictví nebo oprávnění, proveďte následující kroky:Nastavte vlastnictví na kořenového.
sudo chown root:root /etc/rsyslog.d/40-powershell.confNastavit 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
Restartujte službu rsyslog.
sudo systemctl restart rsyslog.serviceSpuštěním
pwshvygenerujte informace PowerShellu pro protokolování.pwshPoznámka
Soubor
/var/log/powershell.logse nevytvořil, dokud se nerestartuje služba rsyslog a PowerShell vygeneruje informace pro protokolování.Zadejte dotaz na soubor
powershell.loga 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
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ě
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 arsyslog.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