PowerShellで「30日より古いファイル」を探すときは、削除ではなく、まず対象パス・更新日時・ファイル数・容量を一覧化します。特にCreationTime(作成日時)とLastWriteTime(最終更新日時)は違うため、目的に合わせて選んでください。
更新日時と作成日時を区別
過去30日間に変更されていないファイルを探すならLastWriteTimeを使います。別フォルダーへコピーした直後でも更新日時が古いままの場合があります。反対にCreationTimeはコピーのため新しい日時へ変わる場合があり、使われていないファイルの判定には向きません。検査対象フォルダーのパスを先に確定し、誤ったドライブを調べないようにします。
基準日より古いファイルを抽出
削除を行わない棚卸し例です。
$root = 'C:\Work\Archive'
$limit = (Get-Date).AddDays(-30)
$files = @(Get-ChildItem -LiteralPath $root -File -Recurse -ErrorAction Stop |
Where-Object { $_.LastWriteTime -lt $limit })
$files | Select-Object FullName,Length,LastWriteTime |
Export-Csv -LiteralPath '.\older_than_30days.csv' -NoTypeInformation -Encoding UTF8
$rootは実在する対象へ変更してください。サブフォルダーを含めたくない場合は-Recurseを外します。
サブフォルダを含めるか選ぶ
検索後は$files.Countで件数、($files | Measure-Object -Property Length -Sum).Sumで合計バイト数の候補を確認できます。アクセス拒否により途中で停止した場合は、すべてを調べられたことにせず、管理者へ対象を伝えます。隠しファイルも対象に含めたい場合は-Forceの意味を理解して追加してください。
対象件数とサイズを確認してCSV保存
CSVをExcelで開いてファイル名や更新日時を確認し、保管期限・監査上の保存義務・担当者を照合します。古いだけで不要とは限りません。今回のコマンドは読み取りと一覧出力だけで、ファイル削除はしません。削除処理を別工程にすれば、誤った対象が大量に消える事故を避けられます。
