How to purge items in a large Nintex Workflow History list
This applies to the following products: Nintex Workflow 2010, Nintex Workflow 2013.
If you have more than 5,000+ records in your Nintex workflow history list, you may need to review other options to purge these items as the GUI may fail its purge operation.This PowerShell script allows you to safely target and purge items from a workflow history list to keep the size down and manageable.
Using PowerShell to purge items
This script utilizes paging and indexing to specifically target each item and delete it. Paging helps throttle the traffic to your SQL server down by only deleting x number of items at a time before it rests and starts again. Indexing enables the targeting of items without the performance overhead of enumerating and/or querying a large collection of items.
Note
This script will not purge or delete data using any state, this will just remove everything from given date and time.
This script will not purge or delete data using any state, this will just remove everything from given date and time.
- #Load Assemblies
- Add-PSSnapin Microsoft.sharePoint.Powershell -erroraction SilentlyContinue
- [void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
- #Set site and list
- $web = Get-SPWeb "http://your site"
- $list = $web.Lists["NintexWorkflowHistory"]
- #### Number of days to keep WF history (-60 = last 60 days, -180 = 6 months)
- $DeleteBeforeDate = [Microsoft.SharePoint.Utilities.SPUtility]::CreateISO8601DateTimeFromSystemDateTime([DateTime]::Now.AddDays(-37))
- #CAML filters (last activity date), leave this line as it is.
- $caml='<Where> <Lt> <FieldRef Name="Occurred" /><Value Type="DateTime">{0}</Value> </Lt> </Where> ' -f $DeleteBeforeDate
- #Setup Query
- $query=new-object Microsoft.SharePoint.SPQuery
- $query.ViewAttributes = "Scope='Recursive'"
- #$query.RowLimit = 2000 #Uncomment to Limit the number of rows returned. (Useful on extremely large lists)
- $query.Query= $CAML
- $items=$list.GetItems($query)
- Write-Host "Number of items about to be deleted:" $items.Count
- #!!! Delete Items !!!!
- $items | % { $list.GetItemById($_.Id).Delete() }
- #Empty Recycle Bin
- write-host "Emptying Recycle Bin..."
- $web.RecycleBin.DeleteAll()
- #Dispose Thread
- $web.Dispose()

Join the conversation! Your thoughts help the community grow.