Un lavoro semplicissimo se fatto in maniera interattiva, ma si risolve facilmente anche in batch nel caso in cui debba essere ripetuto tramite schedulazione, magari su un server, magari di una cartella su uno spazio condiviso (poi vedete voi eh, è riutilizzabile in mille contesti differenti).
Il codice è semplice, data una cartella di partenza tutto ciò che c’è dentro deve sparire, a prescindere che si tratti di sottocartelle contenenti file o che questi si trovino direttamente nella root. Una volta alla settimana bisognerà lanciare una “pulizia di primavera“, questo è il contenuto del mio batch:
> %logfile% for /f "delims=;" %%D in (%logfile%) do (del /f /q "%%D" & rd /s /q "%%D") cscript C:\scripts\sendlog.vbs del /q %logfile%
Ciò che andrà toccato è chiaramente la variabile “logfile” (file dove verrà tenuta traccia di ciò che verrà eliminato) e quella “folder“, la cartella sotto la quale non dovrà più esistere alcunché. Il richiamo al sendlog.vbs tramite cscript (così da non chiedere nulla a video) servirà (come facilmente intuibile) a inviare via mail ciò che è stato trovato e rimosso, il codice ve l’ho già fatto vedere (ne sono quasi certo) in passato ma l’ho ovviamente modificato per l’occasione e ve lo ripropongo:
Set email = CreateObject("CDO.Message") Set objNTInfo = CreateObject("WinNTSystemInfo") Set objFSO = CreateObject("scripting.filesystemobject") Set objArgs = WScript.Arguments ' Date and time strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each objItem in colItems dtmLocalTime = objItem.LocalDateTime dtmMonth = Mid(dtmLocalTime, 5, 2) dtmDay = Mid(dtmLocalTime, 7, 2) dtmYear = Left(dtmLocalTime, 4) dtmHour = Mid(dtmLocalTime, 9, 2) dtmMinutes = Mid(dtmLocalTime, 11, 2) dtmSeconds = Mid(dtmLocalTime, 13, 2) Next datacorrente = dtmDay & "/" & dtmMonth & "/" & dtmYear oracorrente = dtmHour & ":" & dtmMinutes 'DEBUG: togliere il commento qui di seguito se si vuole visualizzare a video data e ora corrente 'Wscript.Echo datacorrente & " alle " & oracorrente email.Subject = "Cleanup cartella CARTELLA" email.From = "root@localhost.tld" email.To = "me@localhost.tld" email.Cc = "log@locahost.tld" 'email.Bcc = DestinationBCC email.TextBody = "Pulizia CARTELLA terminata con successo il " & datacorrente & " alle " & oracorrente & vbCRLF & vbCRLF & vbCRLF & "In allegato il log di cartelle e file rimossi." & vbCRLF & vbCRLF email.AddAttachment "C:\scripts\cleanup.txt" email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")=2 email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.localhost.tld" email.Configuration.Fields.Update email.Send set email = Nothing
Ciò che andrà toccato in questa occasione? Abbastanza intuibile:
- email.Subject: l’oggetto da assegnare alla mail che vi verrà recapitata (a voi o chiunque dovrà occuparsi di controllare la buona riuscita dell’operazione);
- email.From: un mittente dal quale far arrivare il log, può non essere reale se il vostro SMTP interno accetta connessione senza autenticazione e chi riceve lascia passare la mail da quel dominio senza particolari controlli antispam;
- email.To: chi dovrà ricevere la comunicazione (tra le virgolette basterà usare una virgola per separare più indirizzi di posta, ndr);
- email.Cc: come sopra ma ovviamente in copia conoscenza;
- email.Bcc: commentato nel codice. Può essere ovviamente attivato togliendo il commento e può mandare la stessa mail in copia conoscenza nascosta;
- email.TextBody: il corpo della mail che cattura ora e data dalla macchina che lancia la pulizia e allega il file di log (email.AddAttachment, ndr) per permettere di consultare quanto fatto;
- forse inutile dirlo ma al posto di smtp.localhost.tld andrà riportato un vostro SMTP server interno, lo script non prevede (come potete vedere voi stessi) autenticazione, se volete includerla vi rimando allo script originale sul Wiki.
Mettete lo script nelle operazioni pianificate di un Windows sempre acceso, scegliete ora e giorno “et voilà“, il gioco è fatto.
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)