Коли система оповіщає вас про те, що на диску закінчується вільний простір, перше що робить адміністратор – намагається знайти все великі файли, які займають найбільше місця. Ви можете використовувати для пошуку великих файлів провідник Windows (є кілька зумовлених шаблонів пошуку за розміром), улюблений файловий менеджер або сторонні утиліти. Однак всі ці кошти, на відміну від PowerShell, вимагає установки на комп’ютері. Розглянемо приклад швидкого пошуку великих файлів на диску за допомогою PowerShell.

Для отримання списку файлів в певному каталозі (включаючи підпапки) і їх розмірів можна використовувати командлет Get-ChildItem. Командлет може шукати файли по всьому диску, або в певній папці (наприклад в призначених для користувача профілях або будь-яких інших папках).

Виведемо список 10 найбільших файлів на диску C: :

Get-ChildItem c: -r| sort -descending -property length | select -first 10 name, Length

Залежно від розміру диска і кількості файлів на ньому, виконання команди може зайняти деякий час.

ключ –R (Recurse) вказує, що необхідно рекурсивного обійти всі вкладені об’єкти (каталоги). Можна обмежити перевірку певним рівнем вкладеності за допомогою параметра –Глибина.

Якщо не вказувати шлях, пошук буде виконаний за всіма підкаталогам в поточному каталозі.

Get-ChildItem - пошук найбільших файлів на диску за допомогою powershell

Як ви бачите, ми отримали список з десяти найбільших файлів на диску, відсортоване в порядку зменшення розміру файлу.

Порада. При доступі до деяких каталогах навіть з правами адміністратора, командлет може повернути помилку доступу:

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 Немає доступу по шляху

Як ви бачите, розмір файлів відображається в байтах. Для зручності їх можна перетворити в мегабайти. Крім того, можна вивести каталог, в якому зберігається знайдений файл:

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

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.

Leave a Reply

Your email address will not be published. Required fields are marked *