この記事では、PowerShellコマンドを使ってSharePointサイトでゴミ箱からファイルを一括で復元する方法についてご紹介します。
誤って削除してしまったファイルを一括で復元することは、非常に便利で時間の節約になります。

この方法を試す前に、必ず検証環境で動作を確認してください。

必要な準備

この手順を実行するには、以下の準備が必要です:

  1. PnP PowerShell モジュールのインストール
  2. SharePointサイトのURL
  3. 復元したいファイルの削除日時(開始日時と終了日時)
  4. PowerShellがインストールされたPC
  5. SharePointサイトでの「サイトコレクション管理者」または「サイト所有者」の権限

必要な権限

この操作を実行するには、以下の権限が必要です:

  • SharePointサイトの「サイトコレクション管理者」または「サイト所有者」の権限。これにより、ゴミ箱内のアイテムを閲覧および復元することができます。

手順

1. PnP PowerShellモジュールのインストール

まず、PnP PowerShellモジュールをインストールします。管理者としてPowerShellを開き、以下のコマンドを実行します:

Install-Module -Name PnP.PowerShell

2. SharePointサイトに接続

次に、復元したいファイルがあるSharePointサイトに接続します。以下のコマンドを実行し、対話形式でサイトURLを入力します。

# サイトURLを対話式で入力
$siteUrl = Read-Host "Enter the SharePoint site URL (e.g., https://yourtenant.sharepoint.com/sites/yoursite)"

# SharePointサイトに接続
Connect-PnPOnline -Url $siteUrl -UseWebLogin

3. 復元したいファイルの削除日時を入力

開始日時と終了日時を入力します。以下のコマンドを実行し、対話形式で日時を入力します。

なお、サイトのタイムゾーンによってコマンドが異なります。復元対象のファイルが保存されているサイトのタイムゾーンをご確認の上以降の手順を実施してください。

本記事では日本時間(JST)の場合とUTCの場合の2パターンを紹介します。

サイトのタイムゾーンが日本時間(JST)の場合

# 特定の開始日時と終了日時を対話式で入力
$startDateTimeInput = Read-Host "Enter the start date and time in JST (e.g., 2024-07-01 00:00)"
$endDateTimeInput = Read-Host "Enter the end date and time in JST (e.g., 2024-07-03 23:59)"

# 日本時間(JST)をタイムゾーンとして設定
$jstZone = [System.TimeZoneInfo]::FindSystemTimeZoneById("Tokyo Standard Time")

# 入力された日時文字列をDateTimeオブジェクトに変換し、JSTとして解釈
$startDateTimeJST = [System.TimeZoneInfo]::ConvertTimeToUtc([DateTime]::ParseExact($startDateTimeInput, "yyyy-MM-dd HH:mm", $null), $jstZone)
$endDateTimeJST = [System.TimeZoneInfo]::ConvertTimeToUtc([DateTime]::ParseExact($endDateTimeInput, "yyyy-MM-dd HH:mm", $null), $jstZone)

サイトのタイムゾーンがUTCの場合

# 特定の開始日時と終了日時を対話式で入力
$startDateTimeInput = Read-Host "Enter the start date and time in UTC (e.g., 2024-07-01 00:00)"
$endDateTimeInput = Read-Host "Enter the end date and time in UTC (e.g., 2024-07-03 23:59)"

#
日時の変換
$startDateTimeUTC = [DateTime]::ParseExact($startDateTimeInput, "yyyy-MM-dd HH:mm", $null, [System.Globalization.DateTimeStyles]::AssumeUniversal)
$endDateTimeUTC = [DateTime]::ParseExact($endDateTimeInput, "yyyy-MM-dd HH:mm", $null, [System.Globalization.DateTimeStyles]::AssumeUniversal)

4. ゴミ箱からファイルを一括で復元

以下のコマンドを実行して、指定された期間内に削除されたファイルを一括で復元します。

サイトのタイムゾーンが日本時間(JST)の場合

# 第1段階のゴミ箱アイテムの取得
$firstStageRecycleBinItems = Get-PnPRecycleBinItem -FirstStage

# 第1段階のゴミ箱から指定された期間内に削除されたアイテムをフィルタリングして復元
$filteredFirstStageItems = $firstStageRecycleBinItems | Where-Object {
$_.DeletedDate -ge $startDateTimeJST -and $_.DeletedDate -le $endDateTimeJST
}

foreach ($item in $filteredFirstStageItems) {
Restore-PnPRecycleBinItem -Identity $item -Force
}

Write-Host "復元が完了しました。"

サイトのタイムゾーンがUTCの場合

# 第1段階のゴミ箱アイテムの取得
$firstStageRecycleBinItems = Get-PnPRecycleBinItem -FirstStage

# 第1段階のゴミ箱から指定された期間内に削除されたアイテムをフィルタリングして復元
$filteredFirstStageItems = $firstStageRecycleBinItems | Where-Object {
$_.DeletedDate -ge $startDateTimeUTC -and $_.DeletedDate -le $endDateTimeUTC
}

foreach ($item in $filteredFirstStageItems) {
Restore-PnPRecycleBinItem -Identity $item -Force
}

Write-Host "復元が完了しました。"

免責事項

本記事で紹介した手順は、皆様の便宜のために提供されていますが、正確性や完全性について保証するものではありません。実行する前に必ず検証環境で動作を確認し、本番環境に適用する際には十分な注意を払ってください。本記事の内容に基づいて行った操作により発生した損害や損失について、筆者および当サイトは一切の責任を負いません。

これで、SharePointサイトでゴミ箱からファイルを一括で復元する方法の紹介は以上です。皆さんの環境でうまく動作することを祈っています。

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

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