Suppression en masse d’éléments

SP2013

Bonjour à tous,

Aujourd’hui je vais vous parler de la suppression massive d’éléments dans SharePoint. Plusieurs possibilités existent mais la plus rapide reste l’utilisation d’un batch via PowerShell.

On peut trouver plusieurs sites/blogs expliquant comment créer le batch mais pour ceux que j’ai testé, j’ai toujours eu un petit quelque chose à modifier.

Exemple de sites :

http://bramnuyts.be/2013/05/16/remove-items-from-a-huge-sharepoint-list/

http://matthewyarlett.blogspot.com/2013/07/well-that-was-fun-bulk-deleting-items.html

http://sharepointnadeem.blogspot.com/2013/01/bulk-delete-items-in-sharepoint.html

http://florent.clairambault.fr/sharepoint-clean-a-huge-document-library

(soit dit en passant, merci à leurs auteur pour les explications utiles à la compréhension du fonctionnement ! )

En fait c’est généralement au niveau du paramètre « owsfileref » que les versions divergent. Certains ne le spécifient pas, d’autres oui mais avec différentes manières.

Pour ma part voici le code que j’utilise et qui fonctionne pour les documents library et custom list.

Attention ! Faites attention à la ligne

$batch= »« 

Vous pouvez voir que les valeurs 1.0 et UTF-8 sont quotées non pas avec un simple  mais avec ` ». Je ne sais pas pourquoi mais le simple  déclenche une erreur « Exception calling « ProcessBatchData » with « 1 » argument(s) »lors de l’exécution du script !


Add-PSSnapin "Microsoft.SharePoint.PowerShell"
$urlSite = “http://serverurl”

$listname = “Test”

write-host "Opening site..."

$web=get-spweb $urlSite

write-host "Opening list..."

$list=$web.lists | ? { $_.title -eq $listName}

$spQuery= New-Object Microsoft.SharePoint.SPQuery

$spQuery.ViewAttributes="Scope='RecursiveAll'";

$spQuery.RowLimit = 2000

$caml = ""

$spQuery.Query=$caml

do

{

$listItems = $list.GetItems($spQuery)

$count=$listItems.Count

$spQuery.ListItemCollectionPosition= $listItems.ListItemCollectionPosition

$batch=""

$j=0

for($j=0;$j -lt $count; $j++)

{

$item=$listItems[$j]

$command=""

$command+="$($list.ID)"

$command+="$($item.ID)"

$command+="$($web.Url)/$($item.Url)"

$command+="Delete"

$command+=""

$batch+=$command

if($i -ge $count){break}

}

$batch+=""

write-host "Sending batch..."

$result=$web.ProcessBatchData($batch)

write-host "Emptying Recycle Bin..."

$web.RecycleBin.DeleteAll()

}

while($spQuery.ListItemCollectionPosition -ne $null)

$web.Dispose()

write-host "Process finished"

En espérant que ça aide.

Christopher.

Cet article, publié dans SharePoint 2010, SharePoint 2013, est tagué , . Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s