Ogni amministratore di sistema Windows è probabilmente familiare con il Registro eventi di Windows. Utilizzando questo cmdlet in PowerShell, i sysadmin possono analizzare molti eventi contemporaneamente su molti computer. Libera i sysadmin dal fare clic in giro nell’Event Viewer cercando di capire il filtro giusto da utilizzare e di determinare dove precisamente è archiviato quell’evento critico. Tuttavia, `Get-EventLog` ha i suoi svantaggi, come vedrai.
Elenca i registri eventi con Get-EventLog
Il cmdlet `Get-EventLog` è disponibile su tutte le versioni moderne di Windows PowerShell. Nel suo utilizzo più diretto, questo cmdlet richiede un registro eventi da interrogare, visualizzando poi tutti gli eventi in quel registro eventi.
Ma cosa succede se non conosci il nome del registro eventi in primo luogo? In tal caso, dobbiamo individuare tutti i registri eventi disponibili nel nostro computer locale. Lo facciamo utilizzando il comando `Get-EventLog -List`.

Puoi vedere che ho alcuni registri eventi sul mio sistema locale, ma potresti chiederti: dove sono gli altri? Ci sono dozzine di altri registri eventi che appaiono sotto Registri applicazioni e servizi in Event Viewer. Perché non sono qui?
Se hai bisogno di quegli eventi, sfortunatamente, `Get-EventLog` non funzionerà. Invece, dovrai dare un’occhiata a Get-WinEvent. Il cmdlet `Get-EventLog` potrebbe essere considerato un cmdlet legacy a questo punto, ma è uno che uso ancora frequentemente semplicemente perché è così facile da usare.
Interrogare gli eventi con Get-EventLog
Ora che conosciamo tutti i registri degli eventi disponibili, possiamo leggere gli eventi all’interno di quel registro degli eventi. Forse voglio vedere tutti gli eventi nel registro degli eventi dell’Applicazione. Per ottenere quegli eventi, devo specificare il parametro LogName
con Get-EventLog
e il cmdlet restituirà tutti gli eventi in quel registro degli eventi.

Per impostazione predefinita, vedrai solo sei proprietà in output:
Index
Time
EntryType
Source
InstanceId
Message
In realtà, Get-EventLog
ne restituisce 16. Il motivo per cui ne vedi solo sei è dovuto alle regole di formattazione di PowerShell che definiscono l’output. Di seguito è riportato un esempio dell’output effettivo trovato collegando Get-EventLog
a Select-Object
e selezionando tutte le proprietà.

Filtraggio con Get-EventLog
Probabilmente, quando cerchiamo eventi, non abbiamo bisogno di tutti gli eventi. Invece, ne abbiamo bisogno solo di alcuni. In tal caso, è necessario filtrare eventi specifici. Get-EventLog
ha alcuni modi diversi per farlo. Il cmdlet Get-EventLog
può filtrare in base al timestamp, al tipo di voce, all’ID dell’evento, al messaggio, alla sorgente e al nome utente. Questo si occupa della maggior parte dei modi per trovare eventi.
Per dimostrare il filtraggio, forse sto interrogando gli eventi ogni tanto e voglio trovare i dieci eventi più recenti. In tal caso, posso utilizzare il parametro Newest
e specificare quanti eventi desidero visualizzare. Get-EventLog -LogName Application -Newest 10
restituirà solo gli ultimi dieci eventi.
Forse voglio trovare tutti gli eventi successivi a un determinato momento. Per questo, abbiamo il parametro After
. Il parametro After
richiede una data/ora, quindi se voglio trovare solo gli eventi nel log dell’applicazione che sono avvenuti dopo il 26/01/19 alle 10:17, potrei fare così Get-EventLog -LogName Application -After '26/01/19 10:17'
. Possiamo anche eseguire lo stesso processo, ma selezionare eventi che sono avvenuti prima di una certa data con, avrai indovinato, il parametro Before
.
Il comando Get-EventLog
ha molti modi diversi per filtrare, non includendo il filtro basato su un timestamp. Possiamo filtrare gli eventi anche in base ad altri attributi come l’ID dell’evento (ID istanza) e il messaggio, che tendono ad essere attributi comuni da cercare. Forse so che sto cercando un evento con un ID di 916; passeremmo 916 al parametro InstanceId
.
Possiamo anche combinare i filtri. Forse ottengo molti eventi restituiti con un ID di 916, ma voglio quegli eventi con la stringa svchost nel messaggio. In tal caso, possiamo aggiungere il parametro Message
a Get-EventLog
e specificare un carattere jolly come svchost.
Script Bonus!
Hai bisogno di un ottimo esempio sull’utilizzo di Get-EventLog in uno script del mondo reale? In tal caso, sei fortunato! Di seguito è riportato un caso d’uso avanzato di Get-EventLog
che puoi scaricare e utilizzare oggi!
Sommario
Il cmdlet Get-EventLog
è un ottimo comando da utilizzare se ti trovi mai nella necessità di interrogare rapidamente uno dei registri eventi comuni. È facile da usare e fornisce alcune capacità di filtraggio di base. Tuttavia, se hai bisogno di fare qualche investigazione approfondita sul registro eventi, probabilmente il comando Get-WinEvent
funzionerà meglio, ma è un po’ più difficile da usare e a volte richiede la conoscenza di sintassi come XPath.