24 gen 2014

Windows Server Backup: Inviare un report via email V2

02/11/2015: Attenzione! Update! 

In questa versione dello script sono stati corretti alcuni bug (anche quelli segnalati) ed implementato con nuovi parametri . Ecco le novità:


1. Corretto "Number of version" ora visualizza l'effettivo numero di copie presenti nel target anziché lo storico.

2. Vengono catturati gli ultimi 6 eventi. Questo permette di cambiare la schedulazione del backup secondo le proprie esigenze

3. Migliorato l'ouput HTML. Se il backup fallisce o lo spazio è inferiore ad una certa percentuale la riga viene colorata di rosso mentre se va a buon fine viene colorata di verde. In caso di warning avremo il colore giallo.

4. Aggiunto lo stato delle unità logiche dell'host. In caso in cui lo spazio libero scenda sotto una certa soglia la riga viene colorata in arancio

5.  Nel caso in cui lo spazio libero del target scenda sotto una certa soglia la riga viene colorata in viola

6. Aggiunta la lista delle VM e dei volumi inseriti nella policy di Backup.

In base ai test effettuati è risultato più opportuno schedulare lo script con Trigger "On Event" su 14, 561 come base.



Windows Server Backup con le release più recenti è in grado di eseguire il backup di un intero server (tutti i volumi), volumi selezionati, la stato del sistema (system state), cartelle o file specifici, creare una copia di backup che è possibile utilizzare per il ripristino bare metal.

È possibile ripristinare lo stato del sistema, alcune applicazioni, file, cartelle e volumi e addirittura virtual machine. In caso di disastro come ad esempio un guasto ai dischi rigidi è possibile eseguire un ripristino bare metal. Inoltre è possibile utilizzare Windows Server Backup per creare e gestire i backup per il computer locale o un computer remoto.

Sicuramente una feature molto utile e completa, peccato manchi un rapporto del backup ed il relativo invio via e-mail  come siamo abituati ad avere sui software di terze parti.

Al fine di far fronte a questa lacuna e dato che nelle piccole PMI molto probabilmente non andremo ad acquistare un complesso e costoso software di backup, ho cercato di progettare un report html sfruttando il Framework, PowerShell, Linq, XDocument e xml. Tutto in un unico script PowerShell.


Lo script cattura una serie di eventi relativi alle operazioni di Windows Backup, legge lo stato del disco di destinazione (target) e ci informa sul numero delle versioni presenti sul supporto e se ci sono eventuali procedure in corso. Se il Backup dovesse fallire la riga nella tabella verrà colorata con uno sfondo rosso in modo da essere notata immediatamente. Lo stesso sfondo verrà applicato alla tabella del disco destinazione (target) nel caso in cui lo spazio disponibile scenda al di sotto del 10%. Una volta catturate le informazioni viene costruito un report html ed inviato via e-email ad uno o più destinatari.

Vediamo come poter personalizzare lo script partendo dall'oggetto dell'e-mail che viene inviata.

Per prima cosa inserite il nome del vostro cliente nella variabile $Customer. (Riga 22) L'oggetto dell'e-mail recapitata sarà simile a questo: ## Backup report from: HV1 - iQuad ##

Alla riga 30 la sezione dove viene specificato il path e il nome del file. In questo caso, dato che ho usato la variabile di sistema  $env:public il report html si troverà in "C:\Users\Public"

Alla riga 38-44 viene settata temporaneamente la localizzazione en-US. Questa operazione si rende necessaria soltanto su Windows Server 2012 a causa di un bug sul comando Get-Winevent. Non è necessario su Windows Server 2012 R2.

Dalla riga 158  alla riga 230 si trova il codice HTML e il foglio di stile (CSS) tramite il quale è possibile personalizzare i caratteri, colori e larghezza delle tabelle.

Dalla riga 276  troviamo le variabili dedicate alla gestione e all'invio del report via email.




12 commenti:

  1. Ciao, utilizzo il tuo script su qualche server e lo trovo utilissimo. tuttavia su windows server 2008 e 2008 R2 riporta sempre che il disco è pieno in quanto legge lo spazio libero su disco e non sulla partizione. Come posso risolvere? Grazie

    RispondiElimina
    Risposte
    1. Ciao, presto pubblicherò una versione aggiornata dello script. Stay tuned!

      Elimina
  2. Ciao, ottimo script complimenti. Potresti indicarmi cosa modificare per avere la colonna "TimeCreated" in formato 24h invece di 12h am/pm? Grazie

    RispondiElimina
    Risposte
    1. Ciao, presto pubblicherò una versione aggiornata dello script. Stay tuned!

      Elimina
    2. In ogni caso se non hai WS2012 puoi togliere le righe che settano la Culture in en-US per bypassare un bug mai risolto. Se hai WS2012 setta il formato data in dd/mm/yyyy anche se hai L'OS in en-US

      Elimina
  3. Ciao Andrea, ho trovato ancora un piccolo bug. In pratica quando viene riportato lo spazio libero, nel caso ci sono 2 partizioni e la destinazione del backup è su una di queste, allora lo script riporta lo spazio di tutto il disco e non del volume di backup di destinazione. Spero di essermi spiegato...Grazie

    RispondiElimina
  4. Ciao, i parametri vengo catturati dal cmdlet Get-WBDisk il quale restituisce lo spazio libero sull'hd segnato come "contenente backup".
    DiskName : WD 20EADS External USB Device
    DiskNumber : 3
    DiskId : 33c32987-8735-431f-a1fa-4301ce2dc525
    TotalSpace : 2000398934016
    FreeSpace : 439074422272
    Volumes : {HV1 2015_10_02 12:40 DISK_01}
    ContainsBackup : True
    BackupVolumeId : 60e8a428-d00e-4a22-96f8-68c3ddf0574c
    Properties : External, ValidTarget

    RispondiElimina
  5. Ho qualche domanda...
    Il file lo devo mettere su un notepad e poi dare estensione .ps1?
    Come faccio ad impostarlo come task di schedule che parte in automatico ?

    RispondiElimina
    Risposte
    1. Apri "Windows Powershell ISE" e incolli il codice e lo salvi con nome che preferisci. .PS1 è l'estensione dei file Powershell. In task scheduler scrivi "poweshell.exe nomescript.ps1" poi il wizard lo sistema autonomamente.

      Elimina
  6. Hi Andrea can we have success failed status in the subject and data transferred in the body?

    RispondiElimina
  7. $getevt contains the last 6 backup events, so I think that it's not too hard get the value and put it in a variable and then use it in the "subject"

    RispondiElimina
  8. Anyway that's great script :p I have utilized one task at task scheduler adding all the events id's by customizing so whether backups' success or fails we get report from the same task.

    I am now looking for more, to convert it into exe so that we can just deploy easily and it creates a scheduled task and we just add smptp, user credentials at options and also if it can discover other servers running windows backups in a domain and can be deployed.

    RispondiElimina