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
- Identifiez le site SharePoint, le compte OneDrive ou la bibliothèque de documents dont vous souhaitez comprendre l’utilisation du stockage de versions.
- Choisissez un emplacement dans la bibliothèque de documents SharePoint dans lequel vous souhaitez enregistrer le rapport.
- Téléchargez la dernière version de SharePoint Online Management Shell.
Remarque
- Le fichier de rapport est généré à l’emplacement de rapport spécifié.
- L’emplacement du rapport doit se trouver dans une bibliothèque de documents SharePoint elle-même.
- 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.
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
,MajorVersion
etMinorVersion
identifient de manière unique chaque version de votre site SharePoint.Identificateurs de métadonnées de version :
WebUrl
indique la version danshttps://contoso.sharepoint.com
etFileUrl
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éeDocLib
, tandis que le fichier se trouve dans le dossier racine deDocLib
et est nommé MyDocument.docx.Size
indique que la version prend 92 246 octets de stockage.Les deux colonnes suivantes indiquent
ModifiedBy_UserId
ModifiedBy_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.IsSnapshotDateEstimated
montre queSnapshotDate
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-44081a44f689
et 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 :
Dans la feuille de calcul Configuration , entrez le chemin complet du fichier de rapport What-If dans la cellule B3.
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.
En haut d’Excel, sélectionnez l’onglet Données , puis dans le ruban, sélectionnez le bouton Actualiser tout .
Dans la feuille de calcul Calculs , remplissez automatiquement les colonnes Nombre de versions et Nombre de versions restantes après suppression .
Dans la feuille de calcul Utilisateurs impactés , remplissez automatiquement la colonne Nombre de versions supprimées .
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
- 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
- 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>”
- 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 :
- Date : la première colonne représente la date.
- NumberOfVersionsAvailable : nombre de versions disponibles à cette date dans le cadre de la planification actuelle.
- NumberOfVersionsExpired : nombre de versions ayant expiré à cette date dans le cadre de la planification actuelle.
- SizeOfVersionsExpiredMB : la taille des versions a expiré à cette date dans le cadre de la planification 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.
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).
Utilisateurs impactés : utilisateurs dont les versions seraient immédiatement supprimées.
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.