PowerShellで削除処理を自動化するときは、削除対象を一覧で確定し、-WhatIf等の事前確認を通すのが基本です。作業の成否を「エラーが出なかった」だけで判断しないようにします。

削除候補の一覧を先に凍結する

  • 削除対象フォルダが固定のフルパスか確認します。
  • サブフォルダ削除が必要なのか、特定拡張子だけなのか決めます。
  • 過去ログやバックアップなど消してはいけない例外を列挙します。
  • 削除後に復元できるバックアップが存在するかを確認します。

WhatIfとバックアップを使って事前確認する

  1. 本番パスでGet-ChildItemを使い、まず対象候補だけ一覧として取得します。
  2. 確認用CSVへフルパス・サイズ・更新日時を記録します。
  3. Remove-Item -LiteralPath "..." -WhatIfのように処理予定を確認し、本番では必ず正規の対象集合を再利用します。
  4. 削除ではなく、まず隔離フォルダへ移す方式が使えるなら検討します。
  5. 最終承認後に実行し、削除した件数・エラー・残った件数を記録します。

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は対象の正しさを検証しません。本番実行する場合は候補一覧、隔離先、復元方法、最終承認を別に確認する必要があります。

関連記事

削除処理の前にバックアップが復元できるか確認する場合は、「バックアップは「ある」だけでは足りない|実際に復元できるか確認する方法」も参照してください。

参考資料

おすすめの記事