Cancel Workflows in SharePoint using PowerShell

Requirement: There was a large list with workflow attached to it. The SharePoint Development team came with a requirement to cancel multiple workflows running on these list items, nearly 2000!

While canceling workflows on an individual item is pretty straightforward, How about canceling workflows on 1000s of items? It would be a daunting task, isn’t it?

terminate workflow in sharepoint using powershell

Terminate Workflow in SharePoint using PowerShell:

Well, PowerShell can help to cancel workflows in SharePoint. If you ever have to cancel multiple running workflows on all list items, use this PowerShell script:

Cancel all workflows on a list:

$web = Get-SPWeb "https://your-sharepoint-site-url"

#List Name
$list = $web.Lists["Your-List-Name"]

# Iterate through all Items and all Workflows on Items
foreach ($item in $list.Items) 
 {
   foreach ($wf in $item.Workflows) 
     {
        #Cancel Workflows        
        [Microsoft.SharePoint.Workflow.SPWorkflowManager]::CancelWorkflow($wf)      
     }
  }

To cancel all errored workflows, use the condition as:

foreach ($item in $list.Items) 
 {
   foreach ($wf in $item.Workflows) 
     {
        if($wf.InternalState -match 'Error')
         {
            #Cancel Workflows        
            [Microsoft.SharePoint.Workflow.SPWorkflowManager]::CancelWorkflow($wf);      
         }
     }
 }

Cancel Workflow in SharePoint

Let’s target a particular workflow:

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

$web = Get-SPWeb "https://your-sharepoint-site-url"

#Get the List
$list = $web.Lists["Your-List-Name"]

#Get the specific workflow, Associated with the list
$WorkFlowToCancel = "Approval Workflow"

# Iterate through all Items and all Workflows on Items
foreach ($item in $list.Items) 
{
   foreach ($wf in $item.Workflows) 
     {
        #Check for the particular workflow
        if( ($wf.ParentAssociation.Name -eq $WorkFlowToCancel) -and ($wf.IsCompleted -ne $true) -and($wf.StatusText -ne "Canceled"  )) 
        {
            write-host "Previous workflow status:"  $wf.InternalState
            #Cancel Workflow
            [Microsoft.SharePoint.Workflow.SPWorkflowManager]::CancelWorkflow($wf)      
            write-host "Workflow Cancelled at $($list.title)! "
        }
     }
}

Related Post: How to Start a SharePoint Workflow using PowerShell

Salaudeen Rajack

Salaudeen Rajack is a SharePoint Architect with Two decades of SharePoint Experience. He loves sharing his knowledge and experiences with the SharePoint community, through his real-world articles!

2 thoughts on “Cancel Workflows in SharePoint using PowerShell

  • Hello

    Please advise what the script would be when wanting to cancel any ERRORED workflow instances done by a SITE WORKLOW.

    Reply
  • Why are you passing html code to your Get-SPWeb call? Wouldn’t this result in an error? Or is this something that your website is doing automatically to urls?
    Thanks!

    Reply

Leave a Reply