Визначаємо розмір директорії за допомогою PowerShell.
Визначити розмір директорії в Windows досить просто. Однак, якщо потрібно зробити це за допомогою PowerShell, то з цим можуть виникнути деякі труднощі.
Для прикладу виведемо властивості директорії за допомогою командлета Get-Item:
Get-Item C: \ Files
Команда Get-Item повертає основні властивості об'єкта, такі як його тип, ім'я, час модифікацій та розмір.Однак у випадку з Директорією розмір (length) завжди залишається порожнім.
Це не помилка, просто PowerShell не вміє безпосередньо визначати розмір директорії. Однак він вміє визначати розмір окремих файлів, тому ми можемо обчислити розмір директорії, підсумувавши все знаходяться в ній файли.Для цього можна скористатися такою командою:
Get-Item C: \ Files \ * | measure -Property length -Sum;
або такий (що одне і те ж):
Get-ChildItem C: \ Files | measure -Property length -Sum;
В поле Sum ми бачимо загальний розмір всіх файлів в папці, що по ідеї і є її розміром.
Для краси переведемо розмір з байт в мегабайти і відформатуємо висновок за допомогою оператора форматування (-f):
$ FolderSize = Get-ChildItem C : \ Files | measure -Property length -Sum;
"{0: N2}" -f $ ($ FolderSize.Sum/1MB) + "MB";
В результаті отримуємо розмір директорії 9.32MB. Для перевірки відкриємо властивості папки в провіднику і порівняємо отриманий результат з її реальним розміром. Як бачите, дані не збігаються, реальний розмір директорії становить 120MB.
Причина помилки проста - ми порахували тільки розмір файлів, що знаходяться безпосередньо в корені, але не врахували піддиректорії.Щоб порахувати розмір файлів у всіх піддиректоріях, необхідно запускати командлет Get-ChildItem з ключем -Recurse:
$ FolderSize = Get-ChildItem C: \ Files -Recurse | measure -Property length -Sum;
"{0: N2}" -f $ ($ FolderSize.Sum/1MB) + "MB";
Ось тепер ми отримуємо правильний розмір директорії.
Ну і якщо потрібно вивести докладні дані за розміром директорії і всіх піддиректорій, то можна скористатися наступним скриптом :
# Вводимо ім'я директорії
$ MainFolder = Read-Host "Enter folder name";
# Визначаємо загальний розмір директорії
$ MainFolderFullSize = (Get- ChildItem $ MainFolder -Recurse | Measure-Object -property length -sum);
$ MainFolder + "(total)" + "-" + "{0: N2}" -f ($ MainFolderFullSize.sum/1MB) + "MB";
# Визначаємо розмір файлів в кореневій директорії
$ MainFolderFileSize = (Get-ChildItem $ MainFolder | Measure-Object -property length -sum);
$ MainFolder + "-" + "{0: N2}" -f ($ MainFolderFileSize.sum/1MB) + "MB";
# Визначаємо розмір всіх піддиректорій
$ SubFolders = Get-ChildItem $ MainFolder -Recurse | where {$ _. PSIsContainer -eq $ true} | Sort-Object;
foreach ($ folder in $ subfolders) {
$ SubFolderSize = Get-ChildItem $ folder.FullName | measure -Property length -Sum;
$ folder.FullName + "-" + "{0: N2}" -f ($ SubFolderSize.Sum/1MB) + "MB";
}
Таким от нехитрим