PowerShellで削除処理を自動化するときは、削除対象を一覧で確定し、-WhatIf等の事前確認を通すのが基本です。作業の成否を「エラーが出なかった」だけで判断しないようにします。
削除候補の一覧を先に凍結する
- 削除対象フォルダが固定のフルパスか確認します。
- サブフォルダ削除が必要なのか、特定拡張子だけなのか決めます。
- 過去ログやバックアップなど消してはいけない例外を列挙します。
- 削除後に復元できるバックアップが存在するかを確認します。
WhatIfとバックアップを使って事前確認する
- 本番パスで
Get-ChildItemを使い、まず対象候補だけ一覧として取得します。 - 確認用CSVへフルパス・サイズ・更新日時を記録します。
Remove-Item -LiteralPath "..." -WhatIfのように処理予定を確認し、本番では必ず正規の対象集合を再利用します。- 削除ではなく、まず隔離フォルダへ移す方式が使えるなら検討します。
- 最終承認後に実行し、削除した件数・エラー・残った件数を記録します。
WhatIfと本実行の対象が変わる可能性
-WhatIfで見えたファイルと実行時のファイルが同じとは限らないため、実行直前に再チェックします。- 誤指定した
-Recurseやワイルドカードで大量削除する事故を防ぐため、-LiteralPathを使う場面を見極めます。 - バックアップなしでユーザーの元データを対象にしないでください。
除外ファイルとバックアップを確認する
- 削除前に保存した一覧と、削除後の一覧を比較します。
- 本来残すべきファイルが存在することを確認します。
WhatIfだけで安全が保証されるわけではない
Remove-Item -LiteralPath 'C:\作業用\sample.txt' -WhatIfは、実際に削除せず予定される操作を確認する仕組みです。ただし削除候補の抽出条件が間違っていれば、-WhatIfに表示される対象も間違っています。まず対象のフルパス一覧を保存し、除外すべきフォルダーが混ざっていないか確認してください。
誤って本番を削除すると復旧できない場合があります。検証中は削除実行部分を有効にせず、保全したコピーを用いるか一時隔離を検討します。-WhatIfを外す前には、処理が対象とするパス・件数が変わっていないか再確認します。
削除を実行しない事前確認例
下記は特定のファイルが存在する場合だけ-WhatIfで予定を表示し、削除しません。例のファイルを実際の保全コピーへ置き換え、元データに対して最初から削除する手順にしないでください。
$target = 'C:\TestWork\sample.txt'
if (-not (Test-Path -LiteralPath $target -PathType Leaf)) { throw '対象ファイルなし' }
Remove-Item -LiteralPath $target -WhatIf -ErrorAction Stop
-WhatIfは対象の正しさを検証しません。本番実行する場合は候補一覧、隔離先、復元方法、最終承認を別に確認する必要があります。
関連記事
削除処理の前にバックアップが復元できるか確認する場合は、「バックアップは「ある」だけでは足りない|実際に復元できるか確認する方法」も参照してください。
