Cliquez pour évaluer cet article !
1 avis

C’est quoi le versioning ?

Lorsqu’un fichier est modifié, SharePoint conserve sa version précédente pour permettre à n’importe qui de revenir en arrière ou de visualiser le fichier avant sa modification. Par défaut, SharePoint permet de conserver jusqu’à 500 versions d’un même fichier.

C’est une fonctionnalité qui est très pratique, mais qui a comme désavantage de consommer beaucoup d’espace de stockage. En effet, au lieu de conserver une version différentielle du fichier (comme un GIT par exemple), SharePoint sauvegarde le fichier complet. Sur certains sites, cela peut donc mener à des multiplicateurs de 25 entre le poids des fichiers seuls sans leurs versions (100 GB par exemple) et le poids total du site SharePoint (2,5 TB dans cet exemple).

Si votre courbe d’usage de SharePoint monte en flèche et que vous allez bientôt être à court d’espace disponible, faire du ménage dans vos versions est une bonne idée pour gagner facilement des GB voir des TB de données.

Modification de la configuration du tenant

Contrôle de la configuration actuelle

Dans la suite de cet article, j’utilise le module PnP.PowerShell plutôt que le module “officiel” Microsoft.Online.SharePoint.PowerShell par préférence personnelle.

On commence par installer le module PnP.PowerShell (uniquement disponible avec PowerShell dans ses dernières versions) :

Install-Module PnP.PowerShell -Scope AllUsers

Avant de commencer à récupérer de l’espace de stockage, il faut arrêter l’hémorragie en réduisant le nombre maximal d’historiques de version et/ou leur durée de conservation.

Depuis le mois de septembre 2024, l’utilisation du module PnP.PowerShell nécessite la création d’une application Entra ID dédiée : Register an Entra ID Application to use with PnP PowerShell | PnP PowerShell

On commence par se connecter sur votre portail d’administration SharePoint avec PowerShell, en indiquant l’URL de votre portail d’administration SharePoint et le ClientId de votre application Entra ID pour PNP :

Connect-PnPOnline -Url 'https://contoso-admin.sharepoint.com' -ClientId '10a52256-36f0-4bb7-973d-986630ee8e3c' -Interactive

On consulte la configuration actuelle pour évaluer les changements à faire avec la commande suivante :

Get-PnPTenant | Format-List *version*

On obtient alors les informations suivantes :

PropriétéExplication
ExpireVersionAfterDaysDurée de validité d’une version (en jours)
MajorVersionLimitNombre maximum de versions par fichier
EnableAutoExpirationVersionTrimNettoyage automatique des versions caduques
EnableVersionExpirationSettingDisponibilité des paramètres d’expiration de versions

A titre d’exemple, voici les paramètres par défaut sur mon tenant de test :

ExpireVersionsAfterDays         : 0

MajorVersionLimit               : 500

EnableAutoExpirationVersionTrim : False

EnableVersionExpirationSetting  : False

Copier

Modification de la configuration

On commence par activer les fonctionnalités d’expiration de version de fichier au niveau du tenant :

Set-PnPTenant -EnableVersionExpirationSetting:$true

Copier

Une fois les fonctionnalités débloquées, il est enfin possible d’agir sur le nombre maximum de versions au niveau du tenant. Dans mon exemple, je descends de 500 à 100 versions majeures au maximum :

Set-PnPTenant -MajorVersionLimit 100

Copier

On en profite aussi pour définir une durée de validité pour les versions. Dans ma configuration, trois ans après sa création, la version d’un fichier est susceptible d’être supprimée :

Set-PnPTenant -ExpireVersionsAfterDays 1096

Copier

Pourquoi je dis qu’une version est “susceptible” d’être supprimée ?

La suppression d’une version au bout d’un certain temps n’est pas garantie : elle dépend de l’activité sur le fichier. En effet, la suppression des vieilles versions n’est effectuée que lors de la création d’une nouvelle version du fichier (et dans la limite de ~20 versions supprimées par nouvel évènement).

Cette configuration est appelée configuration “manuelle” par Microsoft, qui propose de son côté une méthode plus intelligente et automatique de gestion des versions avec le paramètre “EnableAutoExpirationVersionTrim”.

Le paramètre EnableAutoExpirationVersionTrim

Microsoft propose un dernier paramètre pour gérer les versions : EnableAutoExpirationVersionTrim. Celui-ci permettrait une configuration plus intelligente et plus efficace que de simples seuils définis manuellement sur la durée de vie et/ou le nombre de versions.

Avec ce paramètre, la conservation des versions se fait de manière différenciée suivant l’âge des versions :

  • Pendant les 30 premiers jours : toutes les versions sont conservées dans la limite de 500 versions
  • Entre un et deux mois : une seule version par heure du fichier est conservée
  • Entre deux et six mois : une seule version par jour du fichier est conservée
  • Après six mois : une seule version par semaine du fichier est conservée

Voici un graphique fourni par Microsoft sur les différences entre les configurations manuelles et la configuration automatique :

Si vous souhaitez utiliser cette configuration, vous pouvez l’activer sur votre tenant de cette manière :

Set-PnPTenant -EnableAutoExpirationVersionTrim:$true

Copier

Lorsque celui-ci est défini, il se passe deux choses (en silence) sur la configuration du tenant :

  1. Le paramètre MajorVersionLimit revient à sa valeur initiale (500)
  2. Le paramètre ExpireVersionsAfterDays passe quant à lui à 30 jours

Il n’est alors plus possible de modifier les paramètres MajorVersionLimit ou ExpireVersionsAfterDays qui restent bloqués à leurs valeurs par défaut :

Set-PnPTenant: The parameter ExpireVersionsAfterDays can't be set because the Tenant has AutoExpiration enabled

Copier

On retrouve donc la configuration évoquée précédemment, où pendant 30 jours, jusqu’à 500 versions peuvent être conservées.

Rappel

Le nettoyage des versions ne sera déclenché que lors de la création d’une nouvelle version du fichier (donc modification du fichier).

Contrôle de la propagation de la configuration

Pour s’assurer que la configuration que vous venez de faire sur votre tenant s’est propagée correctement sur tous vos sites SharePoint, on utilise la commande suivante :

Get-PnPTenantSite | Select-Object Title, *version*

Copier

La valeur qui nous intéresse est InheritVersionPolicyFromTenant qui devrait être à “True” sur la majorité des sites SharePoint.

Si un site SharePoint est à “False”, cela signifie qu’une politique d’historique de version a été définie au niveau du site, ce qui bloque l’héritage de la configuration issue du tenant. Plus d’information sur ce mécanisme ici : Version history limits for document library and OneDrive overview – SharePoint in Microsoft 365 | Microsoft Learn.

Pour lister tous les sites qui n’héritent pas de la configuration du tenant :

Get-PnPTenantSite | Where-Object {$_.InheritVersionPolicyFromTenant -eq $false}

Copier

Suppression des historiques de versions

Maintenant que la configuration de nos sites SharePoint est propre, on peut passer au nettoyage des versions superflues pour gagner rapidement de l’espace de stockage.

Se connecter au site SharePoint que l’on veut nettoyer :

Connect-PnPOnline -Url 'https://contoso.sharepoint.com/sites/leadership-connection'

Copier

Suppression des versions

Ne garder que les 100 dernières versions des fichiers :

New-PnPSiteFileVersionBatchDeleteJob -MajorVersionLimit 100

Copier

Pour supprimer les versions qui ont plus d’un an :

New-PnPSiteFileVersionBatchDeleteJob -DeleteBeforeDays 365

Copier

Limitation côté Microsoft : il n’est pas possible de conserver des versions créées avant le 01 janvier 2023.

Utiliser la méthode automatique proposée par Microsoft :

New-PnPSiteFileVersionBatchDeleteJob -Automatic

Copier

La suppression peut prendre jusqu’à quelques jours pour être complétée en totalité.

Consulter les résultats

Pour suivre l’avancement de la suppression des versions inutiles, vous pouvez utiliser la commande suivante :

$results = Get-PnPSiteFileVersionBatchDeleteJobStatus
$results

Copier

Voici un exemple de résultat :

Url                         : https://contoso.sharepoint.com/sites/leadership-connection

WorkItemId                  : e4f5ff2f-e7ff-48c8-b4ea-abe7bc755d6f

Status                      : InProgress

ErrorMessage                :

RequestTimeInUTC            : 08/01/2024 07:29:24

LastProcessTimeInUTC        : 08/01/2024 07:40:49

CompleteTimeInUTC           :

BatchDeleteMode             : DeleteOlderThanDays

DeleteOlderThan             : 01/01/2024 07:29:24

MajorVersionLimit           :

MajorWithMinorVersionsLimit :

FilesProcessed              : 2155

VersionsProcessed           : 3660

VersionsDeleted             : 3656

VersionsFailed              : 0

StorageReleasedInBytes      : 9583893219

Copier

Pour afficher la quantité de données récupérées (en GB) :

[math]::Round($results.StorageReleasedInBytes / 1GB,2)

Copier

Script complet

Voici un script qui permet de lancer un nettoyage des versions de plus d’un an sur tous les sites SharePoint de plus de 100 GB.

L’utilisation d’une application Entra ID est maintenant obligatoire. Vous aurez besoin de la permission déléguée SharePoint AllSites.FullControl et le rôle SharePoint Administrator.

Attention : ce script ajoute l’utilisateur indiqué dans la variable $upn en tant que propriétaire de tous les sites SharePoint sur lesquels il doit invervenir. Pensez à faire un peu de ménage après l’exécution du script.

#Requires -Modules PnP.PowerShell
#Requires -RunAsAdministrator
#Requires -Version 7.4.5

Update-Module PnP.PowerShell

$minimumSizeGB = 100
$upn = '[email protected]'

# PnP PowerShell Entra ID app settings
$appSettings = @{
    ClientId    = '10a52256-36f0-4bb7-973d-986630ee8e3c'
    Url         = 'https://contoso-admin.sharepoint.com/'
    Interactive = $true
}

# Connect to SharePoint admin center
Connect-PnPOnline @appSettings

# Get all sites with over 100 GB of storage usage
$sites = Get-PnPTenantSite
$limit = $minimumSizeGB * 1000
$sites = $sites | Where-Object { $_.StorageUsageCurrent -gt $limit }

# Add as admin for all needed sites
$sites | ForEach-Object { Set-PnPTenantSite -Identity $_.Url -Owners $upn }

# Create the batch delete job foreach site over X GB
$sites | ForEach-Object {

    # Connect to the SharePoint site
    Write-Host "$($_.Url)"
    $appSettings.Url = $_.Url
    Connect-PnPOnline @appSettings

    # Create the batch delete job
    New-PnPSiteFileVersionBatchDeleteJob -DeleteBeforeDays 365 -Force
}

Article écrit par Léo BOUARD

Notez cet article

Vous avez aimé cet article ?

Rendez-le plus visible auprès des internautes en lui mettant une bonne note.

Cliquez pour évaluer cet article !
1 avis

Articles pouvant vous intéresser

Le versioning sur SharePoint

C’est quoi le versioning ? Lorsqu’un fichier est modifié, SharePoint conserve sa version précédente pour