jueves, 30 de abril de 2009

Buscando Archivos

Que los usuarios tengan una cuota de disco asignada y que tengamos un gran storage casi no tiene importancia ante la realidad de que el espacio de almacenamiento es limitado. Sabemos muy bien que los usuarios guardan documentos que no utilizan desde hace mucho tiempo, documentos obsoletos y archivos que no son necesarios para la empresa.

Si estos documentos quedan guardados en nuestro File Server, además de dejarnos sin espacio, crece el costo de los backups y la ventana necesaria para tomar el respaldo, ya que información estática es respaldada en sucesivos full backups.
Muchas veces me consultaron si podíamos:

A-Borrar/Copiar/Mover archivos que no se modificaron desde cierta fecha.
B-Borrar/Copiar/Mover archivos con un tipo particular de extensión.
C-Borrar/Copiar/Mover archivos creados anteriormente a cierta fecha.
D-Cuánto espacio se ahorraría al mover/borrar estos archivos.

Todas éstas son tareas similares, tareas que se repiten.

Cuando una tarea se vuelve repetitiva, no hay nada mejor que realizar un script para poder automatizarla.
---------------------------------------------------------------------
strDate = "20081231000000.000000+000"
Total=0
strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("Select * From CIM_DataFile Where CreationDate < '" & strDate & "'")

For Each objFile in colFiles
Wscript.Echo objFile.Name
Total=Total+ objFile.FileSize
Next

wscript.echo Total
---------------------------------------------------------------------
Para ejecutar el script debemos copiar el texto en un Notepad y guardarlo con la extensión .vbs (Yo lo grabé con el nombre Files.vbs), y para ejecutarlo desde una línea de comando debemos ejecutarlo con cscript.







Cuando lo ejecutemos, podremos ver todos los archivos de nuestro equipo que tengan fecha de creación anterior al 31 de Diciembre de 2008, y finalmente el tamaño total de todos esos archivos.

Lo mejor de escribir nuestros propios scripts es que podemos personalizarlos completamente según nuestra necesidad.

Para cambiar la fecha desde la que estamos buscando archivos, debemos modificarla en la siguiente línea.

strDate = "20081231000000.000000+000"

Para indicar si buscamos archivos desde su fecha de creación o última modificación, hay que escribir en la siguiente línea “CreationDate” o “LastModified”.

("Select * From CIM_DataFile Where CreationDate < '" & strDate & "'")

En la misma línea podemos especificar en qué disco realizar la búsqueda, ya que tal como está, busca en todo el equipo. Por ejemplo para indicar solo el disco H:

("Select * From CIM_DataFile Where CreationDate < '" & strDate & "'" & " AND Drive = 'H:'")

Si en lugar de listar los archivos, queremos borrarlos debemos reemplazar .Name por .Delete en la siguiente línea.

Wscript.Echo objFile.Name

Tenemos la opción de agregar ambas líneas y así ver cuales archivos se están borrando.

Wscript.Echo objFile.Name
Wscript.Echo objFile.Delete

Hay que tener cuidado al utilizar la opción de borrar, pero debemos probar sin miedo cualquier otra combinación o modificación.

Para aprender mas...
Scripting Solutions for System Administration
Hey, Scripting Guy Page