martedì 19 marzo 2013

Controllare reports CSV che arrivano per e-mail (in una sottocartella di inbox)

Eccoci qui di nuovo a scrivere di un interessante script che mi sono trovato a fare...

Oggi parleremo di come sia possibile automatizzare il controllo di reports che vi arrivano in formato CSV nella posta elettronica.
Ovviamente, con piccolissime modifiche, sarà possibile controllare qualsiasi formato di allegato o matchare le parole importanti nel corpo del messaggio...

Chi fa di mestiere l'informatico, l'amministratore di rete o altro, sa per esperienza che moltissimi software (backup, antivirus centralizzati, antispam, etc...) hanno, integrata di default, la possibilità di inviare un report periodico per e-mail, spesso allegandolo in un formato "analizzabile" come il CSV.

Ma che noia leggersi il "giornale dei reports" tutti i giorni, cercando con gli occhi le stesse cose e facendo fatica mentale...
Meglio automatizzare!

Ecco lo script:


Set objShell = CreateObject("Wscript.Shell")


Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")

Set objInbox = objNamespace.GetDefaultFolder(6)

GetMessaggiAvamar(objInbox)

Sub GetMessaggiAvamar(objParentFolder)
    Set colFolders = objParentFolder.Folders
    conta = 0
        
        Set objSubfolder = objParentFolder.Folders("AmministratoriWAN")
           Set MyItems = objSubfolder.Items
        MyItems.Sort "[ReceivedTime]", true
        conta = 0
For Each messaggio IN MyItems 
            if (inStr(1,messaggio.Subject,"Avamar")) then

                Set allegati = messaggio.Attachments
                if (allegati.Count > 0) THEN ' se c'è almeno un allegato
                    For Each allegato IN allegati
                        if ((inStr(1,allegato.FileName, ".csv", 1)) And (inStr(1,allegato.FileName, "ackup", 1))) THEN
                            
                            allegato.SaveAsFile(pathSalvataggioAllegati & allegato.FileName)
                            controllaCSVBackup pathSalvataggioAllegati, allegato.FileName, messaggio.ReceivedTime
                        end if
                    Next
                end if
                conta = conta+1
            End if
            if conta>5 then
             Exit For
            end if
        Next
End Sub
Sub controllaCSVBackup(strPathtoTextFile, fileName, dataMessaggio)
Set objFile = objFSO.OpenTextFile(strPathtoTextFile & fileName, ForReading)
objFile.ReadLine
Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine
    arrFields = Split(strLine, ",")
    strClient = arrFields(8)
    strGroupName = arrFields(12)
    strEsito = arrFields(31)
    strDataSessione = arrFields(2)
    REM decido il colore
    if (inStr(1, strEsito, "Activity completed", 1)) THEN
        messaggio = "OK#0A"
    End IF
    if (inStr(1, strEsito, "exceptions", 1)) THEN
        messaggio = "OKbutWarning#0E"
    End IF
    if (inStr(1, strEsito, "failed", 1)) THEN
        messaggio = "ERROR#0C"
    End IF
    strMessaggio = strDataSessione & " " & strGroupName & " client " & strClient & ": " & messaggio
    strMessaggio = Replace(strMessaggio, "(", "")
    strMessaggio = Replace(strMessaggio, ")", "")
    strMessaggio = Replace(strMessaggio, "/", ".")
    strMessaggio = Replace(strMessaggio, ":", ".")
    wscript.echo strMessaggio
Loop
objFile.Close
End Sub


Chiaramente, questo script è personalizzato per analizzare le MIE mail con i report del MIO software di backup... ma ecco come personalizzarvelo.


alla riga
Set objSubfolder = objParentFolder.Folders("AmministratoriWAN")
sostituite AmministratoriWAN con il nome della sottocartella in cui ricevete i reports.

alla riga
if (inStr(1,messaggio.Subject,"Avamar")) then
sostituite Avamar con una stringa univoca che identifica i messaggi che contengono i reports da analizzare

alla riga
if ((inStr(1,allegato.FileName, ".csv", 1)) And (inStr(1,allegato.FileName, "ackup", 1))) THEN
sostituite "ackup" con un match sul nome degli allegati che volete analizzare e ".csv", se volete cambiare l'estensione.

nella funzione
Sub controllaCSVBackup
sostituite, nelle righe che contengono arrFields(n), n con il numero di colonna (ocio che parte da 0) che identifica il campo di cui prendere il testo


nella parte di logica in cui si sceglie il colore (vedrete più avanti perchè)
 if (inStr(1, strEsito, "Activity completed", 1)) THEN
        messaggio = "OK#0A"
    End IF
    if (inStr(1, strEsito, "exceptions", 1)) THEN
        messaggio = "OKbutWarning#0E"
    End IF
    if (inStr(1, strEsito, "failed", 1)) THEN
        messaggio = "ERROR#0C"
    End IF
sostituite i match delle stringhe ed i messaggi con i colori (sintassi "messaggio#codiceColore") che volete scrivere se il campo contiene il match.

A questo punto i messaggi vengono "sputati" riga per riga, per tutti gli ultimi 5 messaggi con i loro allegati.
Se volete modificare il numero dei messaggi analizzati, cambiate la riga
if conta>5 then
con il numero dei messaggi da analizzare.


e QUI viene il bello:
Se volete che i messaggi escano COLORATI, usiamo lo script dei colori meglio descritto nel mio articolo e loopiamo sulle righe risultanti, in un WRAPPER BATCH, come segue.

######################
for /F "usebackq tokens=*" %%a IN (`cscript "Controlla AVAMAR BACKUPS.vbs" //nologo`) DO (
    @call ColoraStringa.bat %%a
)
######################

Il Risultato sarà spettacolare:



Spero di avervi stuzzicato.
Ciao!

Nessun commento:

Posta un commento

I commenti sono soggetti a moderazione, prima di essere pubblicati.

Qualsiasi contenuto illecito, immorale o che io ritenga (arbitrariamente) offensivo od inappropriato, verrà cancellato.