Forum Discussion

AMS-DavidJParkes's avatar
AMS-DavidJParkes
Copper Contributor
May 14, 2024

Delete Version History

Hello Team,

 

I'm looking for help with deleting the version history of specific files in SharePoint, but retaining the last 10 versions. I can see that I can manually delete the version history, but this is going to be a rather long task for this particular file, or i can delete them all which we don't want. I've found powershell commands which will go through all files in a document library but nothing for a specific file. Does anyone have anything which will do this? 

 

Thank you.

  • Paul de Jong's avatar
    Paul de Jong
    Iron Contributor

    AMS-DavidJParkes 

    Using PowerShell is one approach. Find a PowerShell script that deletes all version apart from x last versions and then add additional constraint for your specific file. It does require coding and some basic testing of course.

    Another approach is to use 3rd party Apps that offer this functionality in the browser. i.e. delete all versions and keep x last versions. See example.

     

    • AMS-DavidJParkes's avatar
      AMS-DavidJParkes
      Copper Contributor
      Hello Paul,

      Thank you for your response. I've looked at New-SPOSiteFileVersionBatchDeleteJob, but I cannot run this in my tenant as it is experimental. Is there a command you would recommend i could start with?
  • TahirMasood's avatar
    TahirMasood
    Copper Contributor
    You can loop through the Document Versions.count and delete to the number of version you want. if you need some code sample can work on it and share.
    • AMS-DavidJParkes's avatar
      AMS-DavidJParkes
      Copper Contributor
      Thanks. I'm happy to give it a go, but I'm unsure what command to start with.
  • KotiReddy's avatar
    KotiReddy
    Brass Contributor
    If you have list of files in csv and all from same site , we can use below script to delete versions.

    # Replace with your own Connect-PnPOnline statement
    $SiteUrl = "https://contoso.sharepoint.com/sites/site"
    Connect-PnPOnline -Url $SiteUrl -UseWebLogin
    # Replace with the path to your own CSV file
    $FileList = Import-Csv .\VersionDelete.csv
    # Replace with the number of versions you want to keep
    $VersionsToKeep = 2
    Write-Verbose "Keeping $VersionsToKeep of each file"

    foreach($File in $FileList) {
    # Remove site from Filename if it's there
    $Filename = $File.FileName.Replace($SiteUrl,"")
    Write-Verbose "Getting version for file $Filename"

    # Get the versions of each file
    $FileVersions = Get-PnPFileVersion -Url $Filename
    Write-Verbose "Found $($FileVersions.Count) versions"
    if ($FileVersions.Count -gt $VersionsToKeep) {

    # Pick the ones we want to remove
    $DeleteVersionList = ($FileVersions[0..$($FileVersions.Count - $VersionsToKeep)])
    Write-Verbose "More than $VersionsToKeep versions. Deleting $($DeleteVersionList.count)"

    foreach($VersionToDelete in $DeleteVersionList) {
    Write-Verbose "Removing $($VersionToDelete.VersionLabel)"
    # Remove the versions
    #Remove-PnPFileVersion -Url $Filename -Identity $VersionToDelete.Id -Force
    $Output = [PSCustomObject]@{
    PSTypeName = 'TKDeletedFileVersion'
    Filename = $Filename
    DeletedVersion = $($VersionToDelete.VersionLabel)
    }
    # Output the output
    $Output
    }
    } else {
    Write-Verbose "$Filename only had $($FileVersions.Count). Skipping..."
    }
    }


Share

Resources