Windows ha diversi registri eventi diversi, ma come si fa a recuperarli rapidamente? Il cmdlet Get-WinEvent
può recuperare i registri eventi classici di Windows come i registri di sistema e di applicazione, i registri generati dalla tecnologia di registrazione eventi di Windows e persino i registri di Event Tracing for Windows (ETW)!
In questo articolo, imparerai come sfruttare Get-WinEvent
per recuperare e filtrare gli eventi dai registri eventi!
Prerequisiti
Per seguire l’esempio, hai solo bisogno di una versione aggiornata di Windows 10 e di PowerShell 5.1 e superiori. Questo articolo utilizza Windows 10 e PowerShell 7.1.
Elenco dei registri disponibili con Get-WinEvent
È difficile sapere quali voci di registro potresti avere bisogno senza conoscere tutti i registri disponibili. Con Get-WinEvent
, puoi elencare tutti i registri disponibili rapidamente utilizzando il parametro -ListLog
. Il valore *
del parametro dice a Get-WinEvent
di elencare tutti i registri senza filtri. Come mostrato di seguito, vengono recuperati tutti i registri, ma viene mostrato solo un insieme limitato di proprietà utilizzando il cmdlet Select-Object
.
Non tutti i registri sono abilitati per impostazione predefinita. Potrebbe essere necessario aprire Visualizzatore eventi, individuare il registro e fare clic con il pulsante destro del mouse per abilitare il registro prima che gli eventi vengano visualizzati.

Tutti i log successivi a Windows Vista vengono salvati come file
*.evtx
anziché nel formato più vecchio*.evt
. La proprietàIsClassicLog
indica se gli eventi di log sono definiti in un formato File dei messaggi,*.mc
, o in un formato manifesto,*.xml
.
Una proprietà interessante è LogMode
, che probabilmente avrai notato è solitamente impostato su Circular
.
Circular
– Sovrascrive la voce di log più vecchia una volta che è piena.Retain
– Conserva tutti gli eventi fino a quando il log è pieno e smette di registrare fino a quando non viene liberato spazio.AutoBackup
– Esegue automaticamente il backup e l’archiviazione dei log degli eventi una volta che sono pieni.

Infine, osservando la proprietà LogType
, ci sono diversi tipi di log. Questa proprietà serve più come una proprietà di categorizzazione, ma di solito indica come viene utilizzato il log e i tipi di eventi mostrati.
- Amministrativo – Principalmente destinato agli utenti finali e agli utenti amministrativi.
- Analitico – Tipicamente, un registro ad alto volume, destinato a descrivere le operazioni del programma.
- Debug – Pensato per sviluppatori che hanno bisogno di approfondire le interne del programma.
- Operativo – Un evento che si verifica durante il funzionamento ed è utile per diagnosticare gli eventi e avviare processi.

Elenco dei provider di log degli eventi
Ora che hai una comprensione solida dei diversi log e delle loro proprietà, aiuta a capire cosa sia un Fornitore di Log degli Eventi. Un fornitore, nel linguaggio dei log degli eventi, è una fonte di un evento.
I fornitori di log degli eventi sono unici e collegati a ciascun log, come ad esempio i log dell’Applicazione o del Sistema, e serviranno come la fonte nominata da cui un evento origina.
Forse vorresti individuare problemi filtrando i log e potresti essere interessato solo ai problemi di un determinato fornitore. Per elencare quali fornitori sono disponibili, utilizza il parametro -ListProvider
. Come mostrato di seguito, il *
elenca tutti i fornitori disponibili e a quali log sono collegati, come ad esempio Windows PowerShell o System.

Forse potresti voler elencare solo i fornitori disponibili per un particolare registro, come System
. Per farlo, potresti filtrare gli eventi utilizzando il comando Where-Object
utilizzando i valori della proprietà LogLinks
. La proprietà LogLinks
mostra i registri eventi collegati come una lista.
Per filtrare i registri richiesti con Where-Object
, utilizza l’-In
operatore di confronto per filtrare solo quegli eventi con System
nel valore della proprietà LogLinks
. Infine, l’uso di Format-Table -AutoSize
rende più facile la lettura dell’output, come mostrato di seguito.

Recupero dei Log Eventi Classici con Get-WinEvent
Il primo passo nel risolvere un problema di Windows è recuperare il registro Application o System, che sono i Log Eventi Classici. Nell’esempio mostrato di seguito, recupererai i primi 100
eventi utilizzando il parametro -MaxEvents
del registro eventi Application.
Per rendere più facile la lettura dei risultati, seleziona solo le proprietà necessarie per leggere le voci più facilmente. Altrimenti, le voci sono raggruppate per il nome del provider, il che rende difficile analizzare l’elenco dei risultati.

Trovare gli eventi di Windows moderni con Get-WinEvent
Ora che hai recuperato gli eventi dal classico registro dell’applicazione, cosa ne pensi dei risultati di un registro eventi di Windows più recente, come Microsoft-Windows-WindowsUpdateClient/Operational
?
A differenza di un registro eventi classico, come System
, il registro Microsoft-Windows-WindowsUpdateClient/Operational
è un registro moderno, con Get-WinEvent
che funziona allo stesso modo come sotto.

Che ne dici di ottenere solo gli eventi più vecchi? Anche se potresti invertire l’ordine dei risultati con Sort-Object
, utilizza il parametro -Oldest
per recuperare i primi 10
eventi, come mostrato di seguito.
Il comando Get-WinEvent
filtra per te invece di restituire tutti i risultati e ordinare, il che è tipicamente più lento.

Recupero dei file Event Tracing for Windows (ETW) con Get-WinEvent
Forse hai un file esportato *.evtx
da un altro computer o hai fatto il backup di un registro esistente. Puoi leggere quei log con il cmdlet Get-WinEvent
. Se hai bisogno di conservare i log per scopi di audit, Get-WinEvent
è un ottimo modo per interrogare quei log con cmdlet standard all’interno degli script rapidamente.
Per dimostrare il recupero delle voci di registro da un file *.evtx
, è necessario un file di registro esportato.
1. Apri il Visualizzatore eventi e vai a un registro. In questo esempio, il registro Registri applicazioni e servizi → Windows PowerShell.

2. Successivamente, fai clic su Salva tutti gli eventi con nome… nell’elemento di menu Azioni.

3. Salva il file in una posizione del disco da recuperare tramite il comando Get-WinEvent
.

Ora che hai esportato un file di registro, passa la posizione del file di registro tramite il parametro -Path
per leggere gli eventi. Nell’esempio mostrato di seguito, il registro di Windows PowerShell viene esportato per un consumo successivo.

Filtraggio dei Registri Eventi di Windows Utilizzando Get-WinEvent
Anche se potresti filtrare i registri con il cmdlet standard Where-Object
, Get-WinEvent
offre filtri incorporati. Restituendo tutti i risultati e filtrando successivamente, si compie più lavoro del necessario. Invece, dovresti sempre cercare di filtrare il più possibile alla fonte.
Il cmdlet Get-WinEvent
fornisce tre parametri per aiutarti a filtrare tra migliaia di eventi chiamati -FilterHashTable
, -FilterXPath
e -FilterXML
. In generale, ogni parametro svolge la stessa attività in modo diverso.
Filtraggio dei Registri Eventi con FilterHashTable
Il parametro -FilterHashTable
filtra i contenuti in base alle proprietà corrispondenti, come LogName
. Invece di utilizzare il parametro -LogName
per filtrare per un log specifico, è possibile utilizzare un hash table, come @{'LogName' = 'Application'}
, che corrisponderebbe alla proprietà dell’evento LogName
.
L’esempio mostrato di seguito fornisce un hash table al parametro -FilterHashTable
che cerca solo il log dell’applicazione e con un tempo di inizio che è tutti gli eventi successivi a mezzanotte del giorno corrente, Get-WinEvent
restituisce rapidamente i risultati.

FilterHashTable
parameter.Confronta le velocità di filtraggio del comando sopra con uno filtrato tramite Where-Object
invece che tramite il parametro -FilterHashTable
nella pipeline. Come puoi vedere, il comando che utilizza Where-Object
è molto più lento di quello che utilizza il parametro -FilterHashTable
.

FilterHashTable
and Where-Object
.Filtraggio dei log eventi utilizzando il parametro FilterXPath
Le voci del registro eventi sono memorizzate come file XML, e quindi puoi utilizzare il linguaggio XPath, un linguaggio di interrogazione XML, per filtrare le voci del registro. Eseguendo lo stesso comando utilizzato sopra e traducendo in XPath, è possibile ottenere gli stessi risultati.
Per creare una query XPath, utilizza la funzionalità di filtraggio nell’Event Viewer di Windows, come mostrato di seguito.
1. Apri il Visualizzatore eventi e passa a un registro, come il registro Log di Windows → Applicazione.

2. Successivamente, fare clic sul collegamento Filtra registro corrente nel riquadro di destra.

3. Immettere i parametri che si desidera utilizzare per filtrare il registro.

4. Fare clic sulla scheda XML e copiare la sezione contenuta all’interno del tag Seleziona.

5. Ora, copiare e incollare il contenuto copiato con il parametro -FilterXPath
. Ora è possibile vedere di seguito che utilizzando la sintassi XPath trovata dall’osservatore del registro eventi, è possibile creare una query per filtrare solo le informazioni necessarie.

FilterXPath
parameter.Approfondire come creare query XPath è fuori dal campo di applicazione di questo articolo, ma il formato di base è mostrato di seguito. Quando il parametro FilterXPath
filtra una data, vedrai una grande differenza: è necessario utilizzare un formato data più specifico, yyyy-MM-ddTHH:mm:ss.fffZ
, che la data deve essere restituita in UTC, come indicato dallo switch -AsUTC
.

Filtraggio dei risultati del registro eventi con FilterXML
Infine, l’ultimo parametro di filtraggio disponibile è il parametro -FilterXML
. A differenza dei parametri -FilterXPath
e -FilterHashTable
, questo parametro prende XML che viene quindi utilizzato per filtrare gli eventi. Il parametro -FilterXML
consente regole più complesse e, come mostrato di seguito, può replicare gli esempi di filtraggio precedenti.
Come mostrato nell’esempio precedente, è possibile recuperare una query preformattata dalla funzionalità Visualizzatore eventi → Filtra log corrente. Invece di selezionare solo il contenuto nel nodo Select
, utilizzerai l’intera query. Non sono stati effettuati filtri effettivi, come indicato dal simbolo *
nel nodo Select
. Questo fornirà il markup generale per il prossimo esempio.

Prima di creare un comando su una sola riga, separa innanzitutto la query XML e assegna il markup a una variabile, $Query
, nell’esempio qui sotto. Assegnare la query a una variabile migliora la facilità d’uso e la leggibilità. Successivamente, passa la variabile $Query
al parametro -FilterXML
di Get-WinEvent
.
Come mostrato di seguito, vedrai i risultati della query più complessa che restituisce tutti gli eventi di quella giornata e archiviati nel log Application
.

FilterXML
works.Conclusion
Il cmdlet Get-WinEvent
semplifica la ricerca di più fonti di log eventi con potenti capacità di filtraggio. Dall’auditing alla risoluzione dei problemi, il cmdlet Get-WinEvent
è un’aggiunta cruciale per qualsiasi toolkit degli amministratori di sistema!