about_Logging_Non-Windows
Kort beskrivning
PowerShell loggar interna åtgärder från motorn, leverantörerna och cmdletarna.
Lång beskrivning
PowerShell loggar information om PowerShell-åtgärder, till exempel att starta och stoppa motorn och starta och stoppa leverantörer. Den loggar också information om PowerShell-kommandon.
Information om loggning i Windows PowerShell 5.1 finns i about_Logging.
Platsen för PowerShell-loggar är beroende av målplattformen.
- I Linux loggar PowerShell till den systemjournal som kan vidarebefordras till en syslog-server . Mer information finns på
man
sidorna för din Linux-distribution. - På macOS används Apples enhetliga loggningssystem. Mer information finns i Apples utvecklardokumentation om loggning.
PowerShell stöder konfiguration av två loggningskategorier:
Modulloggning – Registrera pipelinekörningshändelser för medlemmar i angivna moduler. Modulloggning måste vara aktiverad för både sessionen och specifika moduler. Mer information om hur du konfigurerar den här loggningen finns i about_PowerShell_Config.
Om modulloggning är aktiverat via konfiguration kan du aktivera och inaktivera loggning för specifika moduler i en session genom att ange värdet för egenskapen LogPipelineExecutionDetails för modulen.
Om du till exempel vill aktivera modulloggning för PSReadLine-modulen :
$psrl = Get-Module PSReadLine $psrl.LogPipelineExecutionDetails = $true Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
Name LogPipelineExecutionDetails ---- --------------------------- PSReadLine True
Loggning av skriptblock – Registrera bearbetning av kommandon, skriptblock, funktioner och skript oavsett om de anropas interaktivt eller via automatisering.
När du aktiverar loggning av skriptblock registrerar PowerShell innehållet i alla skriptblock som bearbetas. När den här informationen har aktiverats loggar alla nya PowerShell-sessioner den här informationen.
Kommentar
Vi rekommenderar att du aktiverar loggning av skyddade händelser när du använder loggning av skriptblock i något annat än diagnostiksyfte. Mer information finns i about_PowerShell_Config.
Konfigurera loggning på Linux eller macOS
Konfigurationen för att logga in på Linux och macOS lagras i powershell.config.json
filen. Filen powershell.config.json
är en JSON-formaterad fil som finns i PowerShell-katalogen $PSHOME
. Om den här konfigurationsfilen inte finns måste du skapa den för att ändra standardinställningarna. Varje installation av PowerShell använder sin egen kopia av den här filen.
Som standard aktiverar Informational
PowerShell loggning till Operational
kanalen. Du kan ändra konfigurationen om du behöver ytterligare loggutdata, till exempel utförliga eller aktivera analysloggutdata.
Följande kod är ett exempel på konfiguration:
{
"ModuleLogging": {
"EnableModuleLogging": false,
"ModuleNames": [
"PSReadLine",
"PowerShellGet"
]
},
"ScriptBlockLogging": {
"EnableScriptBlockInvocationLogging": true,
"EnableScriptBlockLogging": true
},
"LogLevel": "verbose"
}
Följande är en lista över egenskaper för att konfigurera PowerShell-loggning. Om egenskapen inte visas i konfigurationen använder PowerShell standardvärdet.
- LogIdentity
- Värden:
<string name>
,powershell
- Beskrivning: Namnet som ska användas vid loggning. Standardidentiteten är
powershell
. Det här värdet kan användas för att se skillnaden mellan två instanser av en PowerShell-installation, till exempel en version och en betaversion. Det här värdet används också för att omdirigera loggutdata till en separat fil.
- Värden:
- LogChannels
- Värden:
Operational
,Analytic
- Beskrivning: De kanaler som ska aktiveras. Avgränsa värdena med ett kommatecken när du anger mer än ett. Standardvärdet är
Operational
.
- Värden:
- LogLevel
- Värden:
Always
,Critical
,Error
,Warning
,Informational
, , ,Verbose
Debug
- Beskrivning: Ange ett enda värde. Värdena visas i ökad ordning. Värdet du väljer aktiverar sig själv och alla värden före det. Standardvärdet är
Informational
.
- Värden:
- LogKeywords
- Värden:
Runspace
,Pipeline
,Protocol
,Transport
,Host
,Cmdlets
,Serializer
, , ,Session
ManagedPlugin
- Beskrivning: Nyckelord ger möjlighet att begränsa loggning till specifika komponenter i PowerShell. Som standard är alla nyckelord aktiverade och att ändra det här värdet är bara användbart för specialiserad felsökning.
- Värden:
- PowerShellPolicies
- Beskrivning: Inställningen PowerShellPolicies innehåller alternativen ModuleLogging, ProtectedEventLogging och ScriptBlockLogging . Mer information finns i Vanliga konfigurationsinställningar.
Visa PowerShell-loggdata i journaler i Linux
PowerShell loggar till den systemade journalen med den journalfördelade daemonen på Linux-distributioner som Ubuntu och Red Hat Enterprise Linux (RHEL).
Den journalade daemonen lagrar loggmeddelanden i binärt format. Använd verktyget journalctl
för att fråga journalloggen efter PowerShell-poster.
journalctl --grep powershell
Den journalfördelade daemonen kan vidarebefordra loggmeddelanden till en systemloggningsprotokollserver (syslog). ForwardToSysLog
Aktivera alternativet i den /etc/systemd/journald.conf
journalfördelade konfigurationsfilen om du vill använda syslog-loggning på Linux-systemet. Detta är standardkonfigurationen för många Linux-distributioner.
Visa PowerShell-loggdata i syslog i Linux
Använd pakethanteraren för Linux-distributionen för att installera en syslog-server , till exempel rsyslog om du vill använda syslog-loggning på Linux-systemet. Vissa Linux-distributioner, till exempel Ubuntu preinstall rsyslog.
Syslog-protokollet lagrar loggmeddelanden i ett standardiserat textformat. Du kan använda alla textbearbetningsverktyg för att fråga efter eller visa syslog-innehåll .
Som standard skriver syslog loggposter till följande plats:
- Om Debianbaserade distributioner, inklusive Ubuntu:
/var/log/syslog
- På RHEL-baserade distributioner:
/var/log/messages
I följande exempel används cat
kommandot för att fråga efter PowerShell-syslogposter på Ubuntu.
cat /var/log/syslog | grep -i powershell
Syslog-meddelandeformat
Syslog-meddelanden har följande format:
TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
[EVENTID:TASK.OPCODE.LEVEL] MESSAGE
- TIMESTAMP – ett datum/en tid då loggposten skapades.
- MACHINENAME – namnet på systemet där loggen skapades.
- PID – process-ID för processen som skrev loggposten.
- COMMITID – Git-inchecknings-ID:t eller taggen som används för att skapa versionen.
- TID – tråd-ID för tråden som skrev loggposten.
- CID – hexkanalidentifieraren för loggposten.
- 0x10 = Drift
- 0x11 = Analys
- EVENTID – händelseidentifieraren för loggposten.
- UPPGIFT – Aktivitetsidentifieraren för händelseposten
- OPCODE – opcode för händelseposten
- LEVEL – loggnivån för händelseposten
- MEDDELANDE – meddelandet som är associerat med händelseposten
EVENTID, TASK, OPCODE och LEVEL är samma värden som används vid loggning till Windows-händelseloggen.
Skriva PowerShell-loggmeddelande till en separat fil
Det går också att omdirigera PowerShell-loggposterna till en separat fil. När PowerShell-loggposter omdirigeras till en separat fil loggas de inte längre till standardfilen för syslog.
Följande steg konfigurerar PowerShell-loggposter på Ubuntu för att skriva till en loggfil med namnet powershell.log
.
Skapa en konfigurationsfil (
conf
) för PowerShell-loggkonfigurationen/etc/rsyslog.d
i katalogen med hjälp av en textfilredigerare somnano
. Prefixa filnamnet med ett tal som är mindre än standardvärdet. Till exempel där40-powershell.conf
standardvärdet är50-default.conf
.sudo nano /etc/rsyslog.d/40-powershell.conf
Lägg till följande information i
40-powershell.conf
filen::syslogtag, contains, "powershell[" /var/log/powershell.log & stop
Kontrollera att det
/etc/rsyslog.conf
finns en include-instruktion för den nya filen. Den kan ha en allmän instruktion som innehåller den, till exempel:$IncludeConfig /etc/rsyslog.d/*.conf
Om den inte gör det måste du lägga till en include-instruktion manuellt.
Kontrollera att attributen och behörigheterna har angetts på rätt sätt.
ls -l /etc/rsyslog.d/40-powershell.conf
-rw-r--r-- 1 root root 67 Nov 28 12:51 40-powershell.conf
Om filen
40-powershell.conf
har olika ägarskap eller behörigheter utför du följande steg:Ange ägarskap till rot.
sudo chown root:root /etc/rsyslog.d/40-powershell.conf
Ange åtkomstbehörigheter: roten har läs-/skrivbehörighet, användarna har läst.
sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
Starta om rsyslog-tjänsten.
sudo systemctl restart rsyslog.service
Kör
pwsh
för att generera PowerShell-information att logga.pwsh
Kommentar
Filen
/var/log/powershell.log
skapas inte förrän rsyslog-tjänsten har startats om och PowerShell genererar information att logga.powershell.log
Fråga filen för att verifiera att PowerShell-informationen loggas till den nya filen.cat /var/log/powershell.log
Visa PowerShell-loggdata på macOS
PowerShell loggar till Apples enhetliga loggningssystem, en funktion i macOS som möjliggör insamling och lagring av system- och programloggar på en enda central plats.
Apples enhetliga loggningssystem lagrar loggmeddelanden i binärt format. Du måste använda log
verktyget för att köra frågor mot det enhetliga loggningssystemet för PowerShell-logghändelser. PowerShell-logghändelserna visas inte i konsolprogrammet på macOS. Konsolappen är utformad för äldre syslog-baserad loggning som föregår det enhetliga loggningssystemet.
Visa PowerShell-loggdata från kommandoraden på macOS
Om du vill visa PowerShell-loggdata från en kommandorad i macOS använder du log
kommandot i terminalen eller något annat gränssnittsvärdprogram. Dessa kommandon kan köras från PowerShell, Z Shell eller Bash.
I följande exempel log
används kommandot för att visa loggdata i systemet som de inträffar i realtid. Processparametern filtrerar endast pwsh
loggdata för processen. Om du har fler än en instans av pwsh
körningen accepterar processparametern även ett process-ID som dess värde. Nivåparametern visar meddelanden på den angivna nivån och nedan.
log stream --predicate "subsystem == 'com.microsoft.powershell'" --level info
Kommandot log show
kan användas för att exportera loggobjekt. Kommandot log show
innehåller alternativ för att exportera de sista N
objekten, objekten sedan en viss tid eller objekt inom ett angivet tidsintervall.
Följande kommando exporterar till exempel objekt sedan 9am on April 5, 2022
:
log show --start "2022-04-05 09:00:00" --predicate "subsystem == 'com.microsoft.powershell'"
Om du vill ha mer information kör du log show --help
för att visa hjälpen för log show
kommandot.
Du kan också mata ut loggdata i JSON-format, vilket gör att du kan konvertera händelsedata till PowerShell-objekt. I följande exempel matas händelserna ut i JSON-format. Cmdleten ConvertFrom-Json
används för att konvertera JSON-data till PowerShell-objekt lagras i variabeln $logRecord
.
log show --predicate "subsystem == 'com.microsoft.powershell'" --style json |
ConvertFrom-Json | Set-Variable logRecord
Du kanske också vill spara loggarna på en säkrare plats, till exempel SIEM-aggregator (Security Information and Event Management). Med Microsoft Defender för Cloud Apps kan du konfigurera SIEM i Azure. Mer information finns i Allmän SIEM-integrering.
Lägen och nivåer för PowerShell-loggdata på macOS
Som standard loggar PowerShell-undersystemet meddelanden på informationsnivå till minne (läge) och standardnivåmeddelanden till disk (persistence) på macOS. Det här beteendet kan ändras för att aktivera ett annat läge och en annan loggningsnivå med kommandot log config
.
I följande exempel aktiveras loggning och beständighet på informationsnivå för PowerShell-undersystemet:
sudo log config --subsystem com.microsoft.powershell --mode level:info,persist:info
Använd återställningsparametern för att återställa logginställningarna till standardinställningarna för PowerShell-undersystemet:
sudo log config --subsystem com.microsoft.powershell --reset
Se även
- Information om Linux-syslog och rsyslog.conf finns på Linux-datorns lokala
man
sidor - Information om macOS-loggning finns i Apples utvecklardokumentation om loggning
- Information om Windows finns i about_Logging_Windows
- Allmän SIEM-integrering