Restaurer des milliers d'éléments supprimés par une personne sur un site Sharepoint peut être une opération fastidieuse, voici donc un script Powershell pour le faire à votre place et vous bénéficierez aussi d'un rapport d'état ("Success", "Failure") pour chacun des éléments.
1 - Prérequis Powershell
Dans un premier temps nous allons avoir besoin d’installer le module Powershell nécessaire à la gestion de Sharepoint, pour ce faire utilisez la commande suivante :
# Installation du Module Powershell
Install-Module SharePointPnPPowerShellOnline
Une fois le module Powershell installé nous allons pouvoir nous connecter au site et atteindre sa corbeille de là nous pourrons faire le filtrage et l’export des éléments.
2 - Script Powershell
# Script to Restore RecycleBin elements
# By : Mathieu ADELAÏDE
# Date : 06/09/2019
# Version : V0
#######################
# Step 0 : Management #
#######################
#region - Step 0
# Folder Definition
# Get Current Path
$currentPath = (Get-Location).Path
$RootFolder = "C:\Temp\Sharepoint"
$LogFolder = "$RootFolder\Log"
#Folder Creation
$AllFolder = $RootFolder, $LogFolder
$AllFolder | foreach {
$FolderName = $_
If (!(Test-Path $FolderName)) {
New-Item $FolderName -ItemType Directory
}
}
# Files Definition
$ResultState = "$LogFolder\RestaurationReport.csv"
Add-Content $ResultState -Value "Title;ItemType;Size;ItemState;DirName;DeletedByName;DeletedDate;ID;State"
$logFilePath = "$logFolder\SP_Restauration.log"
#Define Array
$Array = @()
#Config Variables
$SiteURL = "https://MySite.sharepoint.com/sites/Recrutement"
#endregion - Step 0
#######################
# Step 1 : Connection #
#######################
#region - Step 1
#Connect to Sharepoint Online
Try {
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)
}
Catch {
$tmpError = $_.Exception.message
Write-Output "The following error occurred: $tmpError" | Add-Content $logFilePath
Write-Output "The error occurred while we trying to Connect to Sharepoint Online" | Add-Content $logFilePath
}
#endregion - Step 1
#######################################
# Step 2 : Collection and Restoration #
#######################################
#region - Step 2
# List all Items
$RecycleBin = Get-PnPRecycleBinItem
# Filter result
$FilteredRecycleBin = $RecycleBin.Where({$_.DeletedByName -eq "DUPONT Jean"})
$FilteredRecycleBin | foreach {
$Title = $_.Title
$ItemType = $_.ItemType
$Size = $_.Size
$ItemState = $_.ItemState
$DirName = $_.DirName
$DeletedByName = $_.DeletedByName
$DeletedDate = $_.DeletedDate
$ID = $_.id
$Guid = $ID.Guid
# Restore
Try {
Restore-PnPRecycleBinItem -Identity $Guid -Force -ErrorAction Stop
Write-Output "Successfully Restored File $Title" | Add-Content $logFilePath
$State = "Succes"
}
Catch {
$tmpError = $_.Exception.message
Write-Output "The following error occurred: $tmpError" | Add-Content $logFilePath
Write-Output "The error occurred while we trying to Restore $Title" | Add-Content $logFilePath
$State = "Failed"
}
$Array += New-Object psobject -Property @{
Title = $Title
ItemType = $ItemType
Size = $Size
ItemState = $ItemState
DirName = $DirName
DeletedByName = $DeletedByName
DeletedDate = $DeletedDate
State = $State
Id = $id
}
# Release variable
$Title = $null
$ItemType = $null
$Size = $null
$ItemState = $null
$DirName = $null
$DeletedByName = $null
$DeletedDate = $null
$ID = $null
$State = $null
$Guid = $null
}
#endregion - Step 2
###################
# Step 3 : Export #
###################
#region - Step 3
Try {
$Array | Export-Csv $ResultState -Encoding UTF8 -NoTypeInformation -Delimiter ";"
Write-Output "Successfully Export Data" | Add-Content $logFilePath
}
Catch {
$tmpError = $_.Exception.message
Write-Output "The following error occurred: $tmpError" | Add-Content $logFilePath
Write-Output "The error occurred while we trying to Export Data" | Add-Content $logFilePath
}
#endregion - Step 3