RunningLow - Script PowerShell per controllare lo spazio libero su disco Uno script PowerShell per controllare lo spazio libero su FileSystem locali e/o di rete e inviare e-mail quando scende sotto al livello di guardia

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

Questo articolo ha lo scopo di illustrare il funzionamento di RunningLow, un semplice script PowerShell che ho realizzato con l'intento di dotare i miei server Windows di uno strumento in grado di avvisarmi quando lo spazio libero residuo sui vari Hard-Disk locali e di rete scende sotto al livello di guardia.

Chiunque lavori abitualmente con macchine Windows fisiche e/o virtualizzate conosce benissimo l'importanza di avere costantemente sotto controllo questa informazione: un server che finisce lo spazio va rapidamente incontro a problemi bloccanti e cessa di funzionare correttamente, stante l'impossibilità di svolgere la maggior parte delle operazioni basate su I/O: creare file temporanei, memorizzare informazioni, svolgere le periodiche attività di manutenzione, backup e aggiornamento, creare o aggiornare sessioni web - se queste vengono gestite tramite file - e così via. La faccenda è ancora più grave quando i server in questione ospitano servizi DBMS come MySQL o MS-SQL, dove l'impossibilità di utilizzare il FileSystem può tradursi nella perdita di consistenza di indici, integrità dei dati contenuti nelle varie tabelle e altre spiacevolissime situazioni.

Lo scopo primario di RunningLow è prevenire tutto questo: lo script è infatti in grado di controllare uno o più drive locali e/o di rete verificando che lo spazio libero non sia sceso al di sotto di una quota preimpostata e, in caso affermativo, inviare un avviso tramite e-mail a uno o più indirizzi. L'idea non è certo originale: esistono decine di strumenti di amministrazione e applicativi specifici che sono in grado di svolgere queste operazioni: persino CCleaner della Piriform - sebbene soltanto nella versione PRO - può essere configurato in modo da inviare avvisi. Al tempo stesso, se non volete spendere altri soldi in licenze o se non avete voglia di appesantire il vostro sistema con un agent perennemente attivo, potreste apprezzare l'economicità e le performance di questa semplice e leggera alternativa.

UPDATE: RunningLow 1.1 (e versioni successive) consente ora di verificare anche dischi di rete e di configurare le impostazioni tramite CLI: per maggiori informazioni sull'ultima versione, dai un'occhiata alla pagina del progetto su GitHub!

Il Codice Sorgente

Ecco il codice sorgente della prima - e ad oggi più recente - versione di RunningLow:

E' sufficiente effettuare il copia/incolla del codice di cui sopra, salvarlo in un file denominato RunningLow.ps1 (o qualsiasi altro nome) e il gioco è fatto. In alternativa è anche possibile scaricare l'ultima versione dalla pagina ufficiale del progetto su GitHub.

Configurazione

Le prime righe dello script riguardano le varie opzioni di configurazione possibili, che ciascun amministratore dovrà modificare sulla base delle proprie esigenze e adattare al proprio contesto di utilizzo. L'opzione più importante è senza dubbio quella che riguarda i drive che dovranno essere oggetto del controllo: come si può vedere osservando il codice, è possibile sia indicare un array di lettere di unità corrispondenti ai dischi da controllare - locali o di rete, a patto che i drive di rete siano stati mappati in modo permanente su lettere di unità locali - sia indicare un valore null o empty: in questo secondo caso, lo script svolgerà il controllo su tutti i dischi locali.

I commenti inseriti all'interno del codice dovrebbero essere più che sufficienti a guidare chiunque nel resto della configurazione: in ogni caso, chiunque abbia bisogno di ulteriore assistenza può scrivere la sua domanda nella sezione commenti di questo articolo: farò del mio meglio per rispondere.

Test

Una volta terminata la configurazione, è opportuno effettuare un paio di test per assicurarci che lo script funzioni correttamente. Come ben sa chiunque lavori abitualmente con PowerShell lo script può essere lanciato in due modi, tramite il Prompt dei Comandi di Windows:

... o mediante un Prompt Powershell:

Lo script, una volta eseguito, dovrebbe mostrare a schermo il seguente risultato:

RunningLow - Script PowerShell per controllare lo spazio libero su disco

L'assenza di "righe rosse" è sufficiente a indicarci che tutto è andato per il meglio.

Invio E-Mail

Assodato che lo script viene eseguito correttamente, è opportuno verificare anche il funzionamento della funzionalità di invio e-mail. Il modo migliore per farlo è modificare temporaneamente il valore della variabile $minSize all'interno dello script, impostando un valore eccezionalmente alto (ad es. 5TB) così da essere certi che il controllo di spazio in esaurimento darà esito positivo, provocando l'invio della e-mail. Se tutto andrà correttamente, dovremmo vedere un riscontro a schermo analogo a quello mostrato all'interno dello screenshot seguente:

RunningLow - Script PowerShell per controllare lo spazio libero su disco

A questo punto non ci resta che controllare il nostro client di posta e assicurarci di ricevere l'alert: non appena avremo verificato anche quest'ultimo punto potremo essere certi che lo script funziona correttamente.

Installazione

Ovviamente lo script non è pensato per essere lanciato manualmente dall'operatore, ma per essere eseguito automaticamente e a intervalli regolari. Il modo migliore per ottenere questo è creare un'apposita entry nel Task Scheduler di Windows, noto in italiano come Operazioni Pianificate.

IMPORTANTE: nella configurazione Generale del task, assicuratevi di impostare le opzioni Esegui indipendentemente dalla connessione dell'utente ed Esegui con i privilegi più elevati, altrimenti lo script verrà eseguito solo nel caso in cui esista una sessione utente attiva.

Nell'esempio di seguito, ho configurato RunningLow in modo che venga eseguito ogni giorno alle ore 12:00:

RunningLow - Script PowerShell per controllare lo spazio libero su disco

Nella finestra dedicata all'inserimento di una nuova azione è possibile inserire il comando di esecuzione dello script in vari modi: in una singola riga, dividendo eseguibile ( powershell ) e parametri ( -executionpolicy bypass -File RunningLow.ps1 ). E' inoltre importantissimo specificare la directory di esecuzione, cosa che nel nostro caso  è ben poco opzionale in quanto abbiamo necessità di puntare a uno script che si trova in una cartella specifica: in alternativa, il percorso completo del file RunningLow.ps1 può essere specificato anche nei parametri, nel seguente modo:

Una volta completata l'installazione, è fortemente consigliabile effettuare un secondo e ulteriore test - comprensivo di invio di e-mail - per assicurarsi che non vi siano regole di firewall o restrizioni particolari che possano ostacolare l'esecuzione dello script e/o l'invio degli avvisi.

Per il momento è tutto: mi auguro sinceramente che questo script possa aiutarvi a tenere sotto controllo i vostri server Windows!

Link Utili

Fork me on GitHub

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

One Comment on “RunningLow - Script PowerShell per controllare lo spazio libero su disco Uno script PowerShell per controllare lo spazio libero su FileSystem locali e/o di rete e inviare e-mail quando scende sotto al livello di guardia

  1. Buongiorno, sarebbe possibile avere i valori espressi in Gigabyte?
    Se si, in che modo?
    Ringrazio anticipatamente.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


The reCAPTCHA verification period has expired. Please reload the page.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.