Partager via


Tutoriel : Générer et analyser le rapport d’utilisation des versions pour le site SharePoint

En comprenant le stockage de versions sur un site, vous pouvez mieux optimiser les paramètres de l’historique des versions pour répondre aux objectifs de récupération de votre organization et gérer les coûts de stockage.

Ce tutoriel montre comment générer un rapport d’utilisation du stockage de version et l’analyser pour mieux comprendre l’empreinte du stockage des versions du site. Le rapport peut également être utilisé pour exécuter une analyse de scénario pour appliquer différentes limites de version ou réduire les versions existantes.

Dans ce tutoriel, nous expliquons comment :

  • Générez le fichier de rapport d’utilisation du stockage de version pour le site ou la bibliothèque.
  • Vérifiez la progression de la génération du rapport.
  • Comprendre le fichier de rapport.
  • Analyser l’utilisation du stockage de versions à l’aide d’Excel ou de PowerShell.

Dans les didacticiels ultérieurs, examinez comment exécuter une analyse d’impact sur le rapport CSV généré.

Avant de commencer

  1. Identifiez le site SharePoint, le compte OneDrive ou la bibliothèque de documents dont vous souhaitez comprendre l’utilisation du stockage de versions.
  2. Choisissez un emplacement dans la bibliothèque de documents SharePoint dans lequel vous souhaitez enregistrer le rapport.
  3. Téléchargez la dernière version de SharePoint Online Management Shell.

Remarque

  1. Le fichier de rapport est généré à l’emplacement de rapport spécifié.
  2. L’emplacement du rapport doit se trouver dans une bibliothèque de documents SharePoint elle-même.
  3. Il ne peut pas y avoir un fichier portant le même nom que le rapport dans la bibliothèque de documents.

Générer un rapport d’utilisation des versions pour les sites ou la bibliothèque

Vous pouvez générer un rapport sur l’utilisation actuelle du stockage de la version sur un site en exécutant la New-SPOSiteFileVersionExpirationReportJob commande ou sur une bibliothèque en exécutant la New-SPOListFileVersionBatchDeleteJob commande .

Dans l’exemple suivant, un travail est mis en file d’attente pour générer un rapport étendu au site à l’emplacement du rapport, https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv.

New-SPOSiteFileVersionExpirationReportJob -Identity https://contoso.sharepoint.com/sites/site1 -ReportUrl "https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv"  

Dans l’exemple suivant, un travail est mis en file d’attente pour générer un rapport limité à la bibliothèque à l’emplacement du rapport, https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv.

New-SPOListFileVersionExpirationReportJob -Site https://contoso.sharepoint.com/sites/site1 -List "Documents" -ReportUrl "https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv"

Vérifier la progression de la génération du rapport

Utilisez la Get-SPOListFileVersionExpirationReportJobProgress commande pour suivre la progression de la demande de génération de rapport.

L’exemple ci-dessous montre comment vous pouvez case activée si votre rapport délimité au site est entièrement rempli et prêt à être analysé. 

Get-SPOSiteFileVersionExpirationReportJobProgress -Identity https://contoso.sharepoint.com/sites/site1 -ReportUrl "https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv"

L’exemple ci-dessous montre comment vous pouvez case activée si votre rapport délimité à la bibliothèque est entièrement rempli et prêt à être analysé.  

Get-SPOListFileVersionExpirationReportJobProgress -Site https://contoso.sharepoint.com/sites/site1 -List "Documents" -ReportUrl "https://contoso.sharepoint.com/sites/sites1/reports/MyReports/VersionReport.csv"    

L’applet de commande retourne une réponse au format JSON. La réponse json retournée a une clé nommée status. Reportez-vous au tableau ci-dessous pour connaître l’une des valeurs attendues suivantes :

Réponse d’état JSON Explication
« completed » Le travail s’est terminé avec succès et le rapport est entièrement rempli.
« in_progress » Il y a un travail actif. Le rapport est partiellement rempli.
« no_report_found » Il n’y a pas de travaux actifs qui remplissent le fichier spécifié.
« échec » Le travail de génération du rapport a échoué en raison du message d’erreur. Vérifiez « error_message » pour le message d’erreur de l’échec.

Comprendre le fichier de rapport de version

Le rapport généré est au format CSV, chaque ligne correspond à une version de fichier. Voici un exemple de rapport d’expiration de version de fichier et de sa répartition des colonnes.

Capture d’écran du rapport d’expiration.

La première ligne est l’en-tête avec les identificateurs de colonne contenant les identificateurs de version de fichier, les informations sur les métadonnées de version et l’horodatage d’expiration. Les colonnes compactes sont signalées par .Compact un post-correctif qui ne répète pas les valeurs si deux lignes consécutives ont la même valeur. Les autres lignes représentent des versions de fichier, où chaque ligne représente une seule version.
Passons en revue la première version de fichier affichée dans ce rapport.

  • Les identificateurs de version de fichier : WebId, DocId, MajorVersionet MinorVersion identifient de manière unique chaque version de votre site SharePoint.

  • Identificateurs de métadonnées de version :WebUrl indique la version dans https://contoso.sharepoint.comet FileUrl indique que le fichier de cette version se trouve dans DocLib/MyDocument.docx. En d’autres termes, il se trouve dans une bibliothèque de documents appelée DocLib, tandis que le fichier se trouve dans le dossier racine de DocLib et est nommé MyDocument.docx.

  • Size indique que la version prend 92 246 octets de stockage.

  • Les deux colonnes suivantes indiquent ModifiedBy_UserIdModifiedBy_DisplayName que l’utilisateur Michelle Harris (avec l’ID d’utilisateur 6) a créé cette version.

  • LastModifiedDate indique que le contenu de la version a été modifié pour la dernière fois le 13 mars 2023 à 22:36:09 UTC. SnapshotDate affiche que la version est devenue une version historique le 20 mars 2023 à 16:56:51 UTC. IsSnapshotDateEstimatedmontre que SnapshotDate est la date de instantané réelle.

  • Identificateurs de planification d’expiration :CurrentExpirationDate indique que cette version est actuellement définie pour ne jamais expirer. AutomaticPolicyExpirationDate montre qu’en vertu de la stratégie d’expiration automatique, cette version est également définie sur n’expire jamais. TargetExpirationDate indique que si nous suivons cette planification pour le découpage, nous définirions cette version pour qu’elle n’expire jamais.

Remarque

Les versions de fichiers stockées dans la bibliothèque de conservation de conservation seront également incluses dans ce rapport.

Examinons la troisième version.

Les WebId valeurs et DocId sont vides, car ces colonnes sont des colonnes compactes, désignées par . Post-correctif compact , cela signifie qu’ils doivent avoir des valeurs. Si nous recherchons le dernier vide au-dessus de cette ligne, nous trouvons WebId en tant que 4c7a58c1-01f2-4fa3-a730-44081a44f689et DocId en tant que 18c3e09c-b5be-48e7-a754-7a2ce53e0999.

Nous pouvons également voir que le TargetExpirationDate est défini pour le 19 avril 2023 à 18:08:53 UTC. Cela signifie que si nous procédons à la suppression en fonction de cette planification, nous définirons la date d’expiration de cette version à cette heure.

Remarque

Toutes les heures de date sont représentées au format aller-retour. Pour plus d’informations, consultez Chaînes de format de date et d’heure standard - .NET | Microsoft Learn

Analyser le stockage des versions pour les sites

Avant de commencer votre analyse, vous devez mettre à jour la TargetExpirationDate colonne de votre fichier de rapport aux dates souhaitées, comme les versions qui doivent expirer. Là encore, si vous choisissez une date qui est dans le passé pour une version, cette version sera traitée comme « version qui avait déjà expiré » et sera supprimée immédiatement après avoir démarré le découpage.

Vous pouvez mettre à jour manuellement les dates dans en TargetExpirationDate modifiant le fichier csv. Toutefois, il se peut que vous ayez trop de lignes à mettre à jour manuellement. Pour mettre à jour la colonne en bloc, vous pouvez utiliser des formules Excel, ou vous pouvez également utiliser l’un des scripts PowerShell que nous avons fournis dans Tutoriel : Exécuter l’analyse « What-If ». Plus précisément, vous pouvez choisir un mode de découpage, exécuter le script correspondant pour obtenir un fichier CSV mis à jour avec TargetExpirationDate rempli en fonction de ce mode de découpage, puis continuer à partir de là.

Option 1 : Analyser le rapport à l’aide d’Excel

Ouvrez le classeur Excel partagé AnalyzeReportFile_Template.xlsx. Vous y trouverez les feuilles de calcul suivantes.

  • Configuration : utilisez cette feuille de calcul pour définir la plage de dates pour la génération des différentes vues de rapport.
  • Jeu de données : cette feuille de calcul est le jeu de données brut importé à partir du fichier de rapport. Différentes vues récapitulatives de rapports sont construites à partir de ce jeu de données.
  • Rapports prédéfinis : voici une liste de vues prédéfinies qui peuvent être utilisées pour comprendre l’impact de l’application du paramètre sélectionné sur les versions stockées sur le site :
    • Résumé : analysez l’état actuel du stockage de versions pour ce site et la distribution des versions supprimées sous les nouveaux paramètres.
    • Utilisateurs impactés : passez en revue les utilisateurs dont les versions seraient affectées sous les nouveaux paramètres.
    • Nombre de versions : tableau et graphique montrant le nombre de versions qui seront disponibles au fil du temps dans le cadre de la planification actuelle et le nombre de versions qui seront disponibles dans le cadre de la nouvelle planification.
    • Taille des versions expirées : comparez la taille des versions qui seront supprimées au fil du temps selon la planification actuelle et le nombre de versions qui seront disponibles dans le cadre de la nouvelle planification.
    • Analyse au niveau du fichier : passez en revue les suppressions de version au niveau du fichier sous les nouveaux paramètres.

Remplissez le classeur en procédant comme suit :

  1. Dans la feuille de calcul Configuration , entrez le chemin complet du fichier de rapport What-If dans la cellule B3.

    Capture d’écran de la feuille de calcul de configuration.

  2. Si vous souhaitez modifier la plage de dates des graphiques dans la feuille de calcul Nombre de versions disponibles ou la feuille de calcul Taille des versions expirées , modifiez les valeurs correspondantes dans les cellules B6, B7, B10 et/ou B11. C’est facultatif.

    Capture d’écran de la configuration de la version d’analyse.

  3. En haut d’Excel, sélectionnez l’onglet Données , puis dans le ruban, sélectionnez le bouton Actualiser tout .

    Capture d’écran de l’onglet Analyser les données de version.

  4. Dans la feuille de calcul Calculs , remplissez automatiquement les colonnes Nombre de versions et Nombre de versions restantes après suppression .

    Capture d’écran de la feuille de calcul 1.

    Capture d’écran de la feuille de calcul 2.

  5. Dans la feuille de calcul Utilisateurs impactés , remplissez automatiquement la colonne Nombre de versions supprimées .

    Capture d’écran de la feuille de calcul des utilisateurs concernés.

Toutes les feuilles de calcul doivent maintenant être à jour. Vous pouvez case activée les informations qui vous intéressent.

Option 2 : Analyser le rapport à l’aide de PowerShell

  1. Enregistrez le script en tant que fichier nommé AnalyzeReportFile.ps1.
# save this file as AnalyzeReportFile.ps1

Param(
  [Parameter(Mandatory=$true)][string] $ReportLocalFilePath,
  [Parameter(Mandatory=$false)][int]$ShowFilesWithFewerThanNVersions=10,
  [Parameter(Mandatory=$false)][DateTime]$TimelineStartDate=[DateTime]::Now,
  [Parameter(Mandatory=$false)][int]$TimelineStepDays=10,
  [Parameter(Mandatory=$false)][int]$TimelineNumSteps=10
)
function Import-Dataset($DatasetFilePath)
{
  $Dataset = Import-CSV $DatasetFilePath
  $Columns = $Dataset `
    | Get-Member -MemberType 'NoteProperty' `
    | Select-Object -ExpandProperty Name
  $CompactColumns = $Columns | Where-Object { $_ -Match ".Compact" }
   
  $Timer = [Diagnostics.Stopwatch]::StartNew()
  for ($RowIndex = 0; $RowIndex -lt $Dataset.Count; $RowIndex++)
  {
    if ($RowIndex -gt 0)
    {
      $PrevRow = $Dataset[$RowIndex-1]
    }
    $Row = $Dataset[$RowIndex]
   
    foreach ($ColName in $Columns)
    {
      if ([string]::IsNullOrEmpty($Row.$ColName))
      {
        if (($ColName -in $CompactColumns) -and ($RowIndex -gt 0))
        {
          $Row.$ColName = $PrevRow.$ColName
        }
        else
        {
          $Row.$ColName = $null
        }
      }
    }
   
    $Row."WebId.Compact" = [Guid]$Row."WebId.Compact"
    $Row."DocId.Compact" = [Guid]$Row."DocId.Compact"
    $Row."MajorVersion" = [Int32]$Row."MajorVersion"
    $Row."MinorVersion" = [Int32]$Row."MinorVersion"
    $Row."WebUrl.Compact" = [String]$Row."WebUrl.Compact"
    $Row."FileUrl.Compact" = [String]$Row."FileUrl.Compact"
    $Row."Size" = [Int64]$Row."Size"
    $Row."ModifiedBy_UserId.Compact" = [String]$Row."ModifiedBy_UserId.Compact"
    $Row."ModifiedBy_DisplayName.Compact" = [String]$Row."ModifiedBy_DisplayName.Compact"
    $Row."LastModifiedDate" = [DateTime]$Row."LastModifiedDate"
    $Row."SnapshotDate" = [DateTime]$Row."SnapshotDate"
    $Row."IsSnapshotDateEstimated" = [bool]$Row."IsSnapshotDateEstimated"
    $Row."CurrentExpirationDate" = [System.Nullable[DateTime]]$Row."CurrentExpirationDate"
    $Row."AutomaticPolicyExpirationDate" = [System.Nullable[DateTime]]$Row."AutomaticPolicyExpirationDate"
    $Row."TargetExpirationDate" = [System.Nullable[DateTime]]$Row."TargetExpirationDate"
    $Percent = [Math]::Ceiling(100 * $RowIndex / $Dataset.Count)
    Write-Progress `
      -Activity "Reading dataset" `
      -Status "$Percent% Complete ($($RowIndex + 1) / $($Dataset.Count) rows):" `
      -PercentComplete $Percent `
      -SecondsRemaining $(($Dataset.Count - ($RowIndex + 1)) / (($RowIndex + 1) / $Timer.Elapsed.Totalseconds))
  }
  $Timer.Stop()
  return $Dataset
}
function Get-NumVersionExpiresByDate($Dataset, $ColName, $DateCutoff)
{
  $VersionsExpired = $Dataset | Where-Object { ($null -ne $_.$ColName) -and ($_.$ColName -le $DateCutoff) }
  $IsTodayStr = ""
  If ((Get-Date).Date -eq ($DateCutoff).Date) 
  {
    $IsTodayStr = "*"
  }
  return [PSCustomObject]@{
    Today              = $IsTodayStr
    Date              = $DateCutoff
    NumberOfVersionsAvailable    = $Dataset.Count - $VersionsExpired.Count
    NumberOfVersionsExpired     = $VersionsExpired.Count
    SizeOfVersionsExpiredInBytes  = ($VersionsExpired | Measure-Object Size -Sum).Sum
  }
}
function Get-FilesWithFewerThanNVersions($Dataset, $NumVersions)
{
  $AvailableVersionsByFile = $Dataset `
    | Where-Object { ($null -eq $_.TargetExpirationDate) -or ($_.TargetExpirationDate -gt [DateTime]::Now) } `
    | Group-Object -Property WebId.Compact, DocId.Compact
  $AvailableFilesWithNotEnoughVersions = @{}
  # Files with some versions left but not enough
  $AvailableVersionsByFile `
    | Where-Object Count -lt $NumVersions `
    | ForEach-Object { $AvailableFilesWithNotEnoughVersions[$_.Name] = $_.Count }
  # Files with 0 versions left
  $Dataset `
    | Group-Object -Property WebId.Compact, DocId.Compact `
    | Where-Object { $AvailableVersionsByFile.Name -notcontains $_.Name } `
    | ForEach-Object { $AvailableFilesWithNotEnoughVersions[$_.Name] = 0 }
  # Stitch all of the data together
  return $Dataset `
    | Group-Object -Property WebId.Compact, DocId.Compact `
    | Where-Object Count -ge $NumVersions `
    | Where-Object { $AvailableFilesWithNotEnoughVersions.Contains($_.Name) } `
    | ForEach-Object `
      {
        $fileUrl = $_.Group[0]."WebUrl.Compact" + "/" + $_.Group[0]."FileUrl.Compact"
        $numberOfVersionsAvailableBeforeTrim = $_.Count
        $numberOfVersionsAvailableAfterTrim = $AvailableFilesWithNotEnoughVersions[$_.Name]
        $numberOfVersionsTrimmed = $numberOfVersionsAvailableBeforeTrim - $numberOfVersionsAvailableAfterTrim
        [PSObject]::new() | 
          Add-Member -PassThru -NotePropertyMembers ([Ordered]@{
            FileUrl = $fileUrl
            NumberOfVersionsAvailableBeforeTrim = $numberOfVersionsAvailableBeforeTrim
            NumberOfVersionsAvailableAfterTrim = $numberOfVersionsAvailableAfterTrim
            NumberOfVersionsTrimmed = $numberOfVersionsTrimmed
          })
      } `
    | Sort-Object -Property NumberOfVersionsAvailableAfterTrim
}
function Get-MostImpactedUsers($Dataset)
{
  $VersionsExpired = $Dataset | Where-Object { ($null -ne $_.TargetExpirationDate) -and ($_.TargetExpirationDate -le [DateTime]::Now) }
  return $VersionsExpired `
    | Group-Object -Property ModifiedBy_UserId.Compact `
    | Select-Object `
      @{ L = "UserId"; E = { $_.Group[0]."ModifiedBy_UserId.Compact" } }, `
      @{ L = "UserDisplayName"; E = { $_.Group[0]."ModifiedBy_DisplayName.Compact" } },
      @{ L = "NumberOfVersionsTrimmed"; E = { $_.Count } } `
    | Sort-Object -Property NumberOfVersionsTrimmed -Descending
}
$Dataset = Import-Dataset -DatasetFilePath $ReportLocalFilePath
$CurrentExpirationSummaryTable = @()
$TargetExpirationSummaryTable = @()
$Timer = [Diagnostics.Stopwatch]::StartNew()
for ($Step = 0; $Step -lt $TimelineNumSteps; $Step++)
{
  $DateCutOff = $TimelineStartDate.AddDays($TimelineStepDays * $Step)
  $CurrentExpirationSummaryTable += `
    Get-NumVersionExpiresByDate -Dataset $Dataset -ColName CurrentExpirationDate -DateCutoff $DateCutOff
  $TargetExpirationSummaryTable += `
    Get-NumVersionExpiresByDate -Dataset $Dataset -ColName TargetExpirationDate -DateCutoff $DateCutOff
}
$Timer.Stop()
Write-Host "===========================" -ForegroundColor Yellow
Write-Host "Current Expiration Schedule" -ForegroundColor Yellow
Write-Host "===========================" -ForegroundColor Yellow
$CurrentExpirationSummaryTable | Format-Table -Autosize | Out-String | Write-Host
Write-Host "Total elapsed seconds: $($Timer.Elapsed.TotalSeconds / 2)" -ForegroundColor Green
Write-Host
Write-Host "==========================" -ForegroundColor Yellow
Write-Host "Target Expiration Schedule" -ForegroundColor Yellow
Write-Host "==========================" -ForegroundColor Yellow
$TargetExpirationSummaryTable | Format-Table -Autosize | Out-String | Write-Host
Write-Host "Total elapsed seconds: $($Timer.Elapsed.TotalSeconds / 2)" -ForegroundColor Green
Write-Host
Write-Host "================================" -ForegroundColor Yellow
Write-Host "Files with Fewer Than $ShowFilesWithFewerThanNVersions Versions" -ForegroundColor Yellow
Write-Host "================================" -ForegroundColor Yellow
$Timer = [Diagnostics.Stopwatch]::StartNew()
Get-FilesWithFewerThanNVersions -Dataset $Dataset -NumVersions $ShowFilesWithFewerThanNVersions | Format-Table -Autosize | Out-String | Write-Host
$Timer.Stop()
Write-Host "Total elapsed seconds: $($Timer.Elapsed.TotalSeconds)" -ForegroundColor Green
Write-Host
Write-Host "==============" -ForegroundColor Yellow
Write-Host "Users Impacted" -ForegroundColor Yellow
Write-Host "==============" -ForegroundColor Yellow
$Timer = [Diagnostics.Stopwatch]::StartNew()
Get-MostImpactedUsers -Dataset $Dataset | Format-Table -Autosize | Out-String | Write-Host
$Timer.Stop()
Write-Host "Total elapsed seconds: $($Timer.Elapsed.TotalSeconds)" -ForegroundColor Green
Write-Host
  1. Ouvrez PowerShell et exécutez la commande suivante, en remplaçant les valeurs d’espace réservé par les valeurs appropriées.

Remarque

Utilisez PowerShell 7 pour exécuter les commandes. Vous pouvez installer PowerShell 7 en suivant ces instructions : Installation de PowerShell sur Windows - PowerShell | Microsoft Learn.

. “<path to AnalyzeReportFile.ps1>” –ReportLocalFilePath “<path to the file version expiration What-If report .csv file>”

Capture d’écran de la commande PowerShell Analyser le rapport.

  1. La sortie affiche quatre tables :
  • Planification d’expiration actuelle : ce tableau contient un résumé des séries chronologiques pour vos versions telles qu’elles sont. Il contient les colonnes suivantes :

    1. Date : la première colonne représente la date.
    2. NumberOfVersionsAvailable : nombre de versions disponibles à cette date dans le cadre de la planification actuelle.
    3. NumberOfVersionsExpired : nombre de versions ayant expiré à cette date dans le cadre de la planification actuelle.
    4. SizeOfVersionsExpiredMB : la taille des versions a expiré à cette date dans le cadre de la planification actuelle.

    Capture d’écran de la planification d’expiration actuelle.

  • Calendrier d’expiration cible : cette table est identique à la planification d’expiration actuelle, mais reflète plutôt la planification mise à jour. Ce tableau n’est utile que si vous souhaitez tester différents scénarios d’expiration en modifiant la colonne TargetExpirationDate dans le rapport d’expiration de la version de fichier.

    Capture d’écran de la planification de l’expiration de la cible.

  • Fichiers avec moins de 10 versions : liste des URL et nombre de versions avant et après la suppression pour les fichiers dont le nombre de versions est inférieur à 10 après la suppression immédiate (mais qui était supérieur à 10 avant la suppression immédiate).

    Capture d’écran des fichiers avec moins de 10 versions.

  • Utilisateurs impactés : utilisateurs dont les versions seraient immédiatement supprimées.

    Capture d’écran des utilisateurs impactés.

Si vous le souhaitez, vous pouvez ajuster les paramètres :

  • TimelineStartDate: date de début des tables 1 et 2 ci-dessus.
  • TimelineStepDays: nombre de jours entre les lignes des tables 1 et 2 ci-dessus.
  • TimelineNumSteps: nombre de lignes à calculer pour les tables 1 et 2 ci-dessus.
  • ShowFilesWithFewerThanNVersions: seuil du nombre de versions dans le tableau 3 ci-dessus.