Event Viewer: come inviare notifiche e-mail dal Registro Eventi con uno script Powershell

Event Viewer: come inviare notifiche e-mail dal Registro Eventi con uno script Powershell

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.

event-viewer-send-email

 

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:

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à:

Una volta terminate le modifiche, salvate il file in un percorso del vostro HDD – ad esempio   .

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   e, nel campo Add arguments (optional) inserite il percorso del file .ps1 creato in precedenza: ad esempio, se lo avete creato in  , inserite (occhio alle virgolette):

event-viewer-action-start-program

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:

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, EventIDMessage, Source, EntryType etc.:

event-viewer-error-mail

Per il momento è tutto: felice visualizzazione!

 

 

RELATED POSTS

About Dark

Sviluppatore, analista di progetto, web designer, divulgatore informatico. Lavora come IT Architect per il design e lo sviluppo di siti, servizi, interfacce e applicazioni web e per dispositivi mobili.

View all posts by Dark