Visualizzazione post con etichetta Write-EventLog. Mostra tutti i post
Visualizzazione post con etichetta Write-EventLog. Mostra tutti i post

venerdì 18 luglio 2025

Windows: Scrivere i log nel Visualizzatore eventi di Windows con PowerShell e CMD

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.
PowerShell, Creare un evento nel Registro Eventi
FIG 1 - PowerShell, Creare un evento nel Registro Eventi

Visualizzatore 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"
Creazione e utilizzo di una origine evento personalizzata
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.
Visualizzatore eventi, Evento con origine 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".
Nuovo Registro Eventi
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. ErrorInformationSuccessWarning).
/l:
Indica il nome del registro eventi di destinazione (es. "Application", "System", "Security").
/id:
L'ID numerico dell'evento.
/d:
La descrizione dell'evento.

EventCreate, Creazione Evento da Prompt dei Comandi
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.
PowerShell, Query registro eventi
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.