L’avevo già usato in passato, mai pubblicato e neanche mai ritoccato, si tratta di uno script (VBScript) che mi permette rapidamente di andare a recuperare lo spazio disco occupato dai service pack di ServiceDesk Plus, i quali rimarranno vita-natural-durante a popolare la cartella “Patch” del server sul quale stai tenendo in vita l’applicativo.
Te ne avevo parlato nell’articolo ServiceDesk Plus: recuperare lo spazio disco occupato dagli aggiornamenti ma all’epoca portavo a termine la cosa a manina. L’ho poi automatizzata tramite uno script che – fornito un numero di giorni di cui tenere conto – rimuoveva file, cartelle e sottocartelle che superavano (come data) quei giorni da tenere da parte. In pratica l’idea era quella di cancellare tutti quei service pack più vecchi di “X” tempo.
Poi però mi sono accorto che questo non conveniva perché – insieme ai service pack – eliminavo anche lo storico degli aggiornamenti e dei file modificati. Certo è parzialmente utile mantenere queste informazioni senza però poter fare rollback, ma aiuta comunque a prendere una direzione più o meno precisa in caso di problemi. Per questo motivo, quel VBScript è stato modificato per svolgere sì il suo mestiere, ma ignorare quei file e cartelle dove si trovano le informazioni sugli aggiornamenti eseguiti sul software.
L’ho pubblicato su Gist, a tua completa disposizione:
'GSolone 2019 | |
' ult.mod. 9/2/22: integro le eccezioni per cartelle e file da escludere dalla pulizia | |
' Credits: | |
' https://www.experts-exchange.com/questions/23543652/VBScript-to-delete-all-files-and-folders-in-a-directory.html | |
' https://www.automateexcel.com/vba/getfolder-getfile/ | |
' https://superuser.com/a/1127074 | |
strFolder = "C:\ManageEngine\ServiceDesk\Patch" | |
intDays = 0 | |
' Non toccare nulla oltre questa riga / Don't modify anything after this line | |
Dim fileException, folderException, i | |
Dim lockedFolders(10), lockedFiles(10) | |
Set objFSO = CreateObject("Scripting.FileSystemObject") | |
Set objFolders = objFSO.GetFolder(strFolder) | |
objToday = Now() | |
objPastDate = DateAdd("d", intDays*-1, objToday) | |
lockedFolders(0) = "logs" | |
lockedFolders(1) = "tmp" | |
lockedFiles(0) = "inf.xml" | |
lockedFiles(1) = "specs.xml" | |
Recurse objFolders | |
Sub recurse(ByRef objFolders) | |
Set objSubFolders = objFolders.SubFolders | |
Set objFiles = objFolders.Files | |
For Each File In objFiles | |
'MsgBox("Debug: " & File.Name) | |
fileException = False | |
For i = LBound(lockedFiles) to UBound(lockedFiles) | |
If lCase(File.Name) = lCase(lockedFiles(i)) Then | |
fileException = True | |
Exit For | |
End If | |
Next | |
If Not fileException Then | |
If File.DateLastModified < objPastDate Then | |
On Error Resume Next | |
File.Delete | |
End If | |
Else | |
'MsgBox("Exception found: " & File.Name) | |
End If | |
Next | |
For Each Folder In objSubFolders | |
'MsgBox("Debug: " & Folder.Name) | |
folderException = False | |
For i = LBound(lockedFolders) to UBound(lockedFolders) | |
If lCase(Folder.Name) = lCase(lockedFolders(i)) Then | |
folderException = True | |
Exit For | |
End If | |
Next | |
If Not folderException Then | |
If Folder.DateLastModified < objPastDate Then | |
On Error Resume Next | |
objFSO.DeleteFolder Folder.Path, True | |
Else | |
recurse Folder | |
End If | |
Else | |
'MsgBox("Exception found: " & Folder.Name) | |
End If | |
Next | |
Set objSubFolders = Nothing | |
Set objFiles = Nothing | |
End Sub |
Sappi solo che:
- i giorni impostati in maniera predefinita sono 0 (
intDays = 0
), quindi cancellerà qualsiasi cosa, anche se recentissima). Puoi modificare il valore numerico e portarlo a – per esempio – 30, per chiedere allo script di cancellare ciò che supera il mese di vita. - La cartella impostata come predefinita è la ManageEngine nel disco
C:\
, senza tenere conto che l’installazione di solito suggerisce di usare la cartellaProgram Files
, quindi andrà modificata lastrFolder = "C:\ManageEngine\ServiceDesk\Patch"
per puntare alla reale cartella delle patch del tuo ServiceDesk Plus (probabilmentestrFolder = "C:\Program Files\ManageEngine\ServiceDesk\Patch"
). - I file tenuti fuori dalla pulizia sono
inf.xml
especs.xml
, mentre le cartelle sonologs
etmp
. Puoi modificare questi parametri andando a ritoccare ciò che vedi comelockedFiles(0)
elockedFiles(1)
, ma anchelockedFolders(0)
elockedFolders(1)
. Potrai aggiungere altre esclusioni semplicemente inserendo nuovi campi del vettore (quindilockedFiles(2)
,lockedFiles(3)
e così via fino alockedFiles(10)
, così come per le cartellelockedFolders(2)
,lockedFolders(3)
e via dicendo, anche questo fino alockedFolders(10)
). In teoria non dovrebbe però essere necessario.
Doppio clic sullo script per eseguirlo “senza troppe domande“, puoi anche creare un’operazione programmata nel Pannello di Controllo di Windows per ripetere l’operazione a intervalli regolari se necessario. In caso di dubbi, già sai, l’area commenti è a tua disposizione :-)
#StaySafe
Immagine di copertina Gary Chan on Unsplash
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! :-)
Pillole
Le pillole sono articoli di veloce lettura dedicati a notizie, script o qualsiasi altra cosa possa essere "divorata e messa in pratica" con poco. Uno spazio del blog riservato agli articoli "a bruciapelo"!
Se vuoi leggere le altre pillole fai clic qui.