Il Registro Eventi di Windows è uno strumento integrato nel sistema operativo che registra eventi, errori e avvisi relativi a diverse componenti del sistema e alle applicazioni installate. Questi registri sono fondamentali per il monitoraggio del sistema, la diagnostica dei problemi e la sicurezza e sono accessibili attraverso il Visualizzatore Eventi (Event Viewer) anch'esso incluso nel sistema operativo .
Per le nostre applicazioni/script, anziché affidarci esclusivamente a file di log testuali, possiamo sfruttare le potenzialità del registro eventi di Windows.
In questo articolo vedremo come scrivere informazioni nel Registro Eventi utilizzando PowerShell e il Prompt dei Comandi (CMD), due strumenti indispensabili per ogni amministratore di sistema.
1. Scrivere Eventi con PowerShell
Il cmdlet principale per scrivere eventi nel Visualizzatore Eventi è
Write-EventLog
Per scrivere un evento informativo nel registro eventi Applicazione si può utilizzare il comando:
Write-EventLog -LogName Application -Source "Application" -EntryType Information -EventID 1 -Message "Messaggio personalizzato"
-LogName:
Specifica il nome del registro eventi di destinazione (es. "Application", "System", "Security").
-Source:
Definisce l'origine dell'evento. Se l'origine non esiste, PowerShell tenterà di crearla, ma è buona pratica crearla esplicitamente prima.
-EntryType:
Indica il tipo di evento. I valori accettati sono: Error, Information, FailureAudit, SuccessAudit, Warning.
-EventID:
Specifica un identificatore numerico per l'evento, utile per la categorizzazione e il filtraggio.
-Message:
Il testo descrittivo dell'evento.
![]() |
FIG 1 - PowerShell, Creare un evento nel Registro Eventi |
![]() |
FIG 2 - Visualizzatore Eventi |
Creazione e Utilizzo di una Origine Evento Personalizzata
Per una migliore organizzazione e identificazione, è consigliabile creare un'origine evento personalizzata per i propri script. Questo permette di filtrare facilmente gli eventi generati dalle proprie applicazioni.
Per creare una nuova origine evento:
New-EventLog -LogName Application -Source "MioScript"
Questo comando registra "MioScript" come nuova origine nel registro eventi "Applicazione".
Per scrivere un evento con l'origine personalizzata:
Write-EventLog -LogName Application -Source "MioScript" -EntryType Warning –EventID 1 –Message "Messaggio personalizzato"
![]() |
FIG 3 - Creazione e utilizzo di una origine evento personalizzata |
Dopo aver eseguito questi comandi, aprire il Visualizzatore Eventi (digitando eventvwr.msc nella finestra Esegui o nel Prompt dei Comandi), espandere "Registri di Windows" quindi selezionare il registro "Applicazione" e verificare la presenza del nuovo evento con la descrizione personalizzata.
![]() |
FIG 4 - Visualizzatore eventi, Evento con origine personalizzata |
Gestione dei Registri Eventi Personalizzati
Oltre ai Registri Eventi predefiniti, è possibile crearne di personalizzati per raggruppare eventi specifici. Questo è particolarmente utile per applicazioni complesse o per la segregazione dei log.
Il cmdlet New-EventLog consente anche di creare un intero log eventi personalizzato, specificando più origini associate:
New-EventLog -LogName MioRegistroEventi -source 'Origine1','Origine2','Origine3'
Importante: Affinché un nuovo log eventi personalizzato appaia nel Visualizzatore Eventi, è necessario inviargli almeno un evento.
Quando si scrivono eventi in un registro eventi personalizzato, è una buona pratica verificare se il registro esiste già per evitare errori:
If ([System.Diagnostics.EventLog]::SourceExists('MioRegistroEventi') -eq $False) {
New-EventLog -LogName MioRegistroEventi -source 'Origine1','Origine2','Origine3'
}
Write-EventLog -LogName MioRegistroEventi -Source Origine1 -EntryType Information -EventID 1 -Message "Test"
Un nuovo file .evtx verrà creato nella cartella %SystemRoot%\System32\Winevt\Logs per ogni registro personalizzato.
All'interno del Visualizzatore Eventi il nuovo registro eventi sarà visibile all'interno di "Registri applicazioni e servizi".
![]() |
FIG 5 - Nuovo Registro Eventi |
2. Scrivere Eventi con CMD
Per gli script batch (.bat/.cmd), lo strumento da utilizzare è eventcreate.exe.
Per aggiungere un evento informativo al registro eventi "Applicazione":
eventcreate /t information /l application /id 1 /d "Messaggio personalizzato"
/t:
Specifica il tipo di evento (es. Error, Information, Success, Warning).
/l:
Indica il nome del registro eventi di destinazione (es. "Application", "System", "Security").
/id:
L'ID numerico dell'evento.
/d:
La descrizione dell'evento.
![]() |
FIG 6 - EventCreate, Creazione Evento da Prompt dei Comandi |
3. Query e Filtraggio dei Registri Eventi
Una volta che gli eventi sono stati registrati, il cmdlet Get-WinEvent è lo strumento più potente per cercarli e filtrarli in PowerShell. Questo cmdlet è più moderno e versatile rispetto a Get-EventLog (che opera solo sui log classici).
Get-WinEvent -FilterHashtable @{logname='MioRegistroEventi';id=1}|ft TimeCreated,Id,Message | Select-Object -First 15
Questa query filtra gli eventi nel log "MioRegistroEventi" con EventID pari a 1 e visualizza le prime 15 occorrenze, mostrando la data di creazione, l'ID e il messaggio.
![]() |
FIG 7 - PowerShell, Query registro eventi |
4. Considerazioni
Considerazioni su PowerShell Core
Nelle versioni più recenti di PowerShell Core (7.x e successive), il cmdlet Write-EventLog non è supportato nativamente per impostazione predefinita. Tentare di usarlo genererà un errore.
Per usare Write-EventLog in PowerShell Core, è necessario importare il modulo Microsoft.PowerShell.Management con l'opzione -UseWindowsPowerShell:
Import-Module Microsoft.PowerShell.Management -UseWindowsPowerShell
Questo consente a PowerShell Core di accedere ai cmdlet di gestione specifici di Windows PowerShell.
Permessi di Accesso
Per scrivere eventi nel Visualizzatore Eventi utilizzando Write-EventLog o eventcreate.exe, l'account utente che esegue lo script deve essere membro del gruppo Administrators locale. Un utente non amministratore può solo inviare eventi a log eventi personalizzati che sono stati creati da un amministratore.