簡単な方法

残念ながら、PowerShell の標準コマンドでは、一発でディレクトリのサイズを取得することができません。

もし、モジュールを使って問題なければ、PowerShell Gallery にディレクトリサイズを計算するモジュールがあるので、これを使うのが一番簡単です。

PowerShell Gallery | PSFolderSize

インストールしたら、Get-FolderSizeコマンドでサイズが取得できるので、パイプでつないでソートします。

Get-FolderSize | Sort-Object SizeMB -Descending

結果はこのようになります。

モジュール使用例
モジュール使用例

なお、ここでは降順でソートしていますが、昇順にしたい場合は「Sort-Object」の「-Descending」を削除してください。

標準コマンドでどうにかする

PowerShell の標準コマンドだけでディレクトリサイズを取得するためには、自前で各ディレクトリ毎にファイルサイズを集計する必要があります。

やや強引ですが、集計・ソート・表示を一行にまとめたものがこちらです。

Get-ChildItem -Directory | %{$size = (Get-ChildItem $_ -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum ; $_ | Add-Member Size $size ; $_} | Sort-Object Size -Descending | Format-Table Name,Size

結果はこのようになります。

標準コマンド使用例
標準コマンド使用例

簡単な説明

適度に改行と簡単な説明を入れたコードです。 ちなみにこちらもコピー&ペーストすれば、実行できます。

Get-ChildItem -Directory | 
  %{
    $size = (
      <# 各ディレクトリ毎に再帰的にファイルを取得する #>
      Get-ChildItem $_ -Recurse | 
      <# 取得したファイルの Length (サイズ)を合算 #>
      Measure-Object -Property Length -Sum -ErrorAction Stop
    ).Sum
    <# 合算したサイズを元のディレクトリオブジェクトに追加 #>
    $_ | Add-Member Size $size
    $_
  } | 
  <# 追加されたサイズで降順ソート #>
  Sort-Object Size -Descending | 
  <# ディレクトリ名とサイズを指定して表示 #>
  Format-Table Name,Size

参考