Om att logga icke-Windows
Kort beskrivning
PowerShell loggar interna åtgärder från motorn, providrar och cmdletar.
Lång beskrivning
PowerShell loggar information om PowerShell-åtgärder. PowerShell loggar till exempel åtgärder som att starta och stoppa motorn och starta och stoppa providers. Den loggar även information om PowerShell-kommandon.
Platsen för PowerShell-loggar är beroende av målplattformen. I Linux kan PowerShell-loggar till syslog och rsyslog.conf användas. Mer information finns på Linux-datorns lokala man
sidor. I macOS används os_log loggningssystemet. Mer information finns i os_log utvecklardokumentation.
Visa PowerShell-loggutdata i Linux
PowerShell-loggar till syslog i Linux och alla verktyg som ofta används för att visa syslog-innehåll kan användas.
Loggposternas format använder följande mall:
TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
[EVENTID:TASK.OPCODE.LEVEL] MESSAGE
Fält | Beskrivning |
---|---|
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 |
ID git commit :t eller taggen som används för att skapa versionen. |
TID |
Tråd-ID:t för tråden som skrev loggposten. |
CID |
Hexkanalidentifieraren för loggposten. |
10 = Drift, 11 = Analys | |
EVENTID |
Händelseidentifieraren för loggposten. |
TASK |
Aktivitetsidentifieraren för händelseposten |
OPCODE |
Opcode för händelseposten |
LEVEL |
Loggnivån för händelseposten |
MESSAGE |
Meddelandet som är associerat med händelseposten |
Anteckning
EVENTID
, TASK
, OPCODE
och LEVEL
är samma värden som används vid loggning till Windows-händelseloggen.
Filtrera PowerShell-loggposter med rsyslog
Normalt skrivs PowerShell-loggposter till standardvärdet location/file
för syslog. Det går dock att omdirigera posterna till en anpassad fil.
Skapa en konfigurationskonfiguration för PowerShell-loggen och ange ett tal som är mindre än 50 (för
50-default.conf
), till exempel40-powershell.conf
. Filen ska placeras under/etc/rsyslog.d
.Lägg till följande post i filen:
:syslogtag, contains, "powershell[" /var/log/powershell.log & stop
Se till att
/etc/rsyslog.conf
inkludera den nya filen. Ofta har den en allmän include-instruktion som ser ut som följande konfiguration:$IncludeConfig /etc/rsyslog.d/*.conf
Om den inte gör det måste du lägga till en include-instruktion manuellt.
Kontrollera att attribut och behörigheter har angetts på rätt sätt.
-rw-r--r-- 1 root root 67 Nov 28 12:51 40-powershell.conf
Ange ägarskap till rot.
chown root:root /etc/rsyslog.d/40-powershell.conf
Ange åtkomstbehörigheter: roten har läs-/skrivbehörighet, användarna har läst.
chmod 644 /etc/rsyslog.d/40-powershell.conf
Visa PowerShell-loggutdata på macOS
Den enklaste metoden för att visa PowerShell-loggutdata på macOS är att använda konsolprogrammet .
- Search för konsolprogrammet och starta det.
- Välj datornamnet under Enheter.
- I fältet Search anger du
pwsh
för PowerShell-huvudbinärfilen. - Ändra sökfiltret från
Any
tillProcess
. - Utför åtgärderna.
- Du kan också spara sökningen för framtida användning.
Om du vill filtrera på en specifik processinstans av PowerShell i konsolen innehåller variabeln $pid
process-ID.
- Ange pid (process-ID) i fältet Search.
- Ändra sökfiltret till
PID
. - Utför åtgärderna.
Visa PowerShell-loggutdata från en kommandorad
Kommandot log
kan användas för att visa PowerShell-loggposter från kommandoraden.
sudo log stream --predicate 'process == "pwsh"' --info
Spara PowerShell-loggutdata
Som standard använder PowerShell standardloggning endast för minne på macOS. Det här beteendet kan ändras för att aktivera beständighet med kommandot log config
.
Följande skript aktiverar loggning och beständighet på informationsnivå:
log config --subsystem com.microsoft.powershell --mode=persist:info,level:info
Följande kommando återställer PowerShell-loggning till standardtillståndet:
log config --subsystem com.microsoft.powershell --mode=persist:default,level:default
När beständighet har aktiverats log show
kan kommandot användas för att exportera loggobjekt. Kommandot 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 of 2018
:
log show --info --start "2018-04-05 09:00:00" --predicate "process = 'pwsh'"
Du kan få hjälp genom log
att köra log show --help
för ytterligare information.
Tips
När du kör något av loggkommandona från en PowerShell-prompt eller ett skript använder du dubbla citattecken runt hela predikatsträngen och enkla citattecken inom. Detta undviker behovet av att undvika dubbla citattecken i predikatsträngen.
Du kanske också vill spara händelseloggarna på en säkrare plats, till exempel en central händelselogginsamlare eller SIEM-aggregator . Du kan konfigurera SIEM i Azure. Mer information finns i Allmän SIEM-integrering.
Konfigurera loggning på ett system som inte är Windows
I Windows konfigureras loggning genom att skapa ETW-spårningslyssnare eller med hjälp av Loggboken för att aktivera analysloggning. I Linux och macOS konfigureras loggning med hjälp av filen powershell.config.json
. Resten av det här avsnittet beskriver hur du konfigurerar PowerShell-loggning på ett system som inte är Windows.
Som standard aktiverar PowerShell informationsloggning till den operativa kanalen. Det innebär att alla loggutdata som genereras av PowerShell och som har en loggnivå (spårning) som är större än information loggas. Ibland kan diagnoser kräva ytterligare loggutdata, till exempel utförliga loggutdata eller aktivering av analysloggutdata.
Filen powershell.config.json
är en JSON-formaterad fil som finns i PowerShell-katalogen $PSHOME
. Varje installation av PowerShell använder sin egen kopia av den här filen. För normal drift lämnas den här filen oförändrad. Även om det kan vara användbart att ändra vissa av inställningarna i filen, för diagnos eller för att skilja mellan flera PowerShell-versioner i samma system eller till och med flera kopior av samma version (se LogIdentity
i tabellen nedan).
Följande kod är en exempelkonfiguration:
{
"Microsoft.PowerShell:ExecutionPolicy": "RemoteSigned",
"PowerShellPolicies": {
"ScriptExecution": {
"ExecutionPolicy": "RemoteSigned",
"EnableScripts": true
},
"ScriptBlockLogging": {
"EnableScriptBlockInvocationLogging": true,
"EnableScriptBlockLogging": true
},
"ModuleLogging": {
"EnableModuleLogging": false,
"ModuleNames": [
"PSReadline",
"PowerShellGet"
]
},
"ProtectedEventLogging": {
"EnableProtectedEventLogging": false,
"EncryptionCertificate": [
"Joe"
]
},
"Transcription": {
"EnableTranscripting": true,
"EnableInvocationHeader": true,
"OutputDirectory": "F:\\tmp\\new"
},
"UpdatableHelp": {
"DefaultSourcePath": "f:\\temp"
},
"ConsoleSessionConfiguration": {
"EnableConsoleSessionConfiguration": false,
"ConsoleSessionConfigurationName": "name"
}
},
"LogLevel": "verbose"
}
Egenskaperna för att konfigurera PowerShell-loggning visas i följande tabell. Värden markerade med en asterisk, till exempel Operational*
, anger standardvärdet när inget värde anges i filen.
Egenskap | Värden | Beskrivning |
---|---|---|
LogIdentity |
(strängnamn) | Namnet som ska användas vid loggning. Som standard tilldelar |
Powershell* | powershell är identiteten. Det här värdet kan vara | |
används för att se skillnaden mellan två | ||
instanser av en PowerShell-installation, till exempel | ||
som en version och betaversion. Det här värdet är | ||
används också för att omdirigera loggutdata till en | ||
separat fil i Linux. Se diskussionen om | ||
rsyslog ovan. | ||
LogChannels |
Operativa* | De kanaler som ska aktiveras. Avgränsa värdena |
Analytic | med kommatecken när du anger mer än en. | |
LogLevel |
Alltid | Ange ett enda värde. Värdet aktiverar |
Kritiskt | och alla värden ovanför den i | |
Fel | till vänster. | |
Varning | ||
Informativt* | ||
Verbose | ||
Felsöka | ||
LogKeywords |
Runspace | Nyckelord ger möjlighet att begränsa loggning |
Pipeline | till specifika komponenter i PowerShell. Efter | |
Protokoll | standard är alla nyckelord aktiverade och ändras | |
Transport | det här värdet är bara användbart för mycket | |
Värd | specialiserad felsökning. | |
Cmdletar | ||
Serialiserare | ||
Session | ||
ManagedPlugin |
Se även
Information om Linux syslog och rsyslog.conf finns på linux-datorns lokala man
sidor.
Information om macOS-os_log finns i os_log utvecklardokumentation.