概要
Windowsのディスクが足らなくなった際に、どこが容量を沢山使っているかを確認するため一括で確認できるスクリプトをPowerShellで作ってみました。
検証環境・内容
- Windows10環境で実施
- スクリプトの文字コードは”ANSI”で保存
- C:\Users\UserName\AppData\Roaming 配下の全てのフォルダーサイズを出力
- 出力先はスクリプトの実行場所
秘密鍵・公開鍵の作成
①スクリプト内容(XXXX.ps1)
# 変数定義(ユーザー毎に編集)
$SearchFolerPath = "C:\Users\UserName\AppData\Roaming"
$ExportPath = ".\FolderSize.csv"
# サブフォルダのサイズを表示する関数
function Get-SubFoldersSize {
# フォルダが存在するか確認
if (-Not (Test-Path -Path $SearchFolerPath -PathType Container)) {
Write-Host "指定されたパスは存在しません: $SearchFolerPath"
return
}
# 指定フォルダ内のすべてのサブフォルダを回帰的に取得
$SubFolders = Get-ChildItem -Path $SearchFolerPath -Recurse -Directory
foreach ($SubFolder in $SubFolders) {
# 各サブフォルダ内のファイルの合計サイズを計算
$TotalSize = Get-ChildItem -Path $SubFolder.FullName -Recurse -File | Measure-Object -Property Length -Sum
$TotalSizeMB = [math]::Round($TotalSize.Sum / 1MB, 1)
# 結果を表示
Write-Host "$($SubFolder.FullName),$TotalSizeMB,MB"
}
}
# 結果出力
Start-Transcript $ExportPath
Get-SubFoldersSize $SearchFolerPath -File -Force -Recurse -Attributes !Offline
Stop-Transcript
②スクリプトを実行した場所にフォルダとサイズが記載されたcsvファイルが作成される
**********************
Windows PowerShell トランスクリプト開始
~~~~
C:\Users\UserName\AppData\Roaming\Adobe,0.2,MB
C:\Users\UserName\AppData\Roaming\Code,162,MB
C:\Users\UserName\AppData\Roaming\com.adobe.dunamis,0,MB
C:\Users\UserName\AppData\Roaming\Macromedia,0.6,MB
C:\Users\UserName\AppData\Roaming\Microsoft,63.2,MB
C:\Users\UserName\AppData\Roaming\Mozilla,39.2,MB
~~~~
**********************
Windows PowerShell トランスクリプト終了
終了時刻: 20241213152808
**********************
③あとは出力されたファイルをExcelで開いてフィルターをかけると見やすくなります。
備考
1MB以上のフォルダに絞ったり、ソートをスクリプト内の処理で行えればよかったのですが、
関数内でオブジェクトを作る必要がありそう。
もう少し技術力ついたら改訂版を作りたいと思います。