できたできた

今日はもう寝るので忘れないようにメモ - 気楽に諸々 が出来た><

dir 'C:\Program Files\' | % { $_ | Add-Member 'NoteProperty' 'TotalSize (MB)' $( $_ | dir -Recurse -Force | ? { !$_.PSIsContainer } | Measure-Object 'Length' -Sum | % { [int]($_.Sum / 1MB) } ) -PassThru } | sort 'TotalSize (MB)' -Descending | select 'Name', 'TotalSize (MB)' -First 5 | Format-Table -AutoSize


改行入れるとこんな感じ

dir 'C:\Program Files\' | 
    % {
        $_ | 
            Add-Member 'NoteProperty' 'TotalSize (MB)' $(
                $_ | 
                    dir -Recurse -Force | 
                    ? { !$_.PSIsContainer } | 
                    Measure-Object 'Length' -Sum | 
                    % { [int]($_.Sum / 1MB) }
            ) -PassThru
    } | 
    sort 'TotalSize (MB)' -Descending |
    select 'Name', 'TotalSize (MB)' -First 5 | 
    Format-Table -AutoSize


実行結果はこんな感じ

Name                        TotalSize (MB)
----                        --------------
Microsoft Visual Studio 9.0           2511
MSDN                                  2433
Microsoft SDKs                        1303
Microsoft Office                       752
Common Files                           522


# 追記
単位の変換を Format-Table でやるという手もあった!

dir 'C:\Program Files\' | 
    % {
        $_ | 
            Add-Member 'NoteProperty' 'TotalLength' $(
                $_ | 
                    dir -Recurse -Force | 
                    ? { !$_.PSIsContainer } | 
                    Measure-Object 'Length' -Sum | 
                    % { $_.Sum }
            ) -PassThru
    } | 
    sort 'TotalLength' -Descending |
    select -First 5 | 
    Format-Table 'Name', @{ 
        'Label' = 'TotalSize (MB)';
        'Expression' = { [int]($_.TotalLength / 1MB) };
    } -AutoSize