Over time, SharePoint Online document libraries accumulate multiple versions of files, leading to:
Increased storage consumption
Performance degradation
Unnecessary file duplication
By using PnP PowerShell, we can automate file version cleanup to improve storage efficiency and optimize SharePoint Online.
Step 1: Connect to SharePoint Online
$siteUrl = "https://yourtenant.sharepoint.com/sites/YourSite"
Connect-PnPOnline -Url $siteUrl -Interactive
Write-Host " Connected to SharePoint Online"
✔ Establishes a secure connection to SharePoint Online.
Step 2: Check Versioning Settings for a Document Library
$libraryName = "Documents"
$library = Get-PnPList -Identity $libraryName
Write-Host " Library: $($library.Title)"
Write-Host " Major Versions: $($library.MajorVersionLimit)"
Write-Host " Minor Versions: $($library.MajorWithMinorVersionsLimit)"
✔ Displays the current versioning settings for the document library.
Step 3: Set Version Limits for a Document Library
Set-PnPList -Identity $libraryName -MajorVersions 10 -MajorWithMinorVersions 5
Write-Host " Versioning limits updated: Max 10 major, Max 5 minor versions"
✔ Limits the number of major and minor versions to prevent excessive storage usage.
Step 4: Delete Old Versions of Files
$libraryItems = Get-PnPListItem -List $libraryName
foreach ($item in $libraryItems) {
Remove-PnPFileVersion -List $libraryName -Identity $item["FileRef"] -Count 5 -Force
Write-Host " Removed old versions for: $($item["FileRef"])"
}
✔ Deletes older file versions while keeping the latest 5 versions.
Step 5: Bulk Cleanup of All File Versions
$files = Get-PnPListItem -List $libraryName | Where-Object { $_.FileSystemObjectType -eq "File" }
foreach ($file in $files) {
$fileUrl = $file["FileRef"]
Remove-PnPFileVersion -List $libraryName -Identity $fileUrl -AllVersions -Force
Write-Host " Removed all versions for: $fileUrl"
}
✔ Deletes all previous versions of each file in the document library.
Step 6: Automate Version Cleanup on a Schedule
Schedule the cleanup script to run monthly:
$taskName = "SharePoint Version Cleanup"
$scriptPath = "C:\Scripts\VersionCleanup.ps1"
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File $scriptPath"
$trigger = New-ScheduledTaskTrigger -Monthly -DaysOfMonth 1 -At 3AM
Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -User "SYSTEM" -RunLevel Highest
Write-Host " Version cleanup automation scheduled."
✔ Ensures regular cleanup of old file versions.