Windows heeft verschillende gebeurtenislogs, maar hoe kunt u ze snel ophalen? De cmdlet Get-WinEvent
kan klassieke Windows-gebeurtenislogs ophalen, zoals de systeem- en toepassingslogs, logs gegenereerd door Windows Event Log-technologie en zelfs Event Tracing for Windows (ETW)-logs!
In dit artikel leert u hoe u Get-WinEvent
kunt gebruiken om gebeurtenissen uit gebeurtenislogs op te halen en te filteren!
Vereisten
Om mee te doen, heeft u alleen een huidige versie van Windows 10 en PowerShell 5.1 of hoger nodig. Dit artikel maakt gebruik van Windows 10 en PowerShell 7.1.
Lijst van beschikbare logs met Get-WinEvent
Het is moeilijk om te weten welke logboekvermeldingen u nodig heeft zonder alle beschikbare logs te kennen. Met Get-WinEvent
kunt u snel alle beschikbare logs weergeven met behulp van de parameter -ListLog
. De parameterwaarde *
vertelt Get-WinEvent
om alle logs op te halen zonder te filteren. Zoals hieronder wordt weergegeven, worden alle logs opgehaald, maar worden slechts een beperkt aantal eigenschappen weergegeven met behulp van de Select-Object
-cmdlet.
Niet alle logs zijn standaard ingeschakeld. U moet mogelijk Logboeken bekijken openen, het logboek opzoeken en met de rechtermuisknop klikken om het logboek in te schakelen voordat gebeurtenissen worden weergegeven.

Alle logboeken na Windows Vista worden opgeslagen als
*.evtx
bestanden in plaats van het oudere*.evt
formaat. De eigenschapIsClassicLog
geeft aan of de logboekgebeurtenissen worden gedefinieerd in een berichtbestand,*.mc
formaat of in een manifest,*.xml
formaat.
Een interessante eigenschap is de LogMode
, die je waarschijnlijk hebt opgemerkt dat deze meestal is ingesteld op Circular
.
Circular
– Overschrijf de oudste logboekvermelding zodra deze vol is.Retain
– Bewaar alle gebeurtenissen totdat het logboek vol is en stop met loggen totdat er ruimte vrijkomt.AutoBackup
– Maak automatisch een back-up en archiveer logboeken zodra deze vol zijn.

Tenslotte, bij het bekijken van de eigenschap LogType
, zijn er verschillende soorten logboeken. Deze eigenschap dient meer als een categorisatie-eigenschap, maar informeert meestal over hoe het logboek wordt gebruikt en welke soorten gebeurtenissen worden weergegeven.
- Administratief – Primair bedoeld voor eindgebruikers en beheerders.
- Analytisch – Meestal een log met een hoog volume, bedoeld om programmabewerkingen te beschrijven.
- Debug – Bedoeld voor ontwikkelaars die diep in de interne werking van het programma willen duiken.
- Operationeel – Een gebeurtenis die tijdens de werking optreedt en nuttig is om gebeurtenissen te diagnosticeren en processen te activeren.

Evenementlogboekproviders vermelden
Nu je een goed begrip hebt van de verschillende logs en hun eigenschappen, is het handig om te begrijpen wat een Evenementlogboekprovider is. Een provider is in de terminologie van het evenementenlogboek een bron van een gebeurtenis.
Evenementlogboekproviders zijn uniek en gekoppeld aan elk logboek, zoals toepassings- of systeemlogs, en dienen als de benoemde bron waar een gebeurtenis vandaan komt.
Misschien wilt u problemen vinden bij het filteren van logs, en mogelijk bent u alleen geïnteresseerd in problemen van een bepaalde provider. Gebruik de parameter -ListProvider
om weer te geven welke providers beschikbaar zijn. Zoals hieronder weergegeven, geeft *
alle beschikbare providers weer en aan welke logs de providers zijn gekoppeld, zoals Windows PowerShell of Systeem.

Misschien wil je alleen de beschikbare providers voor een specifiek logboek weergeven, zoals System
. Dit kan worden bereikt door gebeurtenissen te filteren met behulp van het Where-Object
-commando met waarden van de LogLinks
-eigenschap. De LogLinks
-eigenschap toont de gekoppelde gebeurtenislogboeken als een lijst.
Om de gevraagde logboeken met Where-Object
te filteren, gebruik je de -In
-vergelijkingsoperator om alleen die gebeurtenissen te filteren waarin System
voorkomt in de waarde van de LogLinks
-eigenschap. Ten slotte maakt het gebruik van Format-Table -AutoSize
het lezen van de uitvoer eenvoudiger, zoals hieronder getoond.

Het ophalen van klassieke gebeurtenislogboeken met Get-WinEvent
De eerste stap bij het oplossen van een Windows-probleem is het ophalen van de toepassings- of systeemlogboek, wat toevallig klassieke gebeurtenislogboeken zijn. In het onderstaande voorbeeld haal je de eerste 100
gebeurtenissen op met behulp van de -MaxEvents
-parameter van het toepassingsgebeurtenislogboek.
Om het lezen van de resultaten eenvoudiger te maken, selecteer je alleen de benodigde eigenschappen om de vermeldingen gemakkelijker te lezen. Anders worden de vermeldingen gegroepeerd op naam van de provider, wat het parsen van de lijst met resultaten moeilijk maakt.

Het vinden van moderne Windows-gebeurtenissen met Get-WinEvent
Nu je gebeurtenissen hebt opgehaald uit het klassieke toepassingslogboek, wat dacht je van resultaten uit een nieuwer Windows Event-logboek, zoals Microsoft-Windows-WindowsUpdateClient/Operational
?
In tegenstelling tot een klassiek gebeurtenislogboek, zoals System
, is Microsoft-Windows-WindowsUpdateClient/Operational
een modern logboek, waarbij Get-WinEvent
hetzelfde werkt als hieronder.

Wat dacht je van het krijgen van alleen de oudste gebeurtenissen? Hoewel je de resultaten in omgekeerde volgorde zou kunnen zetten met Sort-Object
, gebruik de -Oldest
parameter om de eerste 10
gebeurtenissen op te halen, zoals hieronder getoond.
De Get-WinEvent
-opdracht doet het filteren voor jou in plaats van alle resultaten terug te geven en te sorteren, wat meestal trager is.

Het ophalen van Event Tracing for Windows (ETW) -bestanden met Get-WinEvent
Misschien heb je een geëxporteerd *.evtx
-bestand van een andere computer of heb je een bestaand logboek geback-upt. Je kunt die logs lezen met de Get-WinEvent
-cmdlet. Als je logs moet bewaren voor auditdoeleinden, is Get-WinEvent
een geweldige manier om die logs snel te doorzoeken met standaard-cmdlets binnen scripts.
Om logvermeldingen op te halen uit een *.evtx
-bestand, hebt u een geëxporteerd logbestand nodig.
1. Open de Gebeurtenislogboekweergave en ga naar een logboek. In dit voorbeeld het Toepassings- en serviceslogboeken → Windows PowerShell-logboek.

2. Klik vervolgens op het menu-item Alle gebeurtenissen opslaan als… in het Acties-deelvenster.

3. Sla het bestand op op een schijflocatie die later door het Get-WinEvent
-commando kan worden opgehaald.

Nu u een logbestand hebt geëxporteerd, geeft u de locatie van het logbestand door via de parameter -Path
om de gebeurtenissen te lezen. In het onderstaande voorbeeld wordt het Windows PowerShell-logboek geëxporteerd voor latere consumptie.

Filteren van Windows Event Logs met Get-WinEvent
Hoewel u logs kunt filteren met de standaard Where-Object
-cmdlet, biedt Get-WinEvent
ingebouwde filters. Door alle resultaten terug te geven en vervolgens te filteren, wordt meer werk verricht dan nodig is. In plaats daarvan moet u altijd proberen zoveel mogelijk bij de bron te filteren.
De Get-WinEvent
-cmdlet biedt drie parameters om u te helpen door duizenden gebeurtenissen te filteren, genaamd -FilterHashTable
, -FilterXPath
en -FilterXML
. Elke parameter voert over het algemeen dezelfde taak uit, maar op een andere manier.
Filteren van gebeurtenislogboeken met FilterHashTable
De parameter -FilterHashTable
filtert inhoud op basis van de overeenkomende eigenschappen, zoals LogName
. In plaats van de parameter -LogName
te gebruiken om te filteren op een specifiek logboek, kunt u in plaats daarvan een hash-tabel gebruiken, zoals @{'LogName' = 'Application'}
, wat overeenkomt met de eigenschap LogName
van het evenement.
Het onderstaande voorbeeld geeft een hash-tabel aan de parameter -FilterHashTable
die alleen naar het toepassingslogboek zoekt en met een starttijd die alle gebeurtenissen na middernacht van de huidige dag omvat, retourneert Get-WinEvent
snel resultaten.

FilterHashTable
parameter.Vergelijk de filteringsnelheden van dezelfde opdracht hierboven met een gefilterde van via Where-Object
in plaats van via de parameter -FilterHashTable
op de pipeline. Zoals je kunt zien, is de opdracht die Where-Object
gebruikt veel langzamer dan degene die de parameter -FilterHashTable
gebruikt.

FilterHashTable
and Where-Object
.Filteren van gebeurtenislogboeken met behulp van de parameter FilterXPath
Gebeurtenislogboekvermeldingen worden opgeslagen als XML-bestanden, en daarom kunt u de taal XPath, een XML-querytaal, gebruiken om door de logboekvermeldingen te filteren. Door dezelfde opdracht te gebruiken als hierboven en te vertalen naar XPath, kunt u dezelfde resultaten bereiken.
Om een XPath-query te maken, gebruikt u de filtermogelijkheid in de Windows Event Viewer, zoals hieronder wordt weergegeven.
1. Open de Event Viewer en navigeer naar een logboek, zoals het Windows Logs → Application logboek.

2. Klik vervolgens op de koppeling Filter Huidige Logboek in het rechtervenster.

3. Voer de parameters in waarmee u het logboek wilt filteren.

4. Klik op het XML-tabblad en kopieer het gedeelte binnen de Select-tag.

5. Kopieer en plak nu de gekopieerde inhoud met de parameter -FilterXPath
. U kunt nu hieronder zien dat u met behulp van de XPath-syntaxis die is gevonden in de gebeurtenislogboekweergave, een query kunt maken om alleen de benodigde informatie te filteren.

FilterXPath
parameter.Dieper ingaan op het maken van XPath-query’s valt buiten het bestek van dit artikel, maar het basisformaat wordt hieronder weergegeven. Wanneer de parameter FilterXPath
een datum filtert, ziet u één groot verschil: u moet een specifiekere datumnotatie gebruiken, jjjj-MM-ddTHH:mm:ss.fffZ
, waarbij de datum in UTC moet worden weergegeven, wat wordt aangegeven door de schakelaar -AsUTC
.

Resultaten van het filteren van het gebeurtenislogboek met FilterXML
Tenslotte is de laatste beschikbare filterparameter de parameter -FilterXML
. In tegenstelling tot de parameters -FilterXPath
en -FilterHashTable
neemt deze parameter XML aan die vervolgens wordt gebruikt om de gebeurtenissen te filteren. De parameter -FilterXML
maakt meer complexe regels mogelijk en kan, zoals hieronder wordt getoond, de vorige filtervoorbeelden repliceren.
Zoals getoond in het vorige voorbeeld, kun je een vooraf opgemaakte query ophalen uit de mogelijkheid Event Viewer → Filter Current Log. In plaats van alleen de inhoud in de Select
-knoop te selecteren, gebruik je de volledige query. Er zijn geen daadwerkelijke filters gekozen, zoals opgemerkt door het *
in de Select
-knoop. Dit zal de algemene opmaak bieden voor het volgende voorbeeld.

In plaats van een éénregelige opdracht te maken, scheid eerst de XML-query en wijs de opmaak toe aan een variabele, $Query
, in het onderstaande voorbeeld. Het toewijzen van de query aan een variabele zorgt voor een beter gebruiksgemak en leesbaarheid. Geef vervolgens de variabele $Query
door aan de -FilterXML
-parameter van Get-WinEvent
.
Zoals hieronder getoond, zie je de resultaten van de complexere query die alle gebeurtenissen van die dag retourneert en opgeslagen is in het logboek Application
.

FilterXML
works.Conclusie
De cmdlet Get-WinEvent
maakt het eenvoudig om meerdere gebeurtenislogboekbronnen te bevragen met krachtige filtermogelijkheden. Van auditing tot probleemoplossing is de cmdlet Get-WinEvent
een cruciale toevoeging aan de toolkit van elke systeembeheerder!