Dela via


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.
  • 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.
  • LogLevel
    • Värden: Always, Critical, Error, Warning, Informational, , , VerboseDebug
    • 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.
  • LogKeywords
    • Värden: Runspace, Pipeline, Protocol, Transport, Host, Cmdlets, Serializer, , , SessionManagedPlugin
    • 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.
  • 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.

  1. Skapa en konfigurationsfil (conf) för PowerShell-loggkonfigurationen /etc/rsyslog.d i katalogen med hjälp av en textfilredigerare som nano. Prefixa filnamnet med ett tal som är mindre än standardvärdet. Till exempel där 40-powershell.conf standardvärdet är 50-default.conf.

    sudo nano /etc/rsyslog.d/40-powershell.conf
    
  2. Lägg till följande information i 40-powershell.conf filen:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. 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.

  4. 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:

    1. Ange ägarskap till rot.

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. Ange åtkomstbehörigheter: roten har läs-/skrivbehörighet, användarna har läst.

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. Starta om rsyslog-tjänsten.

    sudo systemctl restart rsyslog.service
    
  6. 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.

  7. 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