Visit our website to find out more useful solutions and services from Chiron Consulting https://chironusa.com/
Hello Guys,
I recently had a situation where the user accidentally deleted big amount of files from SharePoint Online (about 10k). Restore them all manually would be a nightmare. So, I came up with a PowerShell script.
Looking around the Internet for a solution I found a few related articles but provided solutions either didn't work or worked just for the on-prem environment.
So, I developed my own PowerShell script. Probably someone can found it useful as well.
Requirements
- Installed Management Shell Online
https://www.microsoft.com/en-us/download/details.aspx?id=35588 - Installed SharePoint Online Assemblies
https://www.microsoft.com/en-us/download/details.aspx?id=42038 - Site Collection Admin rights
Solution
All right, the solution is pretty simple, just copy the script provided below and paste to the new PowerShell file.
I configured script to be executed from a 2nd Admin Recycle bin.
If you would like to restore items from a 1st level Recycle bin change line #19 to the Web instead of Site:
$Site = $ctx.Web
Here is the script itself:
#Load SharePoint Online Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#Credentials
$SiteUrl = "https://bainbridgere.sharepoint.com/sites/SharePoint"
$UserName="apashkevych@bainbridgere.com"
#Set the password to connect
$Password = ConvertTo-SecureString "P@ssword2018!" -AsPlainText -Force
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName,$Password)
Try {
#Setup the context
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl)
$ctx.Credentials = $Credentials
#Get the web recycle bin
$Site = $ctx.Site
$RecycleBinItems = $Site.RecycleBin
$ctx.Load($Site)
$ctx.Load($RecycleBinItems)
$ctx.ExecuteQuery()
#Get all Excel files from Recycle bin
$AllItems= $RecycleBinItems
Write-Host "Total Number of Files found in Recycle Bin:" $AllItems.Count
#Restore from Recylce bin
$RecycleBinItems.RestoreAll()
$ctx.ExecuteQuery()
}
catch {
write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}
Good luck with fixing all issues you have 🙂