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 leverantörerna och köra PowerShell-kommandon.
Information om loggning i 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 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. 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 hjälp av 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 |
Nyckelord | Runspace |
Avregistrera PowerShell-händelseprovidern i Windows
När du registrerar händelseprovidern placeras ett lås i det binära biblioteket som används för att avkoda händelser. Om du vill uppdatera det här biblioteket måste providern avregistreras för att frigöra det här låset.
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.
Kommentar
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 en grupprincip eller en registerinställning.
Med hjälp av grupprincip
Aktivera automatisk transkription genom att aktivera funktionen Aktivera Blockloggning av PowerShell-skript 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.
Skyddad händelseloggning
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 loggning av skyddade händelser. 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 centraliserad logginsamlare.
Händelselogginnehållet skyddas med IETF-standarden för kryptografisk meddelandesyntax (CMS). CMS använder kryptering 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 brett 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 – Kryptering av offentliga nycklar.
Om du vill aktivera en princip för skyddad händelseloggning 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 skyddad händelseloggning via grupprincip
Aktivera skyddad händelseloggning genom att aktivera Enable Protected Event Logging
funktionen i Grupprincip via Administrative Templates -> Windows Components -> Event Logging
. 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
Export
enligt 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
som 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 bör 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