Indice dei contenuti
Il Visualizzatore Eventi di Windows, o Event Viewer in lingua inglese, è senza dubbio uno strumento fondamentale per qualsiasi amministratore di sistema: utilizzato dalla maggior parte dei programmi e dei servizi integrati per comunicare informazioni, avvisi ed errori relativi alla loro esecuzione, è spesso il luogo dove è possibile recuperare le informazioni necessarie per comprendere e risolvere un gran numero di problemi di configurazione, performance, sicurezza e stabilità del nostro sistema.
Sfortunatamente, questa imprescindibile funzionalità è affetta da sempre - perlomeno secondo il sottoscritto - da almeno due problemi:
- la lentezza, dovuta al fatto che dipende da un parsing in tempo reale di eventi registrati su file di testo, attività che per ovvi motivi è scarsamente efficiente a livello di sistema.
- la collocazione infelice all'interno del Pannello di Controllo, dovuta al fatto che viene considerato uno strumento ad uso prevalente degli amministratori di sistema.
Queste due problematiche rendono di fatto l'utilizzo del Visualizzatore Eventi particolarmente scomodo: il risultato, almeno nella mia esperienza, è che spesso persino gli amministratori di sistema si dimenticano della sua esistenza, lasciando accumulare errori su errori che potrebbero facilmente essere risolti se soltanto qualcuno riuscisse ad averne notizia in modo più immediato.
E' proprio questa esigenza, sentita da moltissimi SysAdmin con cui mi trovo spesso a interagire, che mi ha spinto a scrivere questo articolo per illustrare un metodo molto semplice con cui è possibile impostare un vero e proprio sistema di notifiche in tempo reale tramite e-mail degli eventi disponibili all'interno del Visualizzatore Eventi. Ovviamente si avrà la possibilità di scegliere il log (Application, Security, Setup et. al.) e/o la tipologia (Information, Error et. al.) e/o il numero di evento da notificare, così da essere avvisati soltanto degli eventi che si desidera tenere sotto controllo. Vediamo come fare.
Windows 2008 RC2
Windows Server 2008 RC2 - e in tutte le versioni precedenti - dà la possibilità di impostare le notifiche tramite e-mail in modo estremamente semplice: è sufficiente fare click con il tasto destro del mouse sulla entry per la quale si vuole attivare la notifica - log o singolo evento - quindi selezionare Attach a task to this log oppure Attach a task to this event (a seconda dei casi) e compilare il pop-up risultante avendo cura di specificare l'Action apposita, denominata non a caso Send an e-mail. All'interno del pannello relativo è possibile definire una serie di parametri relativi all'e-mail: mittente, destinatario, sever SMTP da utilizzare e così via.
Windows 2012
Purtroppo, nel caso di Windows 2012, la funzionalità di invio e-mail è stata deprecata: nonostante l'opzione sia ancora presente, se cercheremo di utilizzarla il sistema ci avviserà che non è possibile completare l'operazione perché la Action scelta non è più supportata nella versione corrente di Windows.
Fortunatamente è possibile ottenere il medesimo risultato grazie a uno script Powershell: a dire il vero, stando a questo interessante post sul forum ufficiale Microsoft TechNet, sembra che la funzionalità nativa sia stata rimossa proprio per spingere tutti gli amministratori di sistema a utilizzare uno script personalizzato. I motivi di questa scelta non sono del tutto chiari e hanno fatto legittimamente storcere il naso a molti: fortunatamente, il metodo Powershell è piuttosto semplice da implementare e consente anche una personalizzazione maggiore. Per impostarlo è necessario compiere due passaggi distinti: Creare lo script Powershell e Impostare una Task apposita nel Visualizzatore Eventi: una volta compiuti questi due passaggi vedremo anche come Creare un Evento di Test per verificare il corretto funzionamento di quanto fatto.
Creare lo script Powershell
Aprite il notepad.exe o altro editor di testo e create uno script simile al seguente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# ------------------------------------- # Ryadel.com - Powershell script to send an e-mail through the Event Viewer # ------------------------------------- # # To test this script you can use Powershell to write your own test error log entry in the following way: # ------------------------------------- # New-EventLog –LogName Application –Source "Test" # Write-EventLog –LogName Application –Source "Test" –EntryType Error –EventID 1 –Message "This is a test message." $event = get-eventlog -LogName Application -newest 1 #get-help get-eventlog will show there are a handful of other options available for selecting the log entry you want. #example: -source "your-source" # "Error" - send only error if ($event.EntryType -eq "Error") { $PCName = $env:COMPUTERNAME $EmailBody = $event | format-list -property * | out-string $EmailSubject = "New Event Log [Application]" $SMTPServer = "localhost" Write-host "Sending Email" Send-MailMessage -From $EmailFrom -To $EmailTo -Subject $EmailSubject -body $EmailBody -SmtpServer $SMTPServer } else { write-host "No error found" write-host "Here is the log entry that was inspected:" $event } |
Questo script, se eseguito, chiederà al sistema di inviare una e-mail all'indirizzo specificato contenente l'evento con data più recente tra quelli presenti nel log Application, a patto che sia di tipo Error: questo significa che, idealmente, è pensato per essere eseguito ogni volta che il log Application viene modificato, in modo da inviare una notifica per ciascun errore. Per la corretta esecuzione dello script, assicuratevi di configurare in modo corretto i parametri relativi al server SMTP.
Se volete che lo script esegua attività aggiuntive - o intendete modificare quelle già presenti - potete modificare il codice, tenendo presente le seguenti guide di riferimento in caso di necessità:
- Powershell Syntax Guide a cura del sito ss64.com, a tutt'oggi una delle migliori guide alla sintassi Powershell.
- Documentazione ufficiale su Get-EventLog, il comando Powershell utilizzato dalla funzione.
Una volta terminate le modifiche, salvate il file in un percorso del vostro HDD - ad esempio C:\Scripts PowerShell\eventviewer-send-email.ps1 .
Ora che abbiamo creato lo script, non resta che collegarlo a una tipologia di log nell'Event Viewer secondo le modalità descritte nel paragrafo successivo.
Impostare una Task nel Visualizzatore Eventi
- Aprite il Visualizzatore Eventi.
- Selezionate il log o evento su cui desiderate attivare le notifiche. Inutile dire che la scelta dipende dalle caratteristiche dello script che avete creato nel paragrafo precedente: nel caso dello script di esempio, che si occupa di inviare in mail l'errore più recente tra quelli generati nel log Application, è senz'altro opportuno selezionare il log Application.
- Fate clic con il tasto destro del mouse, quindi selezionare Attach a task to this log... e compilate il pop-up risultante.
- Quando arrivate al pannello Action (vedi screenshot in alto), selezionate Start a Program e fate click su Next.
- Nella schermata successiva, nel campo Program/script inserite
powershell.exe e, nel campo Add arguments (optional) inserite il percorso del file .ps1 creato in precedenza: ad esempio, se lo avete creato in
C:\Scripts PowerShell\eventviewer-send-email.ps1 , inserite (occhio alle virgolette):
1"C:\Scripts PowerShell\eventviewer-send-email.ps1"
Fatto questo, non resta che aspettare il prossimo evento di errore per essere certi che tutto funzioni. Per velocizzare le cose possiamo crearne uno noi stessi, secondo le modalità descritte nel paragrafo successivo.
Creare un evento di Test
Per creare il nostro evento di test possiamo ricorrere a due comandi Powershell:
1 |
New-EventLog –LogName Application –Source "Test" |
1 |
Write-EventLog –LogName Application –Source "Test" –EntryType Error –EventID 1 –Message "This is a test message." |
Come si può vedere, il primo crea una Source denominata Test, la quale viene poi utilizzata dal secondo per emettere un evento di errore.
Se tutto è stato configurato correttamente, riceveremo una e-mail contenente il messaggio di errore corredato di tutte le informazioni: data di creazione, EventID, Message, Source, EntryType etc.:
Per il momento è tutto: felice visualizzazione!