Dela via


about_Logging_Windows

Kort beskrivning

PowerShell loggar interna åtgärder från motorn, leverantörerna och cmdletarna till Windows-händelseloggen.

Lång beskrivning

PowerShell loggar information om PowerShell-åtgärder, till exempel att starta och stoppa motorn och providrar och köra PowerShell-kommandon.

Information om hur du loggar in Windows PowerShell 5.1 finns i about_Logging.

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 konfigurationen 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. Mer information finns i Aktivera loggning av skriptblock.

Registrera PowerShell-händelseprovidern i Windows

Till skillnad från Linux eller macOS kräver Windows att händelseprovidern registreras innan händelser kan skrivas till händelseloggen. Om du vill aktivera PowerShell-händelseprovidern kör du följande kommando från en upphöjd PowerShell-prompt.

$PSHOME\RegisterManifest.ps1

Visa PowerShell-händelseloggposter i Windows

PowerShell-loggar kan visas med windows-Loggboken. Händelseloggen finns i gruppen Program- och tjänstloggar och heter PowerShellCore. Den associerade ETW-providerns GUID är {f90714a8-5509-434a-bf6d-b1624c8a19a2}.

När loggning av skriptblock är aktiverat loggar PowerShell följande händelser till PowerShellCore/driftloggen :

Fält Värde
EventID 4104 / 0x1008
Kanal Operational
Nivå Verbose
Opcode Create
Uppgift CommandStart
Sökord Runspace

Avregistrera PowerShell-händelseprovidern i Windows

När händelseprovidern registreras låses ett lås i det binära bibliotek som används för att avkoda händelser. Om du vill uppdatera det här biblioteket måste providern avregistreras för att det här låset ska kunna släppas.

Om du vill avregistrera PowerShell-providern kör du följande kommando från en upphöjd PowerShell-prompt.

$PSHOME\RegisterManifest.ps1 -Unregister

När du har uppdaterat PowerShell kör du $PSHOME\RegisterManifest.ps1 för att registrera den uppdaterade händelseprovidern.

Aktivera loggning av skriptblock

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.

Anteckning

Vi rekommenderar att du aktiverar loggning av skyddade händelser enligt beskrivningen nedan när du använder loggning av skriptblock för något annat än diagnostiksyfte.

Loggning av skriptblock kan aktiveras via grupprincip eller en registerinställning.

Med hjälp av grupprincip

Om du vill aktivera automatisk transkription aktiverar du funktionen Aktivera Loggning av PowerShell-skriptblock i grupprincip via Administrativa mallar –>PowerShell Core.

Använda registret

Kör följande funktion:

function Enable-PSScriptBlockLogging {
    $basePath = @(
        'HKLM:\Software\Policies\Microsoft'
        'PowerShellCore\ScriptBlockLogging'
    ) -join '\'

    if (-not (Test-Path $basePath)) {
        $null = New-Item $basePath -Force
    }

    Set-ItemProperty $basePath -Name EnableScriptBlockLogging -Value "1"
}

Använda PowerShell-konfigurationsfilen

Du kan ange alternativet ScriptBlockLogging i powershell.config.json filen som styr hur PowerShell fungerar. Mer information finns i about_PowerSHell_Config.

Loggning av skyddad händelse

Om du ökar loggningsnivån på ett system ökar risken för att loggat innehåll kan innehålla känsliga data. Med skriptloggning aktiverat kan till exempel autentiseringsuppgifter eller andra känsliga data som används av ett skript skrivas till händelseloggen. När en dator som har loggat känsliga data komprometteras kan loggarna ge en angripare information som behövs för att utöka deras räckvidd.

För att skydda den här informationen introducerar Windows 10 skyddad händelseloggning. Med skyddad händelseloggning kan deltagande program kryptera känsliga data som skrivits till händelseloggen. Senare kan du dekryptera och bearbeta loggarna på en säkrare och centralare logginsamlare.

Händelselogginnehållet skyddas med IETF-standarden för kryptografisk meddelandesyntax (CMS). CMS använder kryptografi med offentliga nycklar. Nycklarna som används för att kryptera innehåll och dekryptera innehåll hålls åtskilda.

Den offentliga nyckeln kan delas i stor utsträckning och är inte känsliga data. Allt innehåll som krypteras med den här offentliga nyckeln kan bara dekrypteras av den privata nyckeln. Mer information om kryptografi för offentliga nycklar finns i Wikipedia – Kryptografi med offentlig nyckel.

Om du vill aktivera en princip för loggning av skyddade händelser distribuerar du en offentlig nyckel till alla datorer som har händelseloggdata att skydda. Motsvarande privata nyckel används för att efterbearbeta 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.

Aktivera loggning av skyddade händelser via grupprincip

Aktivera funktionen i grupprincip via Administrative Templates -> Windows Components -> Event Loggingför att aktivera loggning Enable Protected Event Logging av skyddad händelse. Den här inställningen kräver ett krypteringscertifikat som du kan ange i något av flera formulär:

  • Innehållet i ett base-64-kodat X.509-certifikat (till exempel enligt Export alternativet i Certifikathanteraren).
  • Tumavtrycket för ett certifikat som finns i certifikatarkivet för den lokala datorn (kan distribueras av PKI-infrastrukturen).
  • Den fullständiga sökvägen till ett certifikat (kan vara lokal eller en fjärrresurs).
  • Sökvägen till en katalog som innehåller ett certifikat eller certifikat (kan vara lokal eller en fjärrresurs).
  • Ämnesnamnet för ett certifikat som finns i certifikatarkivet för den lokala datorn (kan distribueras av PKI-infrastrukturen).

Det resulterande certifikatet måste ha Document Encryption en förbättrad nyckelanvändning (1.3.6.1.4.1.311.80.1) och antingen Data Encipherment eller Key Encipherment nyckelanvändning aktiverad.

Varning

Den privata nyckeln ska inte distribueras till datorernas loggningshändelser. Den ska förvaras på en säker plats där du dekrypterar meddelandena.

Dekryptera meddelanden om loggning av skyddade händelser

Följande skript hämtar och dekrypterar händelser, förutsatt att du har den privata nyckeln:

Get-WinEvent Microsoft-Windows-PowerShell/Operational |
    Where-Object Id -eq 4104 |
    Unprotect-CmsMessage

Se även