Как найти большие файлы на диске с помощью PowerShell

Для поиска больших файлов на диске можно использовать проводник Windows одну из сторонних утилит (например, WinDirStat или TreeSize) или ваш любимый файловый менеджер. В некоторых случаях для быстрого поиска больших файлов на диске, удобнее использовать консоль PowerShell, т.к. не нужно ставить сторонние инструменты.

Например, чтобы вывести список 10 самых больших файлов на указанном диске, достаточно выполнить такую команду PowerShell:

Get-ChildItem -Path c: -Recurse –Force| sort -descending -property length | select -first 10 FullName, Length

Через некоторое время (в зависимости от размера диска и количества файлов), команда вернет список из 10 самых больших файлов, отсортированных в порядке уменьшения размера.

Для получения списка файлов в указанном каталоге используется командлет Get-ChildItem (или можно использовать один из псевдонимов/алиасов: ls , dir или gci ). В команде поиска больших файлов мы использовали следующие параметры:

  • -Path C: — путь к каталогу, с которого нужно начать поиск. Можно выполнить поиск файлов по всему диску или только в указанной папке (например, в профиле пользователя или сетевой папке). Если путь не указано, будет выполнен поиск в текущем каталоге. В параметре -Path через запятую можно указать сразу несколько папок или дисков в которых нужно выполнить поиск: -Path C:,G:,D:IS0
  • -Recurse – опция указывает, что нужно выполнить рекурсивный поиск во всех вложенных подкаталогах. Можно ограничить проверку определенным уровнем вложенности с помощью параметра –Depth .
  • -Force – ключ позволяет выполнять поиск пои скрытым и системным папкам (файлам), которые по умолчанию игнорируются.
  • Sort -descending -property length – отсортировать файлы по убыванию размера (свойство length)
  • Select FullName, Length – вывести полный путь к файлу и его размер
  • -first 10 – вывести только первые 10 файлов
Совет . При доступе к некоторым каталогам даже с правами администратора, командлет может вернуть ошибку доступа:

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

Чтобы подавить появление таких ошибок добавьте в команду Get-ChildItem параметр -ErrorAction SilentlyContinue .

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

Get-ChildItem c: -r -Force -ErrorAction SilentlyContinue |sort -descending -property length | select -first 10 name, DirectoryName, @{Name="GB";Expression={[Math]::round($_.length / 1GB, 2)}}

Полученный список больших файлов можно преобразовать в удобную графическую таблицу с помощью командлета Out-GridView :

Get-ChildItem c: -r -Force -ErrorAction SilentlyContinue |sort -descending -property length | select -first 10 name, DirectoryName, @{Name="GB";Expression={[Math]::round($_.length / 1GB, 2)}} | Out-GridView

Найти на диске все файлы, больше 10 Гб и экспортировать список в CSV файл :

GCi C: -Recurse -Force -ErrorAction SilentlyContinue | where-object {$_.length -gt 10GB} | Sort-Object length | ft fullname,length| Export-Csv c:pcLargeFiles_Report.csv

Опции Include и Exclude позволяют включить или исключить из выборки определенные типы файлов. Например, чтобы исключить из вывода файлы с расширениями SYS и VMDK:

Get-ChildItem G: -Exclude "*.sys","*.vmdk" -Recurse -Force -ErrorAction SilentlyContinue| sort -descending -property length | select -first 10 FullName, Length

Для выборки файлов по определенному шаблону можно использовать опцию -Filter . Например, -Filter "*image*" . Команда с Filter отрабатывает гораздо быстрее, т.к. результаты фильтруются непосредственно при получении данных.

Можно найти большие файлы на удаленном компьютере. Для этого можно обратиться к сетевой папке по UNC пути (допустимо обращаться к стандартным административным шарам C$,D$,.., на удаленном компьютере):

Get-ChildItem -Path \PC123C$ -Recurse |where-object {$_.length -gt 10GB} |sort -descending -property length | select -first 10 FullName, Length

Или получить список топ больших файлов на нескольких компьютерах с помощью командлете Invoke-Command :

$ComputerList = @( "server1", "server2")
Invoke-Command -ComputerName $ComputerList -ScriptBlock {gci -Path C: -r| sort -descending -property length | select -first 10 name, length}

admin

Share
Published by
admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

4 дня ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

4 дня ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

4 дня ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

4 дня ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

4 дня ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

4 дня ago