Puede darse el caso de que encuentres algún fallo en tu código o trabajo, recuerda probar siempre en un entorno de testing antes aplicar el código al proyecto final.
Solución:
Hice un intento de convertir la respuesta de Servy en PowerShell. Parece funcionar para mí, pero estaría interesado en cualquier comentario.
[System.Reflection.Assembly]::Load("Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
[System.Reflection.Assembly]::Load("Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
[System.Reflection.Assembly]::Load("Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
[System.Reflection.Assembly]::Load("System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
write-host
# Enter your configuration here
$siteUrl = "http://mysharepointsite.example.com/"
$listName = "Name of my list"
$batchSize = 1000
write-host "Opening web at $siteUrl..."
$site = new-object Microsoft.SharePoint.SPSite($siteUrl)
$web = $site.OpenWeb()
write-host "Web is: $($web.Title)"
$list = $web.Lists[$listName];
write-host "List is: $($list.Title)"
while ($list.ItemCount -gt 0)
write-host "Item count: $($list.ItemCount)"
$batch = ""
$i = 0
foreach ($item in $list.Items)
$i++
write-host "`rProcessing ID: $($item.ID) ($i of $batchSize)" -nonewline
$batch += "$($list.ID) $($item.ID) Delete $($item.File.ServerRelativeUrl) "
if ($i -ge $batchSize) break
$batch += " "
write-host
write-host "Sending batch..."
# We execute it
$result = $web.ProcessBatchData($batch)
write-host "Emptying Recycle Bin..."
# We remove items from recyclebin
$web.RecycleBin.DeleteAll()
write-host
$list.Update()
write-host "Done."
El enfoque de eliminar la lista y volver a crear la lista es el más rápido y eficiente (ya que está eliminando todos los elementos de la lista):
Get-SPWeb $FooUrl | % $_.Lists.Delete([System.Guid]$_.Lists["FooList"].ID)
Lo anterior elimina la lista y luego puede volver a crear la lista con su plantilla, etc.
Tengo un código muy similar con una diferencia de código y el mío es bastante rápido.
Cambio
$collListItems.Delete($intIndex);
a
$collListItems[$intIndex].Delete()
Creo que agregando; al final de cada línea es opcional en PS.
Comentarios y puntuaciones
Si te sientes impulsado, puedes dejar una crónica acerca de qué te ha parecido este artículo.