From c73926eccbdf7a10f600608c015d8d6ad0fc9bc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20QUEROL?= Date: Thu, 13 Nov 2025 16:58:52 +0100 Subject: [PATCH] Update Sharepoint/SP-keep-lastNVersions.ps1 --- Sharepoint/SP-keep-lastNVersions.ps1 | 125 ++++++++++++++------------- 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/Sharepoint/SP-keep-lastNVersions.ps1 b/Sharepoint/SP-keep-lastNVersions.ps1 index e7c2249..eb376c6 100644 --- a/Sharepoint/SP-keep-lastNVersions.ps1 +++ b/Sharepoint/SP-keep-lastNVersions.ps1 @@ -1,64 +1,65 @@ -#Config Parameters -$SiteURL = Read-Host -Prompt "Entrez l'adresse du site Sharepoint" -$VersionsToKeep = 5 - -Try { - #Connect to PnP Online - Connect-PnPOnline -Url $SiteURL -Interactive - - #Get the Context - $Ctx= Get-PnPContext - - #Exclude certain libraries - $ExcludedLists = @("Form Templates", "Preservation Hold Library","Site Assets", "Pages", "Site Pages", "Images", - "Site Collection Documents", "Site Collection Images","Style Library") - - #Get All document libraries - $DocumentLibraries = Get-PnPList | Where-Object {$_.BaseType -eq "DocumentLibrary" -and $_.Title -notin $ExcludedLists -and $_.Hidden -eq $false} - - #Iterate through each document library - ForEach($Library in $DocumentLibraries) - { - Write-host "Processing Document Library:"$Library.Title -f Magenta - - #Get All Items from the List - Exclude 'Folder' List Items - $ListItems = Get-PnPListItem -List $Library -PageSize 2000 | Where {$_.FileSystemObjectType -eq "File"} - - #Loop through each file - ForEach ($Item in $ListItems) - { - #Get File Versions - $File = $Item.File - $Versions = $File.Versions - $Ctx.Load($File) - $Ctx.Load($Versions) - $Ctx.ExecuteQuery() - - Write-host -f Yellow "`tScanning File:"$File.Name - $VersionsCount = $Versions.Count - $VersionsToDelete = $VersionsCount - $VersionsToKeep - If($VersionsToDelete -gt 0) - { - write-host -f Cyan "`t Total Number of Versions of the File:" $VersionsCount - $VersionCounter= 0 - #Delete versions - For($i=0; $i -lt $VersionsToDelete; $i++) - { - If($Versions[$VersionCounter].IsCurrentVersion) - { - $VersionCounter++ - Write-host -f Magenta "`t`t Retaining Current Major Version:"$Versions[$VersionCounter].VersionLabel - Continue - } - Write-host -f Cyan "`t Deleting Version:" $Versions[$VersionCounter].VersionLabel - $Versions[$VersionCounter].DeleteObject() - } - $Ctx.ExecuteQuery() - Write-Host -f Green "`t Version History is cleaned for the File:"$File.Name - } - } - } +if($args[0] -eq $null) +{ + $pnpCiD = Read-Host "Votre Client ID (ex: fa7800b5-0298-4205-a369-ffb976de3058) " + $SiteURL = Read-Host "Adresse du site (ex: https://client.sharepoint.com/sites/COMPTA) " + $ListName = Read-Host "Nom de la bibliotheque (ex: Documents) " + $VersionsToKeep = Read-Host "Nombre de versions à garder " } -Catch { - write-host -f Red "Error Cleaning up Version History!" $_.Exception.Message +else +{ + $pnpCiD=$args[0] + $SiteURL=$args[1] + $ListName=$args[2] + $VersionsToKeep=$args[3] +} + +Connect-PnPOnline -Url $SiteURL -Interactive -ClientId $pnpCiD + +#Get the Document Library +$List = Get-PnPList -Identity $ListName + +#Get the Context +$Ctx= Get-PnPContext + +$global:counter=0 +#Get All Items from the List - Get 'Files +$ListItems = Get-PnPListItem -List $ListName -Fields FileLeafRef -PageSize 2000 -ScriptBlock { Param($items) $global:counter += $items.Count; Write-Progress ` + -PercentComplete ($global:Counter / ($List.ItemCount) * 100) -Activity "Getting Files of '$($List.Title)'" ` + -Status "Processing Files $global:Counter of $($List.ItemCount)";} | Where {($_.FileSystemObjectType -eq "File")} +Write-Progress -Activity "Completed Retrieving Files!" -Completed + +$TotalFiles = $ListItems.count +$Counter = 1 +ForEach ($Item in $ListItems) +{ + #Get File Versions + $File = $Item.File + $Versions = $File.Versions + $Ctx.Load($File) + $Ctx.Load($Versions) + $Ctx.ExecuteQuery() + + Write-host -f Yellow "Scanning File ($Counter of $TotalFiles):"$Item.FieldValues.FileRef + $VersionsCount = $Versions.Count + $VersionsToDelete = $VersionsCount - $VersionsToKeep + If($VersionsToDelete -gt 0) + { + write-host -f Cyan "`t Total Number of Versions of the File:" $VersionsCount + $VersionCounter= 0 + #Delete versions + For($i=0; $i -lt $VersionsToDelete; $i++) + { + If($Versions[$VersionCounter].IsCurrentVersion) + { + $VersionCounter++ + Write-host -f Magenta "`t`t Retaining Current Major Version:" $Versions[$VersionCounter].VersionLabel + Continue + } + Write-host -f Cyan "`t Deleting Version:" $Versions[$VersionCounter].VersionLabel + $Versions[$VersionCounter].DeleteObject() + } + $Ctx.ExecuteQuery() + Write-Host -f Green "`t Version History is cleaned for the File:"$File.Name + } + $Counter++ } \ No newline at end of file