Saltar al contenido

Sharepoint: cómo eliminar todos los elementos de una lista con PowerShell

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *