Finding Workflows with PowerShell

Document created by butlerj Support on Nov 20, 2018
Version 1Show Document
  • View in full screen mode
TOPIC
How to find all workflows in a farm, using PowerShell. 
INSTRUCTIONS
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
ADDITIONAL INFORMATION
Note:
  • 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.
RELATED LINKS

Attachments

    Outcomes