PowerShell でディレクトリサイズ一覧を取得する

Windows で「du -d1 -h|sort -nr」みたなことをしたかったのですが、PowerShellのよくある事例は再帰を使っていてパフォーマンス的に微妙だったので、FileSystemObjectを使っています。ただそのせいか、特殊フォルダ(Windowsフォルダ等)のサイズの取得に失敗します。

 

  •  2014-09-27 追記

モジュール化したので、$env:PSModulePath にファイル名と同じディレクトリを作っていれてやれば起動時に読み込んでくれます(PowerShell version 3.0以降?)。

  •  2023-02-25 追記

ファイル数とフォルダ数を取得するように修正。また、対象フォルダの指定と進捗表示機能を追加。実行時の表示は以下のようになります。フォルダのプロパティの全般タブの表示内容と一致するはず。

 

PS C:\> Get-DirectorySize C:\Windows\Microsoft.NET\

Name                     Size      SizeByte Files Folders
----                     ----      -------- ----- -------
assembly                   194.1M 203544778   717    1256
authman                      0.0B               0       0
DirectX for Managed Code    28.5M  29853934    36      10
Framework                  288.6M 302665756  1427      97
Framework64                317.1M 332502197  1411      90
  •  2023-02-27 追記

オプションでFSOの非使用、サイズによるソート、合計の表示を追加。