PowerShell を使用してコンピューター上の大きなファイルを検索する方法

ディスク容量を圧迫する巨大ファイルを見つけるのは本当に大変です。特に、ファイルエクスプローラーであれこれいじっているだけで全体像を把握できていない場合はなおさらです。PowerShellを使えば、サードパーティ製のツールをインストールしなくても、ドライブ上の巨大ファイルを簡単に見つけることができます。組み込みコマンドが面倒な作業をすべて処理し、設定によっては、隠しファイルやシステムファイル(通常は無視されてしまうもの)も処理できます。ただし、特定のディレクトリ、特にC:\Windows\CSCのようなシステムフォルダにアクセスしようとすると、権限エラーが発生する場合があります。-ErrorAction SilentlyContinueフラグを追加することで、クラッシュさせることなくアクセス拒否エラーを回避できます。

PowerShell を使って Windows でサイズの大きいファイルを検索する方法

方法1:ドライブ上のファイルサイズが最も大きい上位10個のファイルを一覧表示する

この方法は、例えばCドライブにある最大のファイルをざっと確認したい場合に適しています。このコマンドは、すべてのファイルをサイズ(バイト単位)で並べ替え、上位10件を表示します。少し扱いに​​くいですが、ほとんどの簡単なチェックには十分です。権限エラーが発生した場合は、コマンドの最後に-ErrorAction SilentlyContinueを追加してください。

Get-ChildItem -Path C:\ -Recurse -Force -ErrorAction SilentlyContinue | sort -descending -property Length | select -first 10 FullName, Length

処理内容は以下のとおりです: – -Path C:\ は、スキャンするドライブまたはフォルダーを指定します (別のドライブまたはフォルダーに変更できます)。 – -Recurse は、サブフォルダーに潜ります (深度設定に似ています)。 – -Force は、隠しファイルとシステム ファイル (通常は表示されません) を含めます。 – -ErrorAction SilentlyContinue は、アクセス権のないディレクトリをスキップし、煩わしいアクセス許可エラーを回避します。 – 並べ替えでは、ファイルを最大から最小の順に並べ、パスとサイズに基づいて最初の 10 個を選択します。

方法2: サイズを人間が読めるようにする & GUIを使用する

デフォルトの出力はバイト単位ですが、解釈が簡単ではありません。サイズをGBに変換するには、コマンドにカスタムプロパティを追加してください。また、視覚的に操作したい場合は、Out-GridViewにパイプすることで、見やすいインタラクティブな表を作成できます。ただし、ここでもアクセス拒否エラーが表示される場合があるので、エラー抑制フラグを追加すると便利です。

Get-ChildItem C:\ -Recurse -Force -ErrorAction SilentlyContinue | sort -descending -property Length | select -first 10 Name, DirectoryName, @{Name="GB";Expression={[Math]::Round($_. Length / 1GB, 2)}} | Out-GridView

このバージョンでは、ファイル名、ディレクトリ、GB単位のサイズが整理されて表示されます。@{Name=”GB”; Expression=…}の部分はカスタム列を作成します。数GBを超えるファイルを素早く把握したい場合に非常に便利です。

方法3: 大きなファイルリストをCSVにエクスポートする

レポートを保存したり、後で分析したりしたい場合は、CSVへのエクスポートが便利です。10GBを超えるファイルを抽出し、並べ替えて、すべてを非常に分かりやすいCSVファイルに保存します。このファイルはExcelなどのスプレッドシートツールで開くことができます。

Get-ChildItem C:\ -Recurse -Force -ErrorAction SilentlyContinue | where-Object {$_. Length -gt 10GB} | Sort-Object Length | select -First 10 FullName, Length | Export-Csv C:\LargeFiles_Report.csv -NoTypeInformation

さあ、最大の違反項目をリスト化したファイルができました。-NoTypeInformationは不要なクラス情報をカットし、CSVファイルをよりクリーンにしてくれます。

方法4:一部のタイプを除外してフィルタリングする

特定のファイルタイプ(システムファイルや仮想ディスクファイルなど)を除外したい場合は、-Exclude を使用できます。例えば、.sysファイルと.vmdkファイルを除外するには、コマンドを次のように変更します。

Get-ChildItem G:\ -Exclude "*.sys", "*.vmdk" -Recurse -Force -ErrorAction SilentlyContinue | sort -descending -Property Length | select -First 10 FullName, Length

特定のファイル形式を探している場合は、-Filterパラメータが役立ちます。例えば、-Filter “*video*” と指定すると、大きなサイズのビデオファイルを素早く見つけることができます。

方法5: リモートドライブの検索

ネットワーク共有やリモートコンピュータをスキャンすることをお考えですか?UNCパス(\\PCNAME\C$など)を使用し、同じパラメータを追加してください。リモートC$ドライブの簡単な例を以下に示します。

Get-ChildItem -Path \\PC123\C$ -Recurse -Force -ErrorAction SilentlyContinue | where-Object {$_. Length -gt 10GB} | sort -Descending -Property Length | select -First 10 FullName, Length

または、これを複数のマシンで実行したい場合は、Invoke-Commandと組み合わせます。

$ComputerList = @("server1", "server2") Invoke-Command -ComputerName $ComputerList -ScriptBlock { gci -Path C:\ -Recurse -Force -ErrorAction SilentlyContinue | sort -descending -Property Length | select -First 10 Name, DirectoryName, Length }

一度に複数のサーバーで動作しますが、それらのマシンに対する管理者権限が必要になる場合があります。

ヒント:管理者権限があっても、一部のディレクトリではアクセスエラーが発生する場合があることにご注意ください。これは正常な動作です。-ErrorAction SilentlyContinueを追加するだけで、コマンドが中断されることなくスムーズに実行されます。