2015/05/13

PowerShell を使ってファイル サイズが大きいデータを抽出してみる

ファイル サーバーの空き容量が少な・・・いや、もうない!という時、真っ先に「データ サイズが大きいファイル」を確認し退避、または削除されると思います。
フリー ツール等でチェックする方法もありますが、如何せん会社から許可がでない場合があるかと。
今回は、PowerShell を使って(Windows Server 2012 R2 Essentials等)ファイル サーバーに格納されたデータのうち、特に大きいデータ サイズを抽出するスクリプトなどをメモ。
尚、サンプル スクリプトはファイル サーバー上で実行し、出力結果の整形は行っていません。

2015.05.14 修正
スクリプトの一部にソートが含まれていなかったので修正しました

データ サイズの大きいファイルを上位10個抽出する

Get-ChildItem -Path <Drive Name or Folder Name> -Recurse | Sort-Object length -Descending | Select-Object -First 10
このスクリプトは、
  1. 対象のドライブorフォルダーのファイルを再帰的に呼び出す
  2. データ サイズの大きいものに並べ替える
  3. 上位10件を選択する
スクリプトです。

指定したサイズより大きいファイルを抽出する

Get-ChildItem -Path <Drive Name or Folder Name> -Recurse | Where-Object{$_.Length -gt 30GB } | Sort-Object length -Descending | Select-Object -First 10
先ほどのスクリプトとほぼ同じです。
  1. 対象のドライブorフォルダーのファイルを再帰的に呼び出す
  2. 指定したサイズ(今回は30GB)以上を抽出
  3. データ サイズの大きいものに並べ替える
  4. 上位10件を選択する
スクリプトです。
尚、指定したサイズより大きいファイルを全て表示させたい!という場合は、
Get-ChildItem -Path <Drive Name or Folder Name> -Recurse | Where-Object{$_.Length -gt 30GB }
になります。
※Sort-Object コマンドレットの前にあるパイプから最後までを削除するだけです
余談:共有フォルダーを指定することも可能
ファイル サーバーの共有フォルダーを直接除く事も可能でした。
Get-ChildItem -Path \\<ServerName or IPAdress>\<SharedFolder Name> -Recurse | Where-Object{$_.Length -gt 3GB } | Sort-Object length -Descending | Select-Object -First 10
余談:状態レポートと記憶域レポート
Windows Server 2012 R2 Essentialsには「状態レポート」と呼ばれる機能があります。
システム全体の状態を登録したメールアドレスへ送信してくれるため、ディスク サイズの空き容量が逐次把握できます。
Windows Server 2012 R2 Essentials 状態レポートからシステム状況を読み取ろう
また、Windows Serverには「記憶域レポートと呼ばれる機能もあり、こちらを有効にしておくと何かと便利です。
Windows Server 2008R2の記憶域レポートを使ってストレージの使用状況を調査してみる
スポンサーリンク

スポンサーリンク