PowerShellで指定したディレクトリのファイルをサイズの大きい順にCSVに書き出す
こんにちは、開発担当の Masa です。
先日、印刷テスト中にディスクの使用量が95%を超えました。設定>システム>ストレージ で見ても原因は分からず、検索してもサイズの大きなファイルは見つからず、最終的に PowerShell でサイズの大きなファイルを発見し削除しました。
基本的に、アクセスするのに管理者権限が必要な特殊なファイル(System32の中など)は、設定>システム>ストレージ で削除できません。
使用サイズとしても換算されないため、何故ディスク容量が逼迫しているのか分からない場合があります。
ネット上の情報を頼りに PowerShell スクリプトで巨大なファイルを発見し無事削除出来ました。
以下のスクリプトは、C ドライブ以下(サブディレクトリを含む)で 100MB 以上のファイルをサイズの大きい順に CSV 出力しています。
$ErrorActionPreference = "SilentlyContinue"
Get-ChildItem -Path "C:\" -Force -File -Recurse |
Where-Object {$_.Length -ge 100MB} |
Sort-Object Length -Descending |
Select-Object FullName, @{Name="SizeMB";Expression={[math]::Round($_.Length / 1MB, 2)}} |
Export-Csv -Path "C:\out.csv" -NoTypeInformation -Encoding UTF8
権限が足りない場合のエラーを無視するため、先頭で
$ErrorActionPreference = “SilentlyContinue”を指定しています。
そのままだと見にくいので
@{Name=”SizeMB”;Expression={[math]::Round($_.Length / 1MB, 2)}}を指定して MB で表示しています。
結局、System32\spool\PRINTERS の中に巨大なゴミファイルが蓄積していたことが原因でした。
どこを見てもディスク容量逼迫の原因が分からないという時は参考にしてください。