Получайте рекурсивные файлы с размерами в PowerShell - PullRequest
0 голосов
/ 28 октября 2019

У меня есть

$postpst = ls $home_user\post | Measure-Object length -Sum | % {
        New-Object psobject -prop @{
            Name = "$home_user\post"
            Groesse = $(
                switch ($_.sum) {
                    { $_ -gt 1gb } { '{0:N2}GB' -f ($_ / 1gb); break }
                    { $_ -gt 1mb } { '{0:N2}MB' -f ($_ / 1mb); break }
                    { $_ -gt 1kb } { '{0:N2}KB' -f ($_ / 1Kb); break }
                    default { '{0}B ' -f $_ } 
                }
            )
        }
     }
$postpst

Он показывает только один файл на пользователя в папке dir, но не 2 или более. Как я могу получить все?

Я также пытался:

$postpst = ls $home_user\post | Select-Object Name, @{Name="MegaBytes";Expression= {$_.Length / 1MB}}
$postpst

Здесь я не могу отформатировать до нуля.

Мой конечный результат должен быть рекурсивный список файлов вuser home dir с размерами в поисках определенного расширения (здесь pst файлы).

Вот мой код без размеров:

$pst= Get-ChildItem -Path $home_user -Filter *.pst -Recurse -File| Sort-Object Length -Descending | ForEach-Object{ $_.FullName}

Я посетил:

Как рекурсивно извлечь любые файлы с определенными расширениями в PowerShell?

1 Ответ

4 голосов
/ 28 октября 2019

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

Get-ChildItem -Filter *.pst -Path  $home_user |
Sort-Object Length -Descending  |
Select-Object FullName, @{name='Size';expression={
  switch ($_.length) {
    { $_ -gt 1gb } { '{0:N2}GB' -f ($_ / 1gb); break }
    { $_ -gt 1mb } { '{0:N2}MB' -f ($_ / 1mb); break }
    { $_ -gt 1kb } { '{0:N2}KB' -f ($_ / 1Kb); break }
    default { '{0}B ' -f $_ }
  }
}}
...