Як дізнатися розмір папок на диску за допомогою PowerShell

Більшість користувачів 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: \ і їх розмір. Клацнувши по заголовку стовпця таблиці, ви можете впорядкувати папки за розміром.