SharePoint Online を運用している管理者の方々は、誤操作によるファイル削除に頭を悩ませることが少なくありません。この記事では、PnP PowerShell を活用し、ごみ箱に入った削除ファイルを自動的に復元する方法について、以下の2つのシナリオを詳しく解説します。

  • 当日削除されたファイルの復元
    特定ユーザーが本日削除したファイルを自動で復元する方法
  • 1週間以内に削除されたファイルの復元
    誤って削除したファイルの中でも、直近1週間以内に削除されたファイルを対象に自動復元する方法

これらの手法を利用することで、削除されたファイルを迅速かつ安全に復元でき、上書きのリスクを回避しながら効率的な運用が可能になります。


対象読者

  • SharePoint Online を管理している IT 管理者
  • 誤操作によるファイル削除に悩むユーザー
  • PowerShell を活用して効率的な管理を目指す方

前提条件

PnP PowerShell のインストール
下記コマンドでインストールしてください。

Install-Module -Name PnP.PowerShell

SharePoint サイトへの接続権限
適切な認証情報を用い、サイトに接続できる状態であること。

PnP PowerShell バージョンの確認
最新バージョンが利用可能な場合は、Update-Module -Name PnP.PowerShell を実行し、最新版に更新してください。


シナリオ 1: 当日削除されたファイルの復元

概要

本シナリオでは、特定ユーザーが当日削除したファイルのみを対象とし、復元先に同名ファイルが存在しない場合に自動で復元します。たとえば、本日誤って削除した重要ファイルを迅速に復元する場合に有用です。

サンプルスクリプト

# 1. SharePoint サイトに接続
Connect-PnPOnline -Url "https://<テナント名>.sharepoint.com/sites/<サイト名>" -UseWebLogin

# 2. 当日(本日 00:00:00)の日時を取得
$Today = (Get-Date).Date

# 3. 対象ユーザーのメールアドレス(例: user@example.com)を指定
$targetUser = "user@example.com"

# 4. 当日削除された対象ユーザーのアイテムを取得(第一段階のリサイクルビンから)
$items = Get-PnPRecycleBinItem -FirstStage | Where-Object {
$_.DeletedDate -ge $Today -and $_.DeletedByEmail -eq $targetUser
}

# 5. 各アイテムについて、復元先に同名ファイルが存在しない場合のみ復元
foreach ($item in $items) {
# 復元先のパスを、DirName と LeafName を組み合わせて作成
$targetPath = $item.DirName.TrimEnd('/') + "/" + $item.LeafName

# 復元先に同名のファイルが存在するか確認(エラーは抑制)
$existingFile = Get-PnPFile -Url $targetPath -ErrorAction SilentlyContinue

if ($null -eq $existingFile) {
# 同名ファイルが存在しなければ復元(オブジェクトそのものを渡す)
Restore-PnPRecycleBinItem -Identity $item -Force
Write-Host "復元完了: $($item.LeafName)"
}
else {
Write-Host "スキップ: 復元先に既に $($item.LeafName) が存在します。"
}
}

解説

  • 日付のフィルタリング
    $Today = (Get-Date).Date により、本日00:00以降に削除されたアイテムを抽出しています。
  • ユーザー別の絞り込み
    $targetUser を指定することで、特定ユーザーによる削除に限定できます。
  • 復元前の存在確認
    Get-PnPFile コマンドで、同一パスに同名ファイルが存在しないか確認し、存在しない場合のみ復元することで、既存ファイルの上書きリスクを回避しています。

シナリオ 2: 1週間以内に削除されたファイルの復元

概要

次に、誤って削除したファイルの中から、直近1週間以内に削除されたファイルを対象に自動復元する方法を紹介します。長期間の誤操作が原因で大量のファイルが削除された場合でも、効率的に復元作業を行うことができます。

サンプルスクリプト

# 1. SharePoint サイトに接続
Connect-PnPOnline -Url "https://<テナント名>.sharepoint.com/sites/<サイト名>" -UseWebLogin

# 2. 直近1週間の日付を取得
$OneWeekAgo = (Get-Date).AddDays(-7)

# 3. 対象ユーザーのメールアドレス(例: user@example.com)を指定
$targetUser = "user@example.com"

# 4. 1週間以内に削除された対象ユーザーのアイテムを取得(第一段階のリサイクルビンから)
$items = Get-PnPRecycleBinItem -FirstStage | Where-Object {
$_.DeletedDate -ge $OneWeekAgo -and $_.DeletedByEmail -eq $targetUser
}

# 5. 各アイテムについて、復元先に同名ファイルが存在しない場合のみ復元
foreach ($item in $items) {
# 復元先のパスを、DirName と LeafName を組み合わせて作成
$targetPath = $item.DirName.TrimEnd('/') + "/" + $item.LeafName

# 復元先に同名のファイルが存在するか確認(エラーは抑制)
$existingFile = Get-PnPFile -Url $targetPath -ErrorAction SilentlyContinue

if ($null -eq $existingFile) {
# 同名ファイルが存在しなければ復元(オブジェクトそのものを渡す)
Restore-PnPRecycleBinItem -Identity $item -Force
Write-Host "復元完了: $($item.LeafName)"
}
else {
Write-Host "スキップ: 復元先に既に $($item.LeafName) が存在します。"
}
}

解説

  • 期間指定の変更
    $OneWeekAgo = (Get-Date).AddDays(-7) により、直近1週間以内に削除されたファイルのみを対象としています。
  • その他の処理
    当日削除の場合と同様に、ユーザー指定と復元先の存在確認を行い、条件に合致したファイルのみ復元を実施します。

まとめ

SharePoint Online のリサイクル ビンからのファイル復元は、誤操作によるデータ損失リスクを低減するために非常に重要です。今回ご紹介した、当日および1週間以内に削除されたファイルを対象とした自動復元スクリプトは、管理者の方々が迅速かつ安全に復元作業を行うための有効な手段となります。
環境に合わせたカスタマイズも可能ですので、ぜひご自身の運用状況に合わせてお試しください。

キーワード: SharePoint Online, PnP PowerShell, 削除ファイル 復旧, リサイクルビン 復元, ゴミ箱 復元,PowerShell スクリプト, ファイル自動復元

Microsoft 365に関するご相談はWITHWITへ

Microsoft 365に関するご相談やお悩みがございましたら、ぜひWITHWITまでお気軽にお問い合わせください。
数あるクラウドサービスの中でMicrosoft 365 に特化してきたからこそ導入前から導入後の定着に至るまで、幅広いご相談に対応いたします。