Большинство пользователей Windows привыкли, что самый простой способ получить размер папки – открыть ее свойства в Проводнике Windows. Более опытные предпочитают использовать такие утилиты, как TreeSize или WinDirStat. Но, если вам нужно получить более детальную статистику по размеру папок в конкретном каталоге, или исключить определенные типы файлы, в этом случае лучше воспользоваться возможностями PowerShell. В этой статье мы покажем, как быстро получить размер определенного каталога на диске (или всех вложенных каталогов) с помощью PowerShell.
Совет. Для получения размера конкретной папки на диске также можно воспользоваться консольной утилитой du.exe.
Для получения размеров файлов и каталогов в PowerShell можно воспользоваться командами Get-ChildItem (алиас gci) и Measure-Object (алиас measure).
Первый командлет позволяет по указанным критериями сформировать список файлов в заданном каталоге, а второй выполняет арифметическое действие.
Совет. В одной из прошлых статей мы показывали как использовать командлет Get-ChildItem чтобы найти ТОП самых больших файлов на диске.
Например, чтобы получить размер папки c:\ps, выполните команду:
Get-ChildItem c:\iso | Measure-Object -Property Length -sum
Как вы видите, общий размер файлов в данном каталоге указан в поле Sum и составляет около 2 Гб (размер указан в байтах).
Чтобы преобразовать размер в более удобные Мб или Гб, используйте такую команду:
(gci c:\iso | measure Length -s).sum / 1Gb
Или:
(gci c:\iso | measure Length -s).sum / 1Mb
Для округлений результата до двух символов после запятой, выполните команду:
"{0:N2} GB" -f ((gci c:\iso | measure Length -s).sum / 1Gb)
Чтобы посчитать суммарный размер всех файлов определенного типа в каталоге используйте такую команду (к примеру, мы хотим получить общий размер ISO файлов в папке):
(gci c:\iso *.iso | measure Length -s).sum / 1Mb
Указанные выше команды позволяют получить только суммарный размер файлов в указанной директории. Если в папке содержаться вложенные каталоги, размер файлов в этих каталогах не будет учтен. Для получения общего размера всех файлов в каталоге с учетом вложенных директорий нужно использовать параметр –Recurse. Получим суммарный размер всех файлов в папке c:\Windows.
"{0:N2} GB" -f ((gci –force c:\Windows –Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Gb)
Чтобы учитывать размер скрытых и системных файлов я дополнительно указал аргумент –force.
Итак, размер каталога C:\Windows на нашем диске составляет около 16 Гб.
Совет. Чтобы не показывать ошибки доступа к каталогам используйте параметр -ErrorAction SilentlyContinue.
Можно получить размер всех вложенных папок первого уровня в указанном каталоге. Например, нам нужно получить размер всех профилей пользователей в папке C:\users.
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)
}
% — это алиас для цикла foreach-object.
Идем дальше. Допустим ваша задача – узнать размер каждого каталога в корне системного жесткого диска и представить информацию в удобной для анализа табличной форме с возможностью сортировки по размеру каталогов. Для этого воспользуемся командлетом Out-GridView.
Для получения информации о размере каталогов на диске C:\ выполните следующий 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 “Размер вложенных каталогов”
Как вы видите перед вами должно появиться графическое представление таблицы, в которой указаны все папки в корне системного диска C:\ и их размер. Щелкнув по заголовку столбца таблицы, вы можете отсортировать папки по размеру.