Collaborate, Innovate, Automate

Invoke-VersionTrim

This PnP PowerShell script trims version history across all files in a SharePoint document library, permanently deleting versions older than a defined threshold. Version deletion is irreversible — always run Get-VersionReport first to understand the scope before executing this script.

Purpose

SharePoint document libraries accumulate versions silently during normal use. AutoSave and collaborative editing can generate dozens of versions per document per day. This script gives you direct control over version history by:

Prerequisites

Parameters to update

PowerShell Script

Connect-PnPOnline -Url "https://tenantName.sharepoint.com/sites/siteName" -Interactive -ClientId ""

$items = Get-PnPListItem -List "SitePages" -Fields "FileLeafRef", "FileRef", "FSObjType"

foreach ($item in $items) {
    # Skip folders
    if ($item["FSObjType"] -eq 1) { continue }

    $versions = Get-PnPFileVersion -Url $item["FileRef"]
    if ($versions.Count -gt 50) {
        Write-Host "$($item["FileLeafRef"]) has $($versions.Count) versions"
        $toDelete = $versions | Sort-Object Created -Descending | Select-Object -Skip 50
        foreach ($version in $toDelete) {
            Remove-PnPFileVersion -Url $item["FileRef"] -Identity $version.Id -Force
        }
    }
}

Usage Notes

Related