cancel
Showing results for 
Search instead for 
Did you mean: 

Know Your Workflow

Not applicable
20 26 14.2K

Introducing the Know Your Workflow Script

Hello Community, and our Nintex Workflow for SharePoint users!

I’d like to tell you about Know Your Workflow, this is a script we’ve created that will provide insight to help shape your workflow practice.

It's a cool script we’ve built to help you inventory and measure all workflows across your environment. The output from this script will help you understand what actions, workflows, and instances are being executed. This insight can help you scale your workflow practice and determine future strategy such as assessing whether or not you’re ready to migrate to Office 365

What is it?

It’s a script that captures workflow telemetry.

What data does it collect?

  • Number of workflows published (average)
  • Number of workflow instances (executions per workflow)
  • Number of actions per workflow
  • Frequency distribution of actions used across all workflow
  • Number of workflows per Site/Site Collection
  • Number of Site Collections

What data doesn’t it collect?

Don’t worry, if it doesn’t have to do with Nintex or workflows, it’s not being collected.

So what's in it for you?

You'll be able to gain more insight into how your organization uses Nintex Workflow:

  • Understand what actions, workflows and instances are being executed in your environment
  • Gauge the use and size of workflows within your organization
  • Determine what workflows are ready to migrate to the cloud
  • Compare your workflow practice against others

Wouldn’t this information help Nintex too?

Yes, the output files from the script would help us better serve you as well as guide our future development efforts. Your submission will be shared with our teams here at Nintex such as Support and Development.

Continued insight

During the workday, it can be tough to find time to dive in and analyze the workflows you’ve created with Nintex Workflow for SharePoint. But that information can lead to smarter and faster decision-making. Know Your Workflow will give you knowledge to help shape your workflow practice.

How do I participate?

  1. Download the script and have a look. We’ve included documentation with the script that explains exactly what is being gathered and what the output looks like.
  2. Once you have run the script, you can upload the script result here.

If you any questions, post them below!

26 Comments
burkslm
Nintex Newbie

I'd love to do this however most developers wouldn't be able to do this due to the security in their environments.

akrasheninnikov
Nintex Newbie

I'll definitely take a look. If it's safe to run, we might get valuable insight, and, looks like we are not obliged to upload the result if it could compromise our security.

akrasheninnikov
Nintex Newbie

whoa, that's rude! is that an anti-Russian sanction? ;-) That was a joke.

Replace-UnicodeCharacters {

([string]$inputString, [char]$replaceChar)

$value = [Text.Encoding]::ASCII.GetString([Text.Encoding]::GetEncoding("Cyrillic").GetBytes($inputString))

$value.replace('?',$replaceChar)

aaron_labiosa
Nintex Newbie

HILARIOUS!

Not applicable

cool

Community Manager Community Manager
Community Manager

Ran this in my test environment and umm.... Quite disappointed by all the users who have bad workflow practices.  I was appalled by the number of canceled and errored workflows out there. 

Someone will get this and think its funny

aaron_labiosa
Nintex Newbie

I almost choked on my water! LOL!

rencygonzalez
Nintex Newbie

Yup same here unfortunately

jmoore
Nintex Newbie

Disappointed that Nintex couldn't be bothered to sign the script. They should enter me in the drawing for trying. In fact I don't think having a drawing that you cannot just enter is illegal.

Community Manager Community Manager
Community Manager

Josh, not sure I follow your comment.  Is there something that is not working for you?

Not applicable

Script are not wrong for me any specific configuration required

jmoore
Nintex Newbie

It is a powershell script and it is unsigned. Our group policy will only allow PS scripts to run that are remote signed. There are others above who imply they are in the same situation. So I wasted an hour trying to run your script.

You guys should learn how to sign your scripts, and add me to the contest now.

jmoore
Nintex Newbie

When I put in a support ticket about it they told me to buzz off, but in a nice way.

Subject: RE: You’re Invited, Know Your Workflow Program [ ref:_00D90q6Cb._50090jQYVU:ref ]

Hi Joshua,

Apologies but this is just a trial version of how to check your workflow using the powershell script that was downloaded from the website. Our Product team created this script and at this time they can't sign the script. I will bring this issue up to them and hopefully in the near future if another version comes the  issue will be resolved.

Best Regards

Not applicable

Hey everyone. We've updated the Know Your Workflow script with a signed version.
You can get it here: http://info.nintex.com/workflowscript.html

Thanks for the feedback.

Regards,
KC

Community Manager Community Manager
Community Manager

Thanks Kelly...

pcoggins
Nintex Newbie

I ran the script on all our environment. Only ran into a few errors in our largest environment. I included a comment when submitting and also opened a Nintex Support ticket to see if they can help. As for the free pass to the Ignite workshop. I am not going to Ignite, but a co-worker is. Can I give that pass to them?

Not applicable

Hey Paul,

Here's a sign up link for the Workflow Ignited workshop.

bschott
Nintex Newbie

Did anyone have any troubles with running the script on their larger SharePoint Farms? If so I would be interested in how you broke down the reports into time-frames small enough to run and more importantly how are you making use of the data now that you have it. We are really struggling with this. The data is no good without an easy way of aggregating it all together so that more visual and meaningful reports can be generated.

Not applicable

Hi all,

It has gone quiet on this thread for a while.  I am the new Territory Manager in Australasia for Nintex.  I would be very interested to hear from the community on how the data from this 'Know Your Workflow' analysis can be used to take back to the business units/users and improve current processes/workflows, and more importantly to investigate broader opportunities to utilize workflow technology/increase overall efficiency in the business.  I look forward to hearing from you.

Regards,

Abel.

bschott
Nintex Newbie

Abel as mentioned in the post above yours the PowerShell is awesome but without a way to aggregate and present the data generated by the PowerShell in a meaningful and easily consumable way the opportunities you mention are slim to none.

Brian

Community Manager Community Manager
Community Manager

Everyone, I wanted to post a thought to see what anyone else thinks.  Should Nintex try to embed or integrate the Know Your Workflow reports/scripts within the actually tool instead of keeping it as a standalone?

Ideally a user other than someone with farm level access could run the commands to generate reports if possible.  Thoughts?

sharepointfranc
Nintex Newbie

Eric Harris In response to your July 2015 question, is it fair to say that this has already been integrated in Workflow for Office 365 ?  (OOB Workflow Health)

Alternatively I was looking for a way to see all my workflows in Office 365 tenant, remove PowerShell possibly.

bigdpnc
Nintex Newbie

so far the script is very cool, one question I have is can you get the script to display the url of the site for the NWUsageStats-Nintex_Oneguggenheim-WorkflowStatistics output file?

these are the columns I see.

WorkflowIDWorkflowNameMaxActionExecutionsMinActionExecutionsAvgActionExecutionsMaxDesignerActionsUniqueInitiatorsLastRunDateMaxRunDurationSecondsMinRunDurationSecondsTotalInstancesRun
Not applicable

Does this work on SP2007 as well?

Would be great if it would.

Also we are planning a movement from Nintex on sp2007 to the O365 environment.

Given that some of the workflow actions are not supported, we wanted to know if there is a way to get all the activities used on all the workflows on the farm which would help identify how many workflows are impacted because of this migration.

It would really help if some script like this would exist.

jaapsteenis
Nintex Newbie

I need to have the Site URL, List URL (Name) in the report. Can someone tell me if this possible ?

Or a separate report with WorkflowID - Site URL - Name - List Name

Thanks

Jaap

jmoore
Nintex Newbie

If you know SQL you can look at the script and query your Nintex database directly, but all the references to sites and workflows are GUIDs, so you would need to know where to look those up in your content databases. More than I care to know at this time.

We need to know which workflows are running and which ones errored. I know the Enterprise edition has web parts for this but we have not bought that yet. Here is a powershell script I cobbled together to iterate over some project sites and look at a task list called requirements and send me a URL to all items that have running or errored workflows. It is not 100% tested, and lacks the names of the running workflows. All our workflows are site collection resuable workflow templates so it is not clear where you would find the workflow associations, but if you are just running site workflows you can probably get $spweb.workflowassociations, and then use the $item.workflow.associationId to get the name of the workflow from the association.

if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null )
{
            Add-PSSnapin Microsoft.SharePoint.PowerShell
}          

###########################
# Main
###########################
cls

$spParentWeb = Get-SPWeb "http://site-collection/site/"
$dt = Get-Date

$op =  "Workflows running on Requirements as of $dt`n`n"

Foreach($spWeb in $spParentWeb.Webs) {
        $found = $false
        $rwfs = ""
        foreach ($item in $spWeb.Lists["Requirements"].Items)
        {
            foreach ($workflow in $item.Workflows)
            {
                if(($workflow | where {$_.InternalState -eq "Running"}) -ne $null)
                {
                    $itemUrl = "{0}/Lists/Requirements/dispform.aspx?id={1}`n" -f $spWeb.Url, $item.Id
                    $rwfs = $rwfs + ("   item: {0}`n   started by: {1}`n   Due Date: {2}`n   started:  {3}`n   Status: {4}`n   Workflow Name:{5}`n{6}`n" -f $item.Title, $workflow.AuthorUser, $item["Due Date"], $workflow.Created.ToLocalTime(), $workflow.InternalState, $wfName, $itemUrl )
                    $found = $true
                }
            }
        }
        if ($found) {  
            $op = $op + "`n`nSITE: $spWeb`n" + $spWeb.Url + "`n"
            $op = $op + $rwfs
        }
}

$op = $op + "`n`n`n===============================================================================`n`n"

$op = $op + "Workflows Errored on Requirements as of $dt`n`n"

Foreach($spWeb in $spParentWeb.Webs) {
        $found = $false
        $rwfs = ""
        foreach ($item in $spWeb.Lists["Requirements"].Items)
        {
            foreach ($workflow in $item.Workflows)
            {
                if(($workflow | where {$_.InternalState -Like "Error"}) -ne $null)
                {
                    $itemUrl = "{0}/Lists/Requirements/dispform.aspx?id={1}`n" -f $spWeb.Url, $item.Id
                    $rwfs = $rwfs + ("   item: {0}`n   started by: {1}`n   Due Date: {2}`n   started:  {3}`n   Status: {4}`n   Workflow Name:{5}`n{6}`n" -f $item.Title, $workflow.AuthorUser, $item["Due Date"], $workflow.Created.ToLocalTime(), $workflow.InternalState, $wfName, $itemUrl )
                    $found = $true
                }
            }
        }
        if ($found) {  
            $op = $op + "`n`nSITE: $spWeb`n" + $spWeb.Url + "`n"
            $op = $op + $rwfs
        }
}

$spWeb.Dispose()
Write-Host $op

Send-MailMessage -To "pso_admin@mydomain.com" -Subject "Requirements Workflows" -Body $op -From "pso_admin@mydomain.com" -SMTP "smtp.mydomain.com"