Гид по технологиям

Как узнать размер папки в Windows с помощью PowerShell

6 min read Windows PowerShell Обновлено 27 Apr 2026
Размер папки в Windows через PowerShell
Размер папки в Windows через PowerShell

Папки ярких цветов на столе

Почему PowerShell лучше, чем Проводник в некоторых случаях

PowerShell выполняет подсчёт программно и может масштабироваться на несколько машин. Он быстрее при автоматизации, фильтрации по маске или дате и удобен для массовых отчётов. Проводник хорош для одиночных проверок, но медлен при больших объёмах и не позволяет гибко фильтровать результаты.

Важно: для некоторых команд нужны права администратора, чтобы получить доступ к системным и скрытым файлам.

Основные команды и принципы

Определения в одну строку:

  • Get-ChildItem (gci) — перечисляет файлы и папки в указанном каталоге.
  • Measure-Object (measure) — суммирует выбранное числовое свойство (например, Length).
  • Length — свойство, показывающее размер файла в байтах.

Базовый шаблон команды:

Get-ChildItem FolderPath | Measure-Object -Property Length -Sum

Пример: если нужно посчитать размер папки E:\Download, выполните:

Get-ChildItem E:\Download | Measure-Object -Property Length -Sum

Результат покажет количество элементов и суммарный размер в байтах. Чтобы получить удобочитаемые единицы, делите на 1024 (КБ), 1024² (МБ) или 1024³ (ГБ). В PowerShell есть сокращения 1KB, 1MB, 1GB и также 1Kb/1Mb/1Gb (учтите регистр и версию PowerShell). Пример вывода в гигабайтах:

(gci E:\Download | measure Length -s).Sum / 1GB

Если вы хотите точную конвертацию в десятичных единицах (миллионы/миллиарды), делите на 1e6 или 1e9 соответственно.

Подсчёт с учётом подкаталогов и скрытых файлов

Чтобы учесть все уровни вложенности и скрытые файлы, добавьте параметры -Recurse и -Force. Также полезен параметр -ErrorAction SilentlyContinue, чтобы игнорировать ошибки доступа:

((gci -Force C:\Users -Recurse -ErrorAction SilentlyContinue | measure Length -s).Sum / 1GB)

Пояснение: команда сначала собирает все файлы из C:\Users, затем измеряет сумму Length и делит на 1GB для удобного отображения.

Примечание: в больших каталогах рекурсивный сбор может занять время и потребовать много памяти. В таких случаях используйте фильтры по маске, по типу файлов или по срокам изменения.

Фильтрация по типу файлов и по шаблону

Чтобы посчитать только файлы с заданным расширением, используйте маску в Get-ChildItem:

(gci E:\Download *.jpg | measure Length -s).Sum / 1MB

Это покажет суммарный объём JPG-файлов в папке E:\Download. Для нескольких расширений применяйте несколько вызовов или фильтруйте через Where-Object.

Отдельный размер каждого подкаталога в таблице

Чтобы получить список подкаталогов с их размерами и отобразить в графическом виде, можно запустить скрипт в PowerShell ISE или PowerShell с окном Out-GridView:

$targetfolder = 'C:\'
$dataColl = Get-ChildItem -Force $targetfolder -Directory -ErrorAction SilentlyContinue | ForEach-Object {
   $len = Get-ChildItem -Recurse -Force $_.FullName -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum | Select-Object -ExpandProperty Sum
   $foldername = $_.FullName
   $foldersize = '{0:N2} GB' -f ($len / 1GB)
   [PSCustomObject]@{
       foldername = $foldername
       foldersizeGb = $foldersize
   }
}
$dataColl | Out-GridView -Title "Size of Subdirectories in $targetfolder"

Запустите скрипт в PowerShell ISE (Запуск — F5). Вы получите интерактивное окно с таблицей подкаталогов и их размером.

Скрипт PowerShell ISE для просмотра размера папок

Быстрая функция для повторного использования

Ниже — компактная функция, которую можно положить в ваш profile.ps1 и вызывать из любой сессии PowerShell:

function Get-FolderSize {
  param(
    [Parameter(Mandatory=$true)][string]$Path,
    [switch]$Recurse,
    [string]$Unit = 'GB'
  )
  $gciParams = @{Path=$Path; ErrorAction='SilentlyContinue'}
  if ($Recurse) { $gciParams.Add('Recurse',$true) }
  $files = Get-ChildItem @gciParams -File -Force
  $sum = ($files | Measure-Object -Property Length -Sum).Sum
  switch ($Unit.ToUpper()) {
    'KB' { $sum / 1KB }
    'MB' { $sum / 1MB }
    default { $sum / 1GB }
  }
}

# Пример вызова:
Get-FolderSize -Path 'E:\Download' -Recurse -Unit GB

Эта функция возвращает число в указанной единице и игнорирует ошибки доступа.

Чек-лист для разных ролей

Администратор:

  • Запустить PowerShell от имени администратора.
  • Использовать -Force и -ErrorAction SilentlyContinue.
  • Для массовых отчётов применять Invoke-Command или PowerShell Remoting с экспортом в CSV.
  • Проверять использование памяти при рекурсивных обходах.

Обычный пользователь:

  • Запустить PowerShell без админа для своих папок.
  • Использовать фильтры (.mp4, .pst и т.д.) чтобы быстро найти крупные файлы.
  • При сомнениях сделайте резервную копию перед удалением.

Операционный аналитик:

  • Собрать результаты в CSV: $dataColl | Export-Csv -Path sizes.csv -NoTypeInformation.
  • Визуализировать в Excel или в графическом инструменте.

Сравнение подходов (когда PowerShell не лучший выбор)

Когда PowerShell хорош:

  • Автоматизация сканирования множества компьютеров.
  • Фильтрация по типам/датам, массовая обработка.

Когда лучше GUI-утилиты:

  • Требуется визуализация дерева диска (treemap), быстрая интерактивная фильтрация.
  • Пользователь предпочитает готовые отчёты и графики.

Популярные GUI-утилиты: WinDirStat, TreeSize, SpaceSniffer. Они дают визуальный обзор и удобны для одиночного ПК.

Диагностика и отладка

Если команда возвращает меньше ожидаемого:

  • Убедитесь, что запускаете команду с достаточными правами.
  • Проверьте, не игнорируются ли файлы системой (снимок, открытые файлы). Для VSS/бэкап-файлов может потребоваться особый доступ.
  • Проверьте совпадает ли формат дат, если вы фильтруете по CreationTime или LastWriteTime.

Если команда долго выполняется:

  • Фильтруйте по маске (например, *.mp4) и запускайте по частям.
  • Используйте параллельную обработку (Start-Job, ForEach-Object -Parallel в PowerShell 7+) для больших каталогов.

Масс-сканирование на несколько хостов (мини-методология)

  1. Подготовьте список хостов в файле hosts.txt.
  2. Включите PowerShell Remoting на целевых машинах (Enable-PSRemoting) и настройте доверие/межсетевые правила.
  3. Запустите Invoke-Command с блоком скрипта, собирающего размеры, и сохраняйте результаты в CSV:
$hosts = Get-Content .\hosts.txt
Invoke-Command -ComputerName $hosts -ScriptBlock {
  (gci C:\Users -Recurse -Force -ErrorAction SilentlyContinue | measure Length -s).Sum / 1GB
} | Export-Csv sizes-by-host.csv -NoTypeInformation
  1. Анализируйте CSV в централизованном инструменте.

Справочник команд — Чит‑шит

  • Сумма байт в текущей папке: (gci | measure Length -s).Sum
  • В ГБ: (gci | measure Length -s).Sum / 1GB
  • Только по маске (.pst): (gci -Recurse .pst | measure Length -s).Sum / 1GB
  • Подкаталоги с размером (таблица): смотрите функцию Get-FolderSize или предыдущий пример с ForEach-Object.

Потенциальные подводные камни и когда это может не сработать

  • Системные файлы и открытые файлы: доступ может быть ограничен, и вы увидите неполные данные.
  • Сетевые диски: производительность зависит от сети; при плохом соединении сканирование займёт много времени.
  • Версии PowerShell: синтаксис и сокращения единиц (1MB/1Mb) могут не совпадать между Windows PowerShell и PowerShell 7+. Тестируйте на целевой версии.

Диаграмма принятия решения

flowchart TD
  A[Нужен быстрый подсчёт] --> B{Один ПК или много}
  B -->|Один ПК| C[Использовать PowerShell локально]
  B -->|Много ПК| D[Использовать PowerShell Remoting]
  C --> E{Требуется графика}
  E -->|Да| F[Использовать GUI-утилиту 'WinDirStat']
  E -->|Нет| G[Get-ChildItem + Measure-Object]
  D --> H{Нужна периодичность}
  H -->|Да| I[Автоматизировать через task scheduler/CI]
  H -->|Нет| J[Одноразовый скрипт Invoke-Command]

Часто задаваемые вопросы

Как перевести байты в мегабайты и гигабайты?

Разделите байты на 1024 для КБ, на 1024^2 для МБ и на 1024^3 для ГБ. В PowerShell можно использовать 1KB, 1MB, 1GB: (Sum / 1GB).

Нужно ли запускать PowerShell от имени администратора?

Не обязательно для личных папок. Для системных директорий и доступа к другим пользователям обычно требуются повышенные права.

Можно ли автоматически удалять большие файлы после поиска?

Да, но делать это нужно осторожно. Сначала экспортируйте список в CSV, проверьте его, затем примените Remove-Item с явной проверкой.

Как учитывать только файлы, созданные в определённый период?

Фильтруйте через Where-Object по свойствам CreationTime или LastWriteTime. Пример:

(gci -Force E:\Download -Recurse -ErrorAction SilentlyContinue | ? {$_.CreationTime -gt '06/01/2023' -and $_.CreationTime -lt '07/01/2023'} | measure Length -s).Sum / 1GB

Обратите внимание на формат даты — он должен соответствовать локали системы.

Заключение

PowerShell — надёжный инструмент для подсчёта размеров папок, фильтрации по типам файлов и автоматизации отчётов. Для разовых визуальных проверок подойдут GUI-утилиты. Администраторам удобно масштабировать решение с помощью Remoting и экспорта в CSV. Храните полезные функции в profile.ps1 и используйте чек-листы выше для безопасной и быстрой работы.

Важно: перед удалением больших файлов всегда делайте резервную копию и проверяйте список файлов вручную.

Краткая выжимка

  • PowerShell быстрее и гибче Проводника для автоматизации и массовых проверок.
  • Используйте Get-ChildItem + Measure-Object; добавляйте -Recurse и -Force для полного охвата.
  • Храните повторно используемые функции и экспортируйте результаты в CSV для анализа.

Часто используемые ресурсы и команды

  • Enable-PSRemoting — включить удалённое выполнение команд.
  • Invoke-Command — запуск команд на удалённых хостах.
  • Export-Csv — сохранить результаты для дальнейшего анализа.

Командлет PowerShell для просмотра размера папки в байтах

Командлет PowerShell для просмотра размера папки в МБ и ГБ

Командлет PowerShell для просмотра размера папки по типу файлов

Командлет PowerShell для просмотра размера папки и подкаталогов

Пуск PowerShell ISE в меню

FAQ для администраторов

Q: Есть ли риск повлиять на систему при рекурсивном обходе больших каталогов? A: Риск минимален, если вы не изменяете файлы. Главное — следить за потреблением памяти и временем выполнения. При необходимости разбивайте задачу на части.

Q: Как быстро найти «тяжёлые» папки для очистки? A: Сканируйте верхний уровень диска, получите размеры подкаталогов и сортируйте по убыванию. Затем спускайтесь в самые крупные ветви.


Конец статьи.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Jamboard в Google Meet: пошаговое руководство
Совещания

Jamboard в Google Meet: пошаговое руководство

Octolapse — таймлапсы 3D-печати: настройка
3D-печать

Octolapse — таймлапсы 3D-печати: настройка

Как полностью удалить программы в Windows
Windows

Как полностью удалить программы в Windows

Массово повернуть фото на iPhone
Фото

Массово повернуть фото на iPhone

Как обновить Nintendo Switch
Гайды

Как обновить Nintendo Switch

Клонирование Windows 10: Macrium Reflect — руководство
Руководства

Клонирование Windows 10: Macrium Reflect — руководство