SharePoint: Lister et supprimer les SPListItemVersions en utilisant PowerShell (fr-FR)
Note : Cet article est une traduction; voir en fin de l'article concernant l'article d'origine.
Introduction
Lorsque le contrôle de version est activé sur une bibliothèque de documents ou une liste SharePoint, il y a des moments où vous devrez déclarer le nombre de versions d'éléments de liste, ou supprimer les versions qui dépassent un seuil. Ces scénarios peuvent se produire si :
- Les limites de version (pour le nombre maximal de versions majeures/mineures) n'étaient pas configurées, et la liste a de trop nombreuses versions
- Les limites de version sont appliquées ou réduites, et vous avez besoin de supprimer a posteriori toutes les versions d'une liste qui dépassent le nouveau seuil *
- Vous effectuez une mise à niveau, et vous voulez réguler les versions des pages de la bibliothèque de pages (sur un site de publication)
- Vous souhaitez exécuter un rapport pour déterminer le nombre d'éléments dans une liste ayant plus de « x » nombre de versions
* Lorsque les paramètres de version sont modifiés sur une liste, les versions existantes des éléments de la liste ne sont pas modifiées jusqu'à ce que l'élément soit modifié. Par conséquent, si vous réduisez le nombre maximal de versions à conserver dans une liste, les modifications ne prennent effet que sur les nouveaux éléments, ou lorsque les éléments existants sont mis à jour.
Un moyen facile pour accomplir ces tâches est d'utiliser PowerShell pour parcourir les éléments des listes, en inspectant les versions des éléments. Cet article montre comment faire cela.
Télécharger le Script
Il y a un script qui contient un certain nombre de fonctions pour lister et supprimer les versions des éléments de liste, et peut être téléchargé depuis la galerie Microsoft TechNet, ici : List or Delete excess ListItem Versions in a SharePoint List or Document Library
Exemple 1: Lister les versions de tous les ��léments de la bibliothèque http://corporate/pages
- Récupérez le SPWeb
qui contient la liste nous voulons inspecter
- Récupérez le SPList
du SPWeb que nous voulons inspecter
- Copiez le SPListItemsCollection
dans une variable
- Itérer sur la SPListItemCollection et lister le nombre de versions de chaque élément
$w = get-spweb "http://corporate"
$l = $w.Lists.TryGetList("Pages");
$items = $l.Items;
$f = $l.Fields["Check In Comment"];
$listType = $l.GetType().Name;
foreach($item in $items)
{
$itemTitle = $item.Title;
if($listType -eq "SPDocumentLibrary")
{
if($itemTitle -eq ""){$itemTitle = $item["Name"];}
}
if($item.Versions.Count -gt 0){
$vtr = $item.Versions.Count;
Write-Host "$itemTitle, has $vtr versions" -foregroundcolor Green;
}
}
Exemple 2: Supprimer toutes les versions supérieures à 5 (en ignorant les versions mineures)
- Récupérez le SPWeb qui contient la liste que nous voulons inspecter
- Récupérez le SPList du SPWeb que nous voulons inspecter
- Copiez la SPListItemsCollection dans une variable
- Itérez sur la SPListItemCollection et supprimer les versions majeures d'éléments qui dépassent 5 versions
$w = get-spweb "http://corporate"
$l = $w.Lists.TryGetList("Pages");
$items = $l.Items;
$f = $l.Fields["Check In Comment"];
$listType = $l.GetType().Name;
foreach($item in $items)
{
$itemTitle = $item.Title;
if($listType -eq "SPDocumentLibrary")
{
if($itemTitle -eq ""){$itemTitle = $item["Name"];}
}
if($item.Versions.Count -gt 5){
$vtr = $item.Versions.Count;
Write-Host "$itemTitle, has $vtr versions" -foregroundcolor Green;
while($vtr -gt 5){
$vtr--;
[Microsoft.SharePoint.SPListItemVersion]$iv = $item.Versions[$vtr];
$versionNumber = $iv.VersionLabel;
if(!$iv.VersionLabel.EndsWith(".0"))
{
continue;
}
Write-Host "$itemTitle : Deleted version $versionNumber" -foregroundcolor Yellow;
$iv.Delete();
}
}
}
Exemple 3: Un exemple plus avancé, répertoriant les versions de tous les éléments de la bibliothèque http://corporate/pages, y compris les commentaires, le créateur de l'élément et l'auteur de la version
- Récupérez le SPWeb qui contient la liste que nous voulons inspecter
- Récupérez le SPList du SPWeb que nous voulons inspecter
- Récupérez une référence au champ « Commentaires d'archivage ». Ce champ est présent dans les bibliothèques de documents et sera utilisé plus tard pour la valeur de chaque version de commentaire d'archivage.
- Copiez la SPListItemsCollection dans une variable
- Itérez sur la SPListItemCollection et les informations de version, en utilisant la propriété SPListItem.Versions
- Pour chaque version, castez l'objet renvoyé de SPListItem.Version[index] en un objet Microsoft.SharePoint.SPListItemVersion.
- En utilisant l'objet Microsoft.SharePoint.SPListItemVersion, récupérez l'étiquette de version (numéro de version), l'auteur de la version et le commentaire de version.
[Note] Pour obtenir le commentaire de version, vous devez utiliser la méthode GetVersionFromIDde la collection SPListItem.File.Versions. Cette propriété renvoie un objet SPFileVersion, qui contient la propriété CheckInComment
.
$w = get-spweb "http://corporate"
$l = $w.Lists.TryGetList("Pages");
$items = $l.Items;
$f = $l.Fields["Check In Comment"];
$listType = $l.GetType().Name;
foreach($item in $items)
{
$itemTitle = $item.Title;
if($listType -eq "SPDocumentLibrary")
{
if($itemTitle -eq ""){$itemTitle = $item["Name"];}
}
if($item.Versions.Count -gt 0){
$vtr = $item.Versions.Count;
$itemAuthor = ($item.Fields["Created By"]).GetFieldValueAsText($item["Created By"]);
Write-Host "$itemTitle, has $vtr versions. Created By: $itemAuthor" -foregroundcolor Green;
while($vtr -gt 0){
$vtr--;
[Microsoft.SharePoint.SPListItemVersion]$iv = $item.Versions[$vtr];
$versionNumber = $iv.VersionLabel;
$versionAuthor = $iv.CreatedBy.User.DisplayName;
$comment="";
if($f -ne $null)
{
if($iv.IsCurrentVersion)
{
$comment = "Comment: "+($f.GetFieldValueAsText($item.Versions.GetVersionFromID($iv.VersionId)["Check In Comment"])).Replace("`r`n"," ").Replace("`n"," ");
}
else
{
$comment = "Comment: "+($f.GetFieldValueAsText($item.File.Versions.GetVersionFromID($iv.VersionId).CheckInComment)).Replace("`r`n"," ").Replace("`n"," ");
}
}
Write-Host ([String]::Format("$itemTitle, version: $versionNumber edited by: $versionAuthor {0}", $comment)) -foregroundcolor Cyan;
}
}
}
Références
- Du Forum (List Version History Programatically)
- Du Forum (Limit versioning is not effective)
- Le contenu original de cet article provient du blog de Matthew Yarlett
, et peut être consulté ici : Listing and Deleting SharePoint SPListItem Versions Using PowerShell
Autres langues
Cet article est disponible dans les langues suivantes :