Показать структуру каталогов с размером в Powershell

Попытка получить команду "dir", которая отображает размер вложенных папок и файлов. Погуглив "размер директории powershell", я нашел две полезные ссылки

Определение размера папкиhttp://technet.microsoft.com/en-us/library/ff730945.aspxСкрипт PowerShell для получения общего размера каталогаСкрипт PowerShell для получения общего размера каталога

Эти идеи очень хороши, но я ищу что-то, похожее на вывод dir, удобный и простой, и который я могу использовать в любом месте структуры папок.

Итак, я закончил этим, любые предложения, чтобы сделать его простым, элегантным, эффективным.

Get-ChildItem | 
Format-Table  -AutoSize Mode, LastWriteTime, Name,
     @{ Label="Length"; alignment="Left";
       Expression={ 
                    if($_.PSIsContainer -eq $True) 
                        {(New-Object -com  Scripting.FileSystemObject).GetFolder( $_.FullName).Size}  
                    else 
                        {$_.Length} 
                  }
     };  

Спасибо.

Ответы на вопрос(1)

Решение Вопроса

Первым второстепенным модом было бы избежать создания нового FileSystemObject для каждого каталога. Сделайте это функцией и вытяните новый объект из конвейера.

function DirWithSize($path=$pwd)
{
    $fso = New-Object -com  Scripting.FileSystemObject
    Get-ChildItem | Format-Table  -AutoSize Mode, LastWriteTime, Name, 
                    @{ Label="Length"; alignment="Left"; Expression={  
                         if($_.PSIsContainer)  
                             {$fso.GetFolder( $_.FullName).Size}   
                         else  
                             {$_.Length}  
                         } 
                     }
}

Если вы хотите вообще избежать COM, вы можете рассчитать размеры директорий, используя только PowerShell:

function DirWithSize($path=$pwd)
{
    Get-ChildItem $path | 
        Foreach {if (!$_.PSIsContainer) {$_} `
                 else {
                     $size=0; `
                     Get-ChildItem $_ -r | Foreach {$size += $_.Length}; `
                     Add-Member NoteProperty Length $size -Inp $_ -PassThru `
                 }} |
        Format-Table Mode, LastWriteTime, Name, Length -Auto
}
 wmorrison36512 июн. 2017 г., 11:13
Вернуться снова! :-)
 wmorrison36514 мар. 2013 г., 12:48
@Keith Hill: +1 и если бы я мог поднять это дважды, я бы ... Я пытаюсь очистить мой HD, так как моя vmware умирает, и хочу легко увидеть, куда идет дисковое пространство. Это реальная помощь!
 iraSenthil07 окт. 2010 г., 02:43
Спасибо, Кит, я закончил тем, что поместил эту функцию в файл профиля, так что я могу получить к ней доступ, когда использую PS.

Ваш ответ на вопрос