Как вывести суммарный размер типа файла?

Скрипт должен вывести 10 самых больших типов файлов по расширению, сортированный по убыванию суммарного размера. Так же он принимает 2 параметра, 1й на директорию поиска, 2й на вывод файла.

Скрипт:
# Присваивание имени выводимому файлу 
$args[1] += "\hard_mem_use.txt"
# Получаем список путей всех файлов, начиная с пути $args[0]
Get-ChildItem $args[0] -r|`
WHERE { -NOT $_.PSIsContainer } |`
Group Extension  -NoElement |`
# Сортировка по убыванию размера файла, разрешая использование нескольких значений 
Sort-Object -descending -property length  |`
# Фильтруем вывод информации, первые 10 имён и их вес в Мб. 
Select-Object -first 10 name, @{Name="Mb";Expression={[Math]::round($_.length / 1MB, 2)}}|`
# Вывод файла по пути $args[1]
Out-File -FilePath $args[1]

notepad.exe $args[1]


В данный момент он не показывает суммарный размер:

Name     Mb
----     --
.exe      0
.zip      0
.docx     0
.log      0
.txt      0
.torrent  0
.sys      0
.rtf      0
.ini      0
.lng      0


Можете подсказать где я ошибся или может я что то забыл?
  • Вопрос задан
  • 164 просмотра
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
Потому что sort-object нечего сортировать. Вы перед этим сгруппировали по расширению. И снаружи у вас теперь объекты у кторых два свойства - count, name. если б не -noelement был бы еще group. А вы пытаетесь что-то делать с length.
вам надо оставить свойство Group и просуммировать Length по нему

p.s. обратная кавычка после "трубы" не нужна, PS и так после неё позволяет строку переносить
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@alhaos
param(
    $directoryName = "c:\windows",
    $outFileName = "d:\tmp\out.csv"
)

Get-ChildItem $directoryName -File | Group-Object {$_.Extension} | ForEach-Object {
    [PSCustomObject]@{
        Name = $_.Name
        Sum = ($_.Group.Length | Measure-Object -Sum).Sum
    }
} | Sort-Object -Property "Sum" -Descending | Tee-Object -Variable "list" | Export-Csv $outFileName

$list
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы