PowerShell: obtener tamaños de carpeta en disco en Windows

La mayoría de los usuarios de Windows saben que la forma más sencilla de comprobar el tamaño de una carpeta es abrir las propiedades de la carpeta en el Explorador de archivos. Los usuarios más experimentados prefieren utilizar herramientas de terceros como Tamaño del árbol o WinDirStat. Sin embargo, si desea obtener estadísticas más detalladas sobre el tamaño de las carpetas en el directorio específico o excluir ciertos tipos de archivos, es mejor que utilice las funciones de PowerShell. En este artículo, le mostraremos cómo obtener rápidamente el tamaño de la carpeta específica en el disco (y todas las subcarpetas) usando PowerShell.

Puedes usar el Get-ChildItem (gci alias) y Objeto de medida (measure alias) cmdlets para obtener los tamaños de archivos y carpetas (incluidas las subcarpetas) en PowerShell. El primer cmdlet le permite obtener la lista de archivos (con tamaños) en el directorio especificado de acuerdo con los criterios especificados, y el segundo realiza operaciones aritméticas.

Por ejemplo, para obtener el tamaño de la carpeta C: ISO, ejecute el siguiente comando:

Get-ChildItem C:ISO | Measure-Object -Property Length -sum

get-childrenitem - powershell - tamaño de carpeta

Como puede ver, el tamaño total de los archivos en este directorio se muestra en la Suma campo y es de aproximadamente 2,1 GB (el tamaño se da en bytes).

Para convertir el tamaño en un MB o GB más conveniente, use este comando:

(gci c:iso | measure Length -s).sum / 1Gb

O:

(gci c:iso | measure Length -s).sum / 1Mb

Para redondear el resultado a dos decimales, ejecute el siguiente comando:

"{0:N2} GB" -f ((gci c:iso | measure Length -s).sum / 1Gb)

PowerShell calcular el tamaño de las carpetas: gci y medir la suma

Puede usar PowerShell para calcular el tamaño total de todos los archivos de un determinado tipo en un directorio. Por ejemplo, desea obtener el tamaño total de todos los archivos ISO en una carpeta:

(gci c:iso *.iso | measure Length -s).sum / 1Mb

obtener el tamaño de la carpeta en MB usando powershell

Los comandos que se muestran arriba le permiten obtener solo el tamaño total de los archivos en el directorio especificado. Si hay subcarpetas en el directorio, no se calculará el tamaño de los archivos en las subcarpetas. Para obtener el tamaño total de los archivos en el directorio, incluidos los subdirectorios, utilice la –Recurse parámetro. Obtengamos el tamaño total de los archivos en el C: Windows carpeta:

"{0:N2} GB" -f ((gci –force c:Windows –Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Gb)

Para tener en cuenta el tamaño de los archivos ocultos y del sistema, he utilizado el -fuerza argumento también.

Entonces, el tamaño de C: Windows en mi disco local es de aproximadamente 40 GB (el script ignora la compresión NTFS).

Consejo. Para evitar errores de acceso al directorio (PermissionDenied -> DirUnauthorizedAccessError), use el -ErrorAction SilentlyContinue parámetro.

obtener el tamaño de la carpeta c: windows usando PowerShell

Este script calcula incorrectamente el tamaño de un directorio si contiene enlaces físicos o simbólicos. Por ejemplo, el C:Windows La carpeta contiene muchos vínculos físicos a los archivos de la carpeta WinSxS (Tienda de componentes de Windows). Como resultado, estos archivos se pueden contar varias veces. Para ignorar los enlaces físicos en los resultados, use el siguiente comando (tarda mucho en completarse):

"{0:N2} GB" -f ((gci –force C:windows –Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LinkType -notmatch "HardLink" }| measure Length -s).sum / 1Gb)

obtener el tamaño de la carpeta de Windows sin enlaces duros

Como puede ver, el tamaño real de la carpeta de Windows es un poco más pequeño.

Puede usar filtros para seleccionar los archivos a considerar al calcular el tamaño final. Por ejemplo, puede obtener el tamaño de los archivos creados en 2020:

(gci -force c:ps –Recurse -ErrorAction SilentlyContinue | ? {$_.CreationTime -gt ‘1/1/20’ -AND $_.CreationTime -lt ‘12/31/20’}| measure Length -s).sum / 1Gb

Puede obtener el tamaño de todas las subcarpetas de primer nivel en el directorio especificado. Por ejemplo, desea obtener el tamaño de todos los perfiles de usuario en la carpeta C: Usuarios.

gci -force 'C:Users'-ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
$_.fullname, '{0:N2} GB' -f ($len / 1Gb)
}

obtener el tamaño de los perfiles de usuario con powershell

% es un alias para el foreach-object círculo.

Continúemos. Supongamos que su tarea es encontrar el tamaño de cada directorio en la raíz del disco duro del sistema y presentar la información en la forma de tabla conveniente para su análisis y poder ser ordenada por el tamaño de la carpeta.

Para obtener información sobre el tamaño de los directorios en la unidad C: del sistema, ejecute el siguiente script de PowerShell:

$targetfolder="C:"
$dataColl = @()
gci -force $targetfolder -ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
$foldername = $_.fullname
$foldersize="{0:N2}" -f ($len / 1Gb)
$dataObject = New-Object PSObject
Add-Member -inputObject $dataObject -memberType NoteProperty -name “foldername” -value $foldername
Add-Member -inputObject $dataObject -memberType NoteProperty -name “foldersizeGb” -value $foldersize
$dataColl += $dataObject
}
$dataColl | Out-GridView -Title “Size of subdirectories”

obtener tamaños de carpeta en la unidad C: con elegante

Como puede ver, la vista gráfica de la tabla debería aparecer donde se muestran todas las carpetas en la raíz de la unidad del sistema C: y su tamaño (la tabla es generada por el Out-GridView cmdlet). Al hacer clic en el encabezado de la columna, puede ordenar las carpetas por tamaño. También puede exportar los resultados a CSV (| Export-Csv folder_size.csv) o en un archivo de Excel.

Si está usando la verificación del tamaño del directorio en sus scripts de PowerShell, puede crear una función separada:

function Get-FolderSize {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
$Path
)
if ( (Test-Path $Path) -and (Get-Item $Path).PSIsContainer ) {
$Measure = Get-ChildItem $Path -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
$Sum = '{0:N2}' -f ($Measure.Sum / 1Gb)
[PSCustomObject]@{
"Path" = $Path
"Size($Gb)" = $Sum
}
}
}

Para usar la función, simplemente ejecute el comando con la ruta de la carpeta como argumento:

Get-FolderSize ('C:PS')

función de powershell get-folderize

Puede usar su función local de PowerShell para verificar el tamaño de la carpeta en computadoras remotas a través de la Invoke-Command (PowerShell Remoting) cmdlet.

Invoke-Command -ComputerName hq-srv01 -ScriptBlock ${Function:Get-FolderSize} –ArgumentList 'C:PS'

función powershell obtener el tamaño de la carpeta en la computadora remota

Artículos Interesantes