Max Melcher

2 minute read

Previously I had a little console app to efficiently empty large SharePoint lists. Today I converted it to powershell.

SharePoint Online? Read this: Efficiently empty a large Sharepoint Online List

Compared to the simple item by item delete with item.Delete() its 30 times faster; on my dev machine it deletes ~30 items per second. It works for SharePoint 2010 and should  for 2013 (not tested, yet).


if ($weburl -eq $null -or $listname -eq $null)
    write-host -foregroundcolor red "-weburl or -listname are null."
Add-PSSnapin Microsoft.SharePoint.Powershell -EA 0
$web = get-spweb $weburl
$list = $web.lists[$listname]
$stringbuilder = new-object System.Text.StringBuilder

    $stringbuilder.Append("") > $null
    $spQuery = New-Object Microsoft.SharePoint.SPQuery
    $spQuery.ViewFieldsOnly = $true
    $items = $list.GetItems($spQuery);
    $count = $items.Count
    while ($i -le ($count-1))
        write-host $i
        $item = $items[$i]
        $stringbuilder.AppendFormat("", $i) > $null
        $stringbuilder.AppendFormat("{0}", $list.ID) > $null
        $stringbuilder.AppendFormat("{0}", $item.Id) > $null
        $stringbuilder.Append("Delete") > $null
        $stringbuilder.Append("") > $null
    $stringbuilder.Append("") > $null
    $web.ProcessBatchData($stringbuilder.ToString()) > $null
    Write-Host -ForegroundColor Red $_.Exception.ToString()
write-host -ForegroundColor Green "done."


Delete-Items.ps1 -weburl [url of web] -listname [name of list]

Further improvements

I think if the list is really huge (100k items or greater) the items should be deleted in batches.

I have not tried it with a document library, maybe there are issues. If there are issues, please leave a comment!


There is no way back – if you start the script there is no “ARE YOU SURE?” – all data is gone in a very short time.

comments powered by Disqus