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の非使用、サイズによるソート、合計の表示を追加。