Как найти большие файлы на диске с помощью PowerShell
Когда система оповещает вас о том, что на диске заканчивается свободное пространство, первое что делает администратор – пытается найти все большие файлы, которые занимают больше всего места. Вы можете использовать для поиска больших файлов проводник Windows (есть несколько предопределённых шаблонов поиска по размеру), любимый файловый менеджер или сторонние утилиты. Однако все эти средства, в отличии от PowerShell, требует установки на компьютере. Рассмотрим пример быстрого поиска больших файлов на диске с помощью PowerShell.
Для получения списка файлов в определенном каталоге (включая подпапки) и их размеров можно использовать командлет Get-ChildItem. Командлет может искать файлы по всему диску, или в определенной папке (например в пользовательских профилях или любых других папках).
Выведем список 10 самых больших файлов на диске C::
Get-ChildItem c: -r| sort -descending -property length | select -first 10 name, Length
В зависимости от размера диска и количества файлов на нем, выполнение команды может занять некоторое время.
Если не указывать путь, поиск будет выполнен по всем подкаталогам в текущем каталоге.
Как вы видите, мы получили список из десяти самых больших файлов на диске, отсортированный в порядке уменьшения размера файла.
Get-ChildItem : Отказано в доступе по пути "C:WindowsCSC".
строка:1 знак:1
+ Get-ChildItem c: -r|sort -descending -property length | select -firs ...
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:WindowsCSC:String) [Get-ChildItem], UnauthorizedAccessException
+ FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand
Чтобы подавить появление таких ошибок используйтей параметр -ErrorAction SilentlyContinue.
Как вы видите, размер файлов отображается в байтах. Для удобства их можно преобразовать в мегабайты. Кроме того, можно вывести каталог, в котором хранится найденный файл:
Get-ChildItem c: -r -ErrorAction SilentlyContinue |sort -descending -property length | select -first 10 name, DirectoryName, @{Name="Мб";Expression={[Math]::round($_.length / 1MB, 2)}}
Полученную табличку можно преобразовать в удобную графическую форму с помощью командлета Out-GridView:
Get-ChildItem c: -r|sort -descending -property length | select -first 10 name, DirectoryName, @{Name="Мб";Expression={[Math]::round($_.length / 1MB, 2)}} | Out-GridView
Аналогичным образом вы можете найти все файлы, размер которых больше определенного значения, например, 200 Мб):
$size=200*1024*1024
GCi C: -recurse -ErrorAction SilentlyContinue | where-object {$_.length -gt $size} | Sort-Object length | ft fullname
Список файлов можно выгрузить в CSV файл так:
GCi C: -recurse | where-object {$_.length -gt $size} | Sort-Object length | ft fullname | Export-Csv c:pcLargeFiles_Report.csv
Если нужно посчитать размер всех файлов в каталоге, воспользуйтесь статьей: Как определить размер директории с помощью PowerShell.
Qiziqarli malumotlar
Как найти большие файлы на диске с помощью PowerShell