Il visualizzatore eventi, questo “misterioso”, per molti, raccoglitore di informazioni di tutto quello che accade nel sistema operativo, dalle installazioni dei programmi, agli errori con relative schermate blu di Windows. Leggere e capirne il contenuto non è semplice, anche perché il Visualizzatore Eventi non è che offra delle grandi possibilità (comode) di salvataggio dei dati presenti. PowerShell può darci una mano per estrarre dei dati più specifici.

Come estrarre informazioni Visualizzatore Eventi Windows PowerShell

Aggiunto script e spiegazioni per l'estrazione completa di tutti gli eventi.

Le due aree che ci interessano di più sono Application (Applicazione) e System (Sistema), in PowerShell, nei vari comandi è necessario usare il formato inglese.

In caso non ci siano dati corrispondenti a quello che avete inserito, oppure, per qualche motivo, PowerShell non riesce ad estrarre i dati, vedrete comparire delle righe rosse.

Come estrarre informazioni Visualizzatore Eventi Windows PowerShell

Salvataggio in file di testo

Per salvare tutti gli eventi di Sistema in un file di testo, per farlo analizzare ad altri, si può usare questo script: Get-WinEvent -LogName system > d:\Sistema.txt

Filtro in base all’Origine

Con questo script potete ottenere tutti quegli eventi che contengono error, più altri caratteri rappresentati dai due asterischi, nell’Origine. Get-WinEvent -FilterHashtable @{ LogName='Application' ProviderName='*error*'}

Come estrarre informazioni Visualizzatore Eventi Windows PowerShell

Per estrapolare da System tutti gli eventi relativi agli aggiornamenti di Windows utilizziamo questo script. Get-WinEvent -FilterHashtable @{ LogName='System' ProviderName='*windowsupdate*'}

Come estrarre informazioni Visualizzatore Eventi Windows PowerShell

Estrazione gruppi di eventi

Per ricavare gli ultimi 100 eventi da Sistema: Get-WinEvent -LogName 'System' -MaxEvents 100 | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize

Come estrarre informazioni Visualizzatore Eventi Windows PowerShell

Per estrarre gli eventi relativi ad un determinato ID Evento (InstanceId -eq 51046), avvenuti nell’ultimo giorno (AddDays(-1)) possiamo usare questo script.

Get-EventLog system -after (get-date).AddDays(-1) | where {$_.InstanceId -eq 51046} Get-EventLog application -after (get-date).AddDays(-1) | where {$_.InstanceId -eq 301}

Come estrarre informazioni Visualizzatore Eventi Windows PowerShell

Cambiando il numero dell’ID evento, o dei giorni da estrarre, adattiamo la ricerca alle nostre esigenze.

Simile allo script precedente, ma senza limiti di tempo, in questo modo è possibile ottenere gli eventi relativi agli ID 6155 e 7045: Get-WinEvent -FilterHashtable @{logname="system"; id=6155,7045}

Descrizioni complete

Sino ad ora abbiamo visto una serie di script dove alcune descrizioni, o messaggi d’errore, vengono tagliate, se troppo lunghe, facendoci perdere parti importanti dell’evento.

Un metodo per avere un messaggio più completo è quello di aggiungere | Format-List in fondo al comando.

Con Get-EventLog system -after (get-date).AddDays(-1) | where {$_.InstanceId -eq 51046} | Format-List si vedono gli eventi dell'ultimo giorno con Id 51046.

Con Get-WinEvent -LogName System -MaxEvents 10 | Format-List si ottiene l’elenco dettagliato degli ultimi 10 eventi di Sistema.

Come estrarre informazioni Visualizzatore Eventi Windows PowerShell

Estrazione dai dettagli

Per filtrare tutti gli eventi che contengono “DNS” nei dettagli si utilizza questa riga di comandi: Get-WinEvent -FilterHashtable @{LogName='System'} | Where-Object -Property Message -Match “DNS”

Come estrarre informazioni Visualizzatore Eventi Windows PowerShell

Estrazione per data e ora

Per ottenere 10 eventi, avvenuti tra il 19 e il 21 Ottobre, che contengono DNS nell’origine con id=1014 si ricorre a questo script: get-winevent @{ providername = '*DNS*'; id = 1014; starttime = '19/10'; endtime = '21/10' } -MaxEvents 10

Come estrarre informazioni Visualizzatore Eventi Windows PowerShell

Per selezionare eventi in un determinato periodo di tempo, fornendo anche un orario di inizio e fine, si ricorre a questo script: $Begin = Get-Date -Date '20/10/2023 14:00:00' $End = Get-Date -Date '20/10/2023 19:55:00' Get-EventLog –LogName Application -After $Begin -Before $End

In questo modo si ottengono tutti gli eventi, degli ultimi due giorni, il cui Livello è Errore o Avviso. $StartDate = (Get-Date) - (New-TimeSpan -Day 2) Get-WinEvent Application,System | Where-Object {($_.LevelDisplayName -eq "Errore" -or $_.LevelDisplayName -eq "Avviso") -and ($_.TimeCreated -ge $StartDate )}

Estrarre tutto il contenuto del visualizzatore eventi

Sino ad ora abbiamo visto come estrarre alcuni singoli eventi, in base a determinati filtri o ricerche che avevamo impostato noi.

Solo che mi sono trovato di fronte a un computer che presentava degli strani problemi, la cui causa non era ben definita, così mi serviva avere tutti gli eventi registrati per poterli analizzare da un altro sistema operativo.

Qualche ricerca su Internet mi ha permesso di trovare uno script, che potevo eseguire da remoto, che estrae il contenuto completo del visualizzatore eventi in quattro file separati e nominati con data e ora dell’esecuzione dello script.

Non sono io l’autore dello script, che trovate in allegato all’articolo, avrei voluto citarlo ma ho perso la pagina dove l’avevo trovato, mi sono limitato a cambiarne alcune parti per renderlo più adatto ai miei scopi.

Potete cambiare la variabile $destinationpath e indicare un’altra destinazione per il salvataggio, se la cartella che inserite non è presente lo script la crea.

Come estrarre informazioni Visualizzatore Eventi Windows PowerShell

I file .evtx possono poi essere importati nel visualizzatore eventi di un altro computer per essere letti.

Come estrarre informazioni Visualizzatore Eventi Windows PowerShell

Conclusioni

Le possibilità di ricercare e filtrare dati dal visualizzatore eventi sono tantissime, basta fare una ricerca su Internet e si trovano una infinità di script, anche molto più complicati di quelli che ho presentato nell’articolo. Ho fatto una piccola selezione, di quelli che mi sono sembrati più semplici da capire e da modificare, per imparare a muoversi nel mondo di PowerShell.