Количество элементов и размеры в структуре папок - PullRequest
0 голосов
/ 05 ноября 2019

Подсчет и измерение содержимого папок

Попытка проверки скриптов на наличие больших папок в структуре каталогов.

Кажется, что мой тестовый скрипт точно работает только для папки верхнего уровня и только с двумя отдельными командами Get-ChildItem, одна для подсчета, а другая сумма.


$profiles = Get-ChildItem "C:\Users"

ForEach ($user in $profiles) {

<# getting the total number of items in the folder first #>
$itemsInfo1 = Get-ChildItem "C:\Users\$user" -Recurse -Force -ErrorAction SilentlyContinue 
$allitemsCount = $itemsInfo1.Count

<# getting the total size of all items in the folder second #>
$itemsInfo2 = Get-ChildItem "C:\Users\$user" -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue
$allitemsSize = $itemsInfo2.Sum

$itemsSizeMB = [System.Math]::Round((($allitemsSize)/1MB),2) 
$itemsSizeGB = [System.Math]::Round((($allitemsSize)/1GB),2) 

Write-Host $user,$allitemsCount" Items",$itemsSizeMB" MB", $itemsSizeGB" GB"

Я хотел просмотретьэтот скрипт в любой папке простым ручным перезаписыванием пути в переменных $ profile и $ itemsInfo.

Однако изменение соответствующих путей на одну подпапку нижнего уровня (например, $ profile = C: \ Users \ John) для просмотра списка подпапок оттуда возвращает размеры суммы как 0, счетчик работает нормально.

Также, вопреки моим ожиданиям, сценарий возвращает правильные значения только тогда, когда я использую две отдельные команды Get-ChildItem, так как свойства .Sum и .Count, возвращаемые двумя Get-ChildItem, различаются.

Первый метод Get-ChildItem (т. Е. $ ItemsInfo1), похоже, возвращает правильное количество элементов в папке, но неверную сумму размеров. Второй метод Get-ChildItem (т. Е. $ ItemsInfo2), похоже, возвращает неправильное количество элементов (только количество файлов, а не папок?) В папке, но правильную (er) сумму размеров.

Я использовал GUI> свойства папкиустановить, каким должен быть «правильный» счет и размер.

1 Ответ

0 голосов
/ 05 ноября 2019

Неправильная проблема подсчета связана с отсутствием скрытых файлов. Т.е. первый командлет Get-ChildItem не включал -Force.

Изменение первой строки на $profiles = Get-ChildItem "C:\Users" -Force решило проблему для меня.

Чтобы получить счетчик всех элементов, а затем сумму всех элементов с «длиной», необходимы два отдельных (по одному для каждой переменной) командлета Get-ChildItem, поскольку каждый из них учитывает только уникальные точные совпадения для указанных свойств.

...