Showing results for 
Search instead for 
Did you mean: 

Finding Workflows with PowerShell

How to find all workflows in a farm, using PowerShell. 
Run the following script to build a report of all the workflows within the farm:
#Adding SharePoint Powershell Snapin Add-PSSnapin Microsoft.SharePoint.PowerShell -EA silentlycontinue  # The Line below will suppress error messages, uncomment if you are seeing errors but still receiving results.  #$ErrorAction = 'silentlycontinue'   # Loading SharePoint and Nintex Objects into the PS session [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") [void][System.Reflection.Assembly]::LoadWithPartialName("Nintex.Workflow") [void][System.Reflection.Assembly]::LoadWithPartialName("Nintex.Workflow.SupportConsole") [void][System.Reflection.Assembly]::LoadWithPartialName("Nintex.Workflow.Administration") [void][System.Reflection.Assembly]::LoadWithPartialName("Nintex.Forms.SharePoint.Administration")  # Grab Nintex Config database name  $CFGDB = [Nintex.Workflow.Administration.ConfigurationDatabase]::OpenConfigDataBase().Database  # Creating instance of .NET SQL client $cmd = New-Object -TypeName System.Data.SqlClient.SqlCommand  $cmd.CommandType = [System.Data.CommandType]::Text  # Begin SQL Query $cmd.CommandText = "SELECT                i.WorkflowName,                i.SiteID,                i.WebID,                i.listid,       pw.Author FROM dbo.WorkflowInstance I inner join WorkflowProgress P                ON I.InstanceID = P.InstanceID Inner join [$CFGDB].dbo.publishedworkflows pw on i.WorkflowID = pw.WorkflowId GROUP BY GROUPING SETS((i.siteid, i.webid, i.listid, i.workflowname, pw.Author), ());"   $indexes = @()  # Call to find all Nintex Content Databases in the Nintex Configuration Database, then execute the above query against each.  foreach ($database in [Nintex.Workflow.Administration.ConfigurationDatabase]::GetConfigurationDatabase().ContentDatabases) {  $reader = $database.ExecuteReader($cmd)  # Creating a table while($reader.Read()) { $row = New-Object System.Object  if(![string]::IsNullOrEmpty($reader["SiteID"])){ $Site = $(Get-SPSite -identity $reader["SiteID"]) }  if(![string]::IsNullOrEmpty($reader["WebID"])){ $SubSite = $Site.Allwebs[[Guid]"$($reader["WebID"])"] } if(![string]::IsNullOrEmpty($reader["ListID"])){ $List = $SubSite.Lists[[Guid]"$($reader["ListID"])"] }  #Adding Query results to table object $row | Add-Member -MemberType NoteProperty -Name "Workflow Name" -Value $reader["WorkflowName"] $row | add-member -MemberType NoteProperty -Name "Database" -value $Site.ContentDatabase.Name $row | Add-Member -MemberType NoteProperty -Name "Site Collection" -Value $Site.Url $row | Add-Member -MemberType NoteProperty -Name "Subsite" -Value $SubSite $row | Add-Member -MemberType NoteProperty -Name "List" -Value $List.title $row | Add-Member -MemberType NoteProperty -Name "Author" -Value $reader["Author"]  $indexes += $row } }  #Print results on screen $indexes  | FT -autosize Write-host "Total Workflows in all DataBases:" $indexes.Count
  • Workflows that have been designed, but never run, will not show in the results as there is no record of them in the Nintex database.
  • If a purge has been recently performed on the Nintex databases, the workflows might not show up.
  • If errors occur when running the script, allow the script to complete. The script uses what is located in the Nintex database and resolves certain information, such as SiteID, Site collection URL, etc., and might report an error if a Site Collection, Site, List and/or workflow is not found. This will not affect the overall results of the report.
Labels: (1)
Version history
Revision #:
1 of 1
Last update:
‎11-20-2018 01:03 PM
Updated by: