Delete all SharePoint list items with PowerShell

Did you ever wanted to quickly delete all items from a SharePoint list without having to run into complex scenarios?
This can be simply achieved using PnP Powershell (obviously!). And it fits in a single line!

If you are looking for options to delete documents from SharePoint document libraries, maybe this post can help.

Delete SharePoint list items

Connect to the site using Connect-PnPOnline and then run:

Get-PnPList -Identity Lists/MyList | Get-PnPListItem -PageSize 100 -ScriptBlock { Param($items) 
$items.Context.ExecuteQuery() } | % {$_.DeleteObject()}

7 thoughts on “Delete all SharePoint list items with PowerShell

  1. Hello, Joel
    Hope you are doing well.

    And how about doing a Filter on $Items before a deleting action ??

    Warm regards.

  2. Hi Joel,

    I have the same problem and at first came to the same solution. But then I thought:
    “$_.DeleteObject()” runs for each item… Is there a way to run “delete” on the server side in a batches?
    So i tried:
    Get-PnPListItem -List $list -Fields “ID” -PageSize 100 -ScriptBlock { Param($items) $items | Sort-Object -Descending | ForEach-Object{ $_.DeleteObject() } }
    and it worked. Thougts?

  3. Hi Vladilen,

    That looks fine to me and may be much better in terms of performance. Have you tried to delete 1000+ items to ensure that it does not time out? If not, that’s great and thanks for sharing here

  4. I have tried the script to delete more 300k items in a list and I had issues with time out with errors like

    Get-PnPListItem : The collection has not been initialized. It has not been requested or the request has not been executed. It may need to be explicitly requested.
    At C:\Users\rauckloo\Scripts\deleteAllItemsFromLists.ps1:24 char:1
    + Get-PnPListItem -List $listName -Fields “ID” -PageSize 100 -ScriptBlo …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : WriteError: (:) [Get-PnPListItem], CollectionNotInitializedException
    + FullyQualifiedErrorId : EXCEPTION,PnP.PowerShell.Commands.Lists.GetListItem

    Each time, I encountered the error at varying amount of times, I just re run the script again. It took +7 hours to delete 330k items from a list. Also if the list has less items the page size specified, e.g. Page size is 10 and number of items remaining in list is 5, the 5 items don’t get deleted.

    1. Hi Rashmee
      Thanks for the feedback, the script was never really tested with such large numbers.
      I believe something like the following would have a better performance

      Get-PnPList -Identity $ListName | Get-PnPListItem -PageSize 100 -ScriptBlock {
      Param($items) Invoke-PnPQuery } | ForEach-Object {$_.Recycle()
      }
      #Read more: https://www.sharepointdiary.com/2015/10/delete-all-list-items-in-sharepoint-online-using-powershell.html#ixzz77tBGiXom

Leave a Reply

Your email address will not be published.