Comprobar archivos usando MD5 y PowerShell

Hace un tiempo tuve un requerimiento para resolver una situaci贸n particular: Comprobar archivos diariamente a modo de identificar si tuvo cambios o no durante el d铆a. Siempre que escucho este tipo de solicitudes pienso casi que naturalmente en PowerShell, no se me pasa por la cabeza contemplar otra herramienta. Por ello es escribo esta entrada, para hablar de MD5 y PowerShell.

Introducci贸n a MD5

Obviamente que antes de comenzar a escribir nuestro script vamos a hacer una peque帽a introducci贸n a MD5. MD5 es un algoritmo que proporciona un c贸digo. Este c贸digo est谩 asociado a un archivo o un texto concreto. De esta forma, a la hora de descargar un archivo en particular el c贸digo generado por el algoritmo, tambi茅n llamado hash, viene 鈥渦nido鈥 al archivo en cuesti贸n.

Un ejemplo de uso es el mundo de las descargas de software; para comprobar que el archivo no ha sido alterado, los desarrolladores (en la mayor铆a de los casos) adjuntan los c贸digos de los archivos para que las personas puedan comprobar que el archivo no fue alterado.

MD5 y PowerShell

En PowerShell tenemos una cmdlet que nos permite obtener el hash y se llama Get-FileHash.Para utilizarla basta con ejecutarla indicando el nombre del archivo y el tipo de algoritmo, por ejemplo:

Get-FileHash -Path C:\File.txt -Algorithm MD5

MD5 y PowerShell

Resta seguir resolviendo nuestro problema y para ello es necesario comprobar que al modificar el archivo se haya modificado el HASH. Es as铆 que vamos a modificar nuestro archivo de texto y comprobar con el resultado anterior, el nuevo valor. Todo esto lo vamos a hacer desde la consola, de la siguiente manera:

$oldHash = (Get-FileHash C:\File.txt -Algorithm MD5).Hash
$oldHash
echo Hola! > C:\File.txt
$newHash = (Get-FileHash C:\File.txt -Algorithm MD5).Hash
$newHash
if ($oldHash -ne $newHash) {Write-Host "Cambiaron!!" -ForegroundColor Cyan}

Get-FileHash

Y ah铆 vemos el cambio del valor! Por ahora todo resulta seg煤n lo planeado. Ahora tenemos que agarrar lo que hemos aprendido y armar un script.

Reuniendo todo

Lo primero que tenemos que hacer es generar un archivo auxiliar para poder guardar los valores que necesitamos comparar luego. El archivo va a funcionar como una base de datos. Posteriormente debemos ejecutar la comprobaci贸n de los archivos a auditar, para luego ir revisando cada valor correspondiente a cada archivo, si tuvo alguna modificaci贸n o no. Luego de esta comprobaci贸n, es necesario que se genere una base auxiliar (por ejemplo un array) para poder enviar esa informaci贸n por mail.

Adjunto el script completo, con comentarios para dejar en claro cada acci贸n:

Happy scripting!

Comments