PowerShell: analizar uso de disco eficientemente en Windows


El Problema: “Calculando…”

Todos los administradores de sistemas Windows conocemos la frustración. El disco está lleno, necesitas liberar espacio urgente, y al intentar ver cuánto pesa una carpeta sospechosa, el Explorador de Archivos se queda en un eterno “Calculando…” mientras la barra verde avanza lentamente.

Hacer esto carpeta por carpeta para encontrar al culpable del consumo de disco no es viable en entornos productivos.

La Solución: Scripting

En lugar de depender de la interfaz gráfica, podemos utilizar PowerShell para “interrogar” al sistema de archivos. El siguiente script recorre un directorio base, suma el peso de todos los archivos internos y nos devuelve una lista limpia y ordenada.

El Código


$basePath = "C:\"

Get-ChildItem -Path $basePath -Directory | ForEach-Object {
    $folder = $_.FullName
    # -ErrorAction SilentlyContinue es clave para evitar frenos por permisos de sistema
    $files = Get-ChildItem -Path $folder -Recurse -File -ErrorAction SilentlyContinue
    
    # Calculamos la suma total de bytes
    $totalBytes = ($files | Measure-Object -Property Length -Sum).Sum
    
    # Convertimos a MB para lectura humana
    $totalMB = [math]::Round($totalBytes / 1MB, 2)

    [PSCustomObject]@{
        Carpeta  = $_.Name
        TamanoMB = $totalMB
    }
} | Sort-Object -Property TamanoMB -Descending}

La salida:

Análisis Técnico

La potencia de este script radica en la combinación de tres cmdlets:

  1. Get-ChildItem -Recurse: A diferencia de la GUI, que intenta pintar los archivos en pantalla, este comando simplemente lee la estructura. El parámetro -ErrorAction SilentlyContinue es vital aquí, ya que al escanear discos enteros (como C:\), inevitablemente chocaremos con carpetas protegidas del sistema (como System Volume Information). Sin este flag, el script se detendría por errores de acceso.
  2. Measure-Object -Sum: Es el encargado de realizar la aritmética pura, sumando la propiedad Length (tamaño) de cada archivo encontrado.
  3. PSCustomObject y Sort-Object: En lugar de escupir datos crudos, estructuramos la salida en una tabla personalizada y, lo más importante, ordenamos por TamanoMB de forma descendente. Esto pone a los mayores consumidores de espacio al principio de la lista instantáneamente.

Conclusión

Este enfoque nos permite pasar del “no sé por dónde empezar” a tener una lista accionable de directorios para limpiar o migrar en cuestión de minutos. La automatización no siempre se trata de tareas complejas; a veces, se trata simplemente de ver la información más rápido que con el mouse.