I needed a way to programmatically get all of the workflows from all site collections and webs. PowerShell looks to be the best answer.
This script returns all items in all sites, webs and lists with workflow attached from the application level. It then outputs a file with a pipe separated list of everything.
$url = "http://chaosweb" $filePath = "D:\workflow_items.txt" $rootSite = New-Object Microsoft.SharePoint.SPSite($url) $spWebApp = $rootSite.WebApplication $ListItems = @() foreach($site in $spWebApp.Sites) { $spWebs = $site.AllWebs foreach($spWeb in $spWebs) { for($i = 0; $i -lt $spWeb.Lists.Count; $i++) { $spList = $spweb.Lists[$i] $assoc = $spList.WorkflowAssociations if($assoc -ne $null) { foreach($item in $spList.Items) { $ListItems += "$($site.URL) | $($spWeb.Name) | $($spList.Title) | $($item.Name)" } } } } $spWeb.Dispose() } $ListItems | out-file -filepath $filePath
Thanks for this script. Why did you use the variable $workflowBase? I don't see it used elsewhere.
Soumya
good catch…I have removed the unused var