- Get-WinEvent överträffar Get-EventLog genom att tillåta avancerade filter och åtkomst till moderna loggar
- Genom att använda hashtabeller och XPath optimeras sökningen efter specifika händelser i stora datamängder. loggar
- Möjliggör hantering av lokala, fjärrstyrda och arkiverade loggar med kontroll över behörigheter och inloggningsuppgifter
PowerShell har utvecklats till ett av de viktigaste verktygen för avancerad Windows- systemhantering . Bland dess kraftfullaste cmdlets finns Get-WinEvent , som gör det möjligt för administratörer och användare att hämta händelseloggar, granska åtgärder och övervaka statusen för sina datorer eller servrar på ett mycket detaljerat och flexibelt sätt.
I den här artikeln får du veta allt du behöver veta om PowerShell-kommandot Get-WinEvent : från dess syntax och skillnader jämfört med andra klassiska cmdlets som Get-EventLog, till praktiska exempel, filteroptimering med hjälp av hashtabeller, detaljer om viktiga parametrar och tips för att få ut det mesta av det för både lokal och fjärrhändelseanalys. Om du vill bemästra logganalys och felsökning i Windows, fortsätt läsa.
Vad är Get-WinEvent och varför är det så användbart?
Get-WinEvent är en Windows-endast cmdlet som låter dig komma åt och utforska operativsystemets händelseloggar. Dess huvudsakliga funktion är att hämta händelser som lagras i både klassiska loggar (som "System" eller "Program") och loggar som skapats från och med Windows Vista, samt externa filer ( .evtx , .etl och .evt ).
Det här kommandot erbjuder betydande fördelar jämfört med sin föregångare, Get-EventLog . Till exempel kan det fråga efter loggar som Get-EventLog inte kan komma åt, tillåter användning av avancerade filter (hashtabeller, XPath, strukturerad XML) och möjliggör arbete med fjärrloggar utan att förlita sig på PowerShells traditionella fjärrstyrningssystem. Detta gör det till ett viktigt verktyg för övervakning, granskning och felsökning , samt för att analysera aktiviteten hos både enskilda system och stora serverinfrastrukturer.
Allmän syntax och parameteruppsättningar
Get-WinEvent-cmdlet:en har en mångsidig syntax som stöder flera användningsområden beroende på vilken information du vill hämta och vilken typ av filter som används. Några av de vanligaste parameteruppsättningarna är:
- Sök efter postnamn:
Get-WinEvent >] ... - Lista över tillgängliga poster:
Get-WinEvent -ListLog * - Fråga till registerleverantörer:
Get-WinEvent -ListProvider * - Filtrering efter hashtabell:
Get-WinEvent -FilterHashtable @{ LogName='Application'; Id=1001 } - Filtrerad efter XPath:
Get-WinEvent -FilterXPath "*]" - Filtrerad efter XML:
Get-WinEvent -FilterXml $xmlQuery
Nota importante: Utan parametrar hämtar Get-WinEvent alla händelser från alla loggar på den lokala datorn, vilket kan generera mycket lång utdata. För att stoppa kommandot, tryck helt enkelt på CTRL + C.
Huvudparametrar för Get-WinEvent
Cmdlet:en stöder en mängd olika parametrar, vilket gör att du kan få exakt den information du behöver. Här är en detaljerad sammanfattning av de viktigaste:
- -Lognamn: Låter dig ange ett eller flera händelseloggnamn. Jokertecken accepteras.
- -Leverantörsnamn: Filtrera resultat baserat på specifika händelseleverantörer. Perfekt för att identifiera källan till specifika händelser.
- -Väg: Låter dig fråga händelser i filer som sparats med filändelsen .evtx, .evt eller .etl, även från andra maskiner.
- -Filterhashtabell: Stöder en hashtabell med nyckel-värde-par för att effektivt filtrera efter flera kriterier (t.ex. loggnamn, leverantörsnamn, ID, nivå, datum etc.).
- -FilterXPath / -FilterXml: De låter dig tillämpa filter baserade på XPath- eller XML-frågor för komplexa kriterier.
- -MaxEvents: Begränsar det maximala antalet returnerade händelser, vilket är mycket användbart för att undvika gigantiska utdata.
- -Äldst: Du kan ange att händelser ska tas emot sorterade från äldst till nytt (som standard är det tvärtom).
- -Datornamn: Fråga efter loggar på fjärrdatorer genom att ange NetBIOS-namn, FQDN eller IP.
- -Autentiseringsuppgifter: Gör att du kan autentisera som en annan användare eller med andra inloggningsuppgifter än dina nuvarande.
- -Tvinga: Det kräver att felsöknings- och analysloggar inkluderas i frågan, utöver de vanliga.
Många av dessa parametrar kan kombineras för att uppnå en exakt och kraftfull fråga.
Avancerad filtrering: Använda FilterHashtable

En av Get-WinEvents största styrkor är dess förmåga att filtrera händelser med hjälp av hashtabeller. Istället för att hämta alla händelser och sedan filtrera dem i ett andra steg (vilket är ineffektivt) tillämpar FilterHashtable filter under själva hämtningsprocessen, vilket förbättrar prestandan och minskar resursförbrukningen, särskilt med stora loggar.
En hashtabell består i detta sammanhang av nyckel-värde-par som @{ LogName='Application'; Id=1001; Level=2 }Varje par kommer att vara ett sökkriterium. Godkända primärnycklar inkluderar:
- Loggnamn (jokertecken tillåtna): postnamn.
- Leverantörsnamn (stöd för jokertecken): händelsekälla.
- Bana: sökväg till sparade loggfiler.
- Id: numerisk identifierare för händelsen.
- Nivåallvarlighetsgrad (Fel=2, Varning=3, Informationsmässig=4…)
- Nyckelordfiltrera efter tekniska nyckelord (typ Long[]).
- Starttid / Sluttidfiltrera efter datumintervall.
- Användar IDSID eller användarnamn kopplat till händelsen.
- Data o : anpassad händelsedata.
Till exempel, för att hämta kritiska händelser från en specifik leverantör i programloggen från de senaste två dagarna:
$fecha = (Get-Date).AddDays(-2)
Get-WinEvent -FilterHashtable @{ LogName='Application'; ProviderName='.NET Runtime'; Level=1; StartTime=$fecha }
Tips: Varje nyckel i hashtabellen ska bara förekomma en gång, och jokertecken är endast giltiga i LogName och ProviderName.
Praktiska exempel på användning
Att fråga och analysera händelseloggar kan verka mödosamt, men med mångsidigheten hos denna cmdlet är möjligheterna oändliga. Här är några exempel baserade på verkliga scenarier:
- Lista alla händelseloggar som finns tillgängliga i systemet:
Get-WinEvent -ListLog * - Hämta de senaste händelserna från 'System'-loggen:
Get-WinEvent -LogName System -MaxEvents 10 - Filtrera endast programfel:
Get-WinEvent -FilterHashtable @{ LogName='Application'; Level=2 } - Visa händelser som genererats av en leverantör:
Get-WinEvent -FilterHashtable @{ LogName='Application'; ProviderName='Application Error' } - Kontrollera händelser i andra datorloggar:
Get-WinEvent -LogName System -ComputerName Servidor01 - Läs sparade filer:
Get-WinEvent -Path 'C:\Test\Windows PowerShell.evtx' - Hämta händelser för ett specifikt sökord:
Get-WinEvent -LogName *PowerShell*, Microsoft-Windows-Kernel-WHEA* | Group-Object -Property LevelDisplayName, LogName -NoElement | Format-Table -AutoSize
Utdata, returnerade objekt och kompatibilitet
Beroende på vilka parametrar som används kan Get-WinEvent returnera objekt av olika typer:
- Händelseloggkonfiguration: när man använder -ListLog, tillhandahåller konfiguration och egenskaper för varje post.
- Leverantörsmetadata: med -Listleverantör, visar metadata för händelseleverantörer.
- Händelseloggpost: Som standard representerar den varje specifik händelse och dess attribut (datum, ID, meddelande etc.).
De kan bearbetas i en pipeline och filtreras, grupperas eller exporteras till andra format (CSV, HTML, XML, etc.). Det är värt att notera att Get-WinEvent gradvis ersätter Get-EventLog , som var mer begränsad och endast stödde klassiska loggar.
Avancerad loggvisualisering och analys
Förutom händelseanalys via konsol eller skript kan du granska loggar med hjälp av Händelsevisare från Windows ((https://mundobytes.com/how-to-use-windows-event-viewer-to-detect-and-anticipate-problems/)), även om Get-WinEvent möjliggör större automatisering, integration och fjärranvändning.
För att analysera trender eller incidenter, använd cmdlets som Group-Object för att gruppera händelser efter ID, Sort-Object för att sortera dem och Select-Object för att begränsa antalet visade fält. Till exempel, för att se hur många händelser av varje typ du har i loggen:
$eventos = Get-WinEvent -LogName 'Windows PowerShell'
$eventos | Group-Object -Property LevelDisplayName | Format-Table Count, Name
XPath och XML-filtrering: När du behöver maximal precision
I särskilt komplexa scenarier kan det vara användbart att använda parametrar som -FilterXPath och -FilterXml för avancerade frågor. Till exempel, för att hitta händelser av en viss nivå och ett specifikt datum i Windows PowerShell-loggen:
# Filtrado por XPath
Get-WinEvent -LogName 'Windows PowerShell' -FilterXPath "*]]"
# Filtrado por XML
$xmlQuery = @'
<QueryList>
<Query Path="Windows PowerShell">
<Select Path="System">*]]</Select>
</Query>
</QueryList>'
Get-WinEvent -FilterXml $xmlQuery
Jämförelse med Get-EventLog och bästa praxis

Även om Get-EventLog fortfarande finns för bakåtkompatibilitet är dess funktioner märkbart sämre. Till exempel åtkommer den bara klassiska loggar och tillåter inte filtrering efter leverantör eller användning av XPath/Hashtable. Allt eftersom PowerShell utvecklas och dina behov växer är det lämpligt att bekanta dig med Get-WinEvent och dra nytta av dess avancerade filter och förmåga att bearbeta stora volymer händelser med mindre prestandapåverkan.
Några användbara rekommendationer:
- användning Hämta händelselogg för snabba frågor i system- eller säkerhetsloggar.
- ansöka Get-WinEvent för att filtrera och analysera moderna loggar, arkiverade loggar och komplexa scenarier.
- För att hitta den exakta sökvägen till de icke-klassiska loggarna, använd först Loggboken och kopiera sökvägen för parametern. -Lognamn.
- Undvik att dumpa alla händelser till konsolen: använd -MaxEvents för att begränsa utdata eller filtrera med hashtabeller.
- Automatisera uppgifter med skript och pipelines när du arbetar med stora loggar eller över flera team.
PowerShell-loggvariabler och anpassning
Med PowerShell kan du konfigurera vilka typer av händelser som loggas genom att redigera inställningsvariabler som $LogEngineLifeCycleEvent o $LogCommandHealthEventPå så sätt kan du bestämma om du vill registrera motorinformation, leverantörer eller kommandon exekverad och justerar granulariteten efter dina behov.
Aktivering/avaktivering görs enligt följande:
$LogCommandLifeCycleEvent = $true # Para registrar inicio/fin de comandos
$LogProviderHealthEvent = $false # Para desactivar eventos de proveedor
Ändringarna påverkar endast den aktuella sessionen, om de inte läggs till i PowerShell-profilen.
Vanliga frågor om Get-WinEvent och händelseloggar
- Kan jag rensa PowerShell-händelseloggen?
Om medClear-EventLog -LogName "Windows PowerShell"eller från Loggboken (högerklicka > Töm logg). - Var lagras händelseloggfiler?
De är belägna i%SystemRoot%\System32\winevt\Logsi .evtx-filer. - Är det möjligt att vidarebefordra loggar till ett centraliserat system?
Korrekt. Windows kan konfigureras att vidarebefordra händelseloggar till en central server med hjälp av inbyggda tjänster eller externa verktyg. - Fungerar Get-WinEvent på någon version av Windows?
Det stöds endast på Windows Vista och Server 2008 R2 och senare. Det fungerar inte på Windows PE eller Nano Server.
Passionerad författare om bytesvärlden och tekniken i allmänhet. Jag älskar att dela med mig av min kunskap genom att skriva, och det är vad jag kommer att göra i den här bloggen, visa dig alla de mest intressanta sakerna om prylar, mjukvara, hårdvara, tekniska trender och mer. Mitt mål är att hjälpa dig att navigera i den digitala världen på ett enkelt och underhållande sätt.
