Seguro, que muchos de vosotros, en alguna ocasión habréis tenido que comprobar el tamaño que tienen cada una de las carpetas del árbol de carpetas de un servidor de ficheros.
Frecuentemente tenemos que realizar esta tarea, porque nos estamos quedando sin espacio en los discos de nuestro servidor de archivos y necesitamos hacer limpieza del árbol de carpetas, pero para facilitar el trabajo de vaciado primero tenemos que saber cuales son las carpetas que consumen más capacidad.
La manera más sencilla de poder comprobar el tamaño que tiene cada una de las carpetas que componen nuestro servidor de ficheros, es listar el árbol entero a un archivo de texto.
Frecuentemente tenemos que realizar esta tarea, porque nos estamos quedando sin espacio en los discos de nuestro servidor de archivos y necesitamos hacer limpieza del árbol de carpetas, pero para facilitar el trabajo de vaciado primero tenemos que saber cuales son las carpetas que consumen más capacidad.
La manera más sencilla de poder comprobar el tamaño que tiene cada una de las carpetas que componen nuestro servidor de ficheros, es listar el árbol entero a un archivo de texto.
Para realizar esta operación, usaremos la construcción del comando que mostramos a continuación. En él, sustituiremos la carpeta C:\DATOS\* por el nombre de nuestra carpeta del servidor de ficheros.
Terminada la ejecución, aparecerá por pantalla el listado de carpetas con sus tamaños.
Get-ChildItem -path "C:\datos\*" | Foreach {
$Files = Get-ChildItem $_.FullName -Recurse -File
$Size = '{0:N2}' -f (( $Files | Measure-Object -Property Length -Sum).Sum /1MB)
[PSCustomObject]@{Profile = $_.FullName ; TotalObjects = "$($Files.Count)" ; SizeMB = $Size}
}
Profile TotalObjects SizeMB
------- ------------ ------
"C:\datos\Carpeta Datos 01 64 4.965,21
"C:\datos\Carpeta Datos 02 9 1.036,36
"C:\datos\Carpeta Datos 03 9 1.036,36
"C:\datos\Carpeta Datos 04 8 12,36
Profile TotalObjects SizeMB
------- ------------ ------
"C:\datos\Carpeta Datos 01 64 4.965,21
"C:\datos\Carpeta Datos 02 9 1.036,36
"C:\datos\Carpeta Datos 03 9 1.036,36
"C:\datos\Carpeta Datos 04 8 12,36
Esto seria suficiente, si solo tenemos cuatro carpetas en nuestro servidor de ficheros, como ocurre en nuestro laboratorio de ejemplo. Pero como en la realidad no será así, lo mejor es listar el resultado de la ejecución anterior a un archivo de texto. Esto nos permitirá trabajar más cómodamente.
Para realizar esta operación, usaremos la construcción del comando que mostramos a continuación. En él, sustituiremos la carpeta C:\DATOS\* por el nombre de nuestra carpeta del servidor de ficheros y la ruta C:\folder-size\folder-size.csv por la ubicación donde deseamos almacenar el archivo de texto resultante de la operación.
Para realizar esta operación, usaremos la construcción del comando que mostramos a continuación. En él, sustituiremos la carpeta C:\DATOS\* por el nombre de nuestra carpeta del servidor de ficheros y la ruta C:\folder-size\folder-size.csv por la ubicación donde deseamos almacenar el archivo de texto resultante de la operación.
Get-ChildItem -path "C:\datos\*" | Foreach {
$Files = Get-ChildItem $_.FullName -Recurse -File
$Size = '{0:N2}' -f (( $Files | Measure-Object -Property Length -Sum).Sum /1MB)
[PSCustomObject]@{Profile = $_.FullName ; TotalObjects = "$($Files.Count)" ; SizeMB = $Size}
}| Export-CSV "C:\folder-size\folder-size.csv" -NoTypeInformation
Finalizada la ejecución del comando, encontraremos en la carpeta llamada folder-size de nuestro disco C:\, el archivo folder-size.csv. En su interior, tendremos nuestro listado de carpetas con sus tamaños.
Espero os sea de utilidad.
Me sirvió tu script, muchas gracias, le añadí "-recurse" a la primera línea para que me incluyese los subdirectorios, mi objetivo era sustituir a windirstat haciendolo via remota en mis equipos de la red.
ResponderEliminarAsí me quedó la primera línea
"(Get-ChildItem -path "C:\users\*" -recurse| Foreach {"
Saludos
Me alegro mucho Ángel Sánchez, Muchas gracias por compartir tu complemento. Seguro ayudará a mucha gente.
EliminarRecuerda que también tenemos un canal de Youtube al que puedes suscribirte si te interesan nuestros contenidos.
Un saludo
Puedo poner en vez de recursive que busque a x cantidad de niveles de subdirectorios?
ResponderEliminarClaro, pones -recurse -depth 2 (buscará 2 niveles)
Eliminarhola, muchas gracias por su scrip, queria haceter una consulta y es que como podria listar carpertas y subcarpertas con sus respectivos archivos, con la fecha de modificacion y su tamaño en GB.
ResponderEliminargracias por su colaboracion
Hola, quisiera preguntar algo. Como sería para que consultase en varias rutas el script y al final deje el resultado en el archivo .csv - agradezco tú respuesta.
ResponderEliminarLa forma más sencilla y rápida seria, ejecutar varias veces el script y anexar los archivos de texto resultantes, te dejo un enlace de como hacerlo:
Eliminarhttps://www.pantallazos.es/2019/04/windows-cmd-anexar-contenido-archivos-texto-copy.html
Recuerda que también tenemos un canal en YouTube dónde puedes encontrar más tutoriales de informática, un saludo.