Cleaning Up SharePoint Online File Versions using PnP PowerShell

Loading

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.

Leave a Reply

Your email address will not be published. Required fields are marked *