about_Logging_Non-Windows
PowerShell protokoluje interní operace z modulu, poskytovatelů a rutin.
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 :
PowerShell$psrl = Get-Module PSReadLine $psrl.LogPipelineExecutionDetails = $true Get-Module PSReadLine | Select-Object Name, LogPipelineExecutionDetails
OutputName 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 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.
- 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:
-
LogLevel
- Hodnoty:
Always
,Critical
,Error
,Warning
,Informational
,Verbose
Debug
- 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
.
- 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:
-
PowerShellPolicies
- Popis: Nastavení PowerShellPolicies obsahuje možnosti ModuleLogging, ProtectedEventLogging a ScriptBlockLogging . Další informace najdete v tématu Běžná nastavení konfigurace.
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 /etc/systemd/journald.conf
, povolte možnost v konfiguračním souboru deníku. Toto je výchozí konfigurace pro mnoho distribucí 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
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.
- COMMITID – ID 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.
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
.
Vytvořte konfigurační soubor pro
conf
konfiguraci protokolu PowerShellu/etc/rsyslog.d
v adresáři pomocí textového editoru souborů, napříkladnano
. Předpona názvu souboru číslem, které je menší než výchozí. Například kde40-powershell.conf
je50-default.conf
výchozí hodnota .Bashsudo nano /etc/rsyslog.d/40-powershell.conf
Do souboru přidejte následující informace
40-powershell.conf
:text:syslogtag, contains, "powershell[" /var/log/powershell.log & stop
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:text$IncludeConfig /etc/rsyslog.d/*.conf
Pokud ne, budete muset přidat příkaz include ručně.
Ověřte, že jsou atributy a oprávnění správně nastavené.
Bashls -l /etc/rsyslog.d/40-powershell.conf
Output-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:Nastavte vlastnictví na root.
Bashsudo chown root:root /etc/rsyslog.d/40-powershell.conf
Nastavit přístupová oprávnění: uživatel má oprávnění ke čtení a zápisu, uživatelé si ho přečetli.
Bashsudo chmod 644 /etc/rsyslog.d/40-powershell.conf
Restartujte službu rsyslog.
Bashsudo systemctl restart rsyslog.service
Spuštěním vygenerujte
pwsh
informace PowerShellu pro protokolování.Bashpwsh
Poznámka
Soubor
/var/log/powershell.log
se nevytvořil, dokud se nerestartuje služba rsyslog a PowerShell vygeneruje informace pro protokolování.Zadejte dotaz na
powershell.log
soubor a ověřte, že se do nového souboru protokolují informace PowerShellu.PowerShellcat /var/log/powershell.log
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. Nástroj musíte použít log
k dotazování jednotného systému protokolování událostí protokolu PowerShellu. Události protokolu PowerShellu se v konzolové aplikaci v 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í.
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 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 --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'"
Další informace zobrazíte spuštěním log show --help
nápovědy k log show
příkazu.
Můžete také výstupní 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 $logRecord
, které se ukládají do proměnné.
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 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.
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
-
Informace o linuxovém syslogu a rsyslog.conf najdete na místních stránkách počítače
man
s Linuxem. - Informace o protokolování systému macOS najdete v dokumentaci pro vývojáře Společnosti Apple k protokolování.
- Informace o windows najdete v tématu about_Logging_Windows
- Obecná integrace SIEM
Zpětná vazba k produktu PowerShell
PowerShell je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby: