Friday, January 22, 2016

PowerShell: Activate Nintex Workflow For a Site Collection (Includes all Sub Sites)

Recently I was on a project which was using Nintex Workflow 2013 and we needed to have the site collection feature activated, as well as the Nintex Workflow 2013 site feature on all of the sub sites within this particular site collection.  Well this was an intranet site which was comprised of 50 sub sites which would all need to be enabled.

In order to use Nintex Workflow the site collection feature must be activated as well as the site feature for any sub site which wishes to use the Workflow Product.  As much fun as manually clicking through 50+ sites and activating the feature would be, I found a script online and tweaked it a bit to be a bit more robust.  Original script author Vadim Tabakman wrote the bulk of the script, my additions are noted in the script comments.



Best Regards,
Dan


#Orignal Script Author: Vadim Tabakman
#http://www.vadimtabakman.com/nintex-workflow-enable-the-nintex-workflow-feature-on-all-subsites.aspx

#Updates By Dan Adams
    #Added a param for re-usablilty rather than have a set path
    #Added the logic to enable the Site Collection Nintex Workflow Feature before enabling the sites
    #Wrapped the Enable-SPFeature calls to handle errors if the Feature was already activated on the site

param($url = $(Read-Host -prompt "Root Site Collection Path"))

#Get the PowerShell Snapin
Add-PSSnapin "Microsoft.SharePoint.PowerShell"

#Get Web
$web = get-spweb $url
#Get Site
$rootSite = Get-SPSite $url

#Activate Site Collection Feature If Not Activated
$nintexWFCollectionFeature = "0561d315-d5db-4736-929e-26da142812c5"
(Enable-SPFeature -Identity $nintexWFCollectionFeature -ErrorAction SilentlyContinue -Url $url) -$null


#Loops Through the SubSites and Activates Nintex Workflow Web Feature
function EnableNintexWorkflowSiteFeature( $w )
{
    $ws = $w.Webs;
    foreach( $subweb in $ws)
    {
        EnableNintexWorkflowSiteFeature($subweb)
    }
    echo 'Enabling Nintex Workflow on site : ' $w.Url
    (Enable-SPFeature NintexWorkflowWeb -ErrorAction SilentlyContinue -url $w.Url) -ne $null
}

echo 'Enabling Nintex Workflow on site : ' + $web.Url
EnableNintexWorkflowSiteFeature $web

PowerShell: Loop Through All Sub Sites in a Site Collection

So this post will be extremely short, but hopefully useful.  The below script is a good starting point if you have a repetitive task that you need to complete on all of your sub sites within a particular site collection.  This script will loop through all of the sub sites, including sub sites of sub sites and print out the site's title and URL.  To use the script you simply need to run the script and input the site’s root URL without quotes.  So if my site collection was http://danssandbox.com/sites/dansSand , I would simply need to input that URL when prompted by the script for the “Root Site Collection Path.”  

This script is meant as a starting point to include actual logic rather than the Write-Hosts, but it should get you on the right track!  Enjoy the loops!


Dan


param($url = $(Read-Host -prompt "Root Site Collection Path"))

#Get the PowerShell Snapin
Add-PSSnapin "Microsoft.SharePoint.PowerShell"

#Get Root Site
$root = Get-SPSite $url

#If site was found / valid
if($root -ne $null)
{

     foreach($subSite in $root.AllWebs)
      {
       $subSiteTitle = $subSite.Title
                Write-Host $subSiteTitle -ForegroundColor Magenta
                $subSiteURL = $subSite.Url
                Write-Host $subSiteURL -ForegroundColor Cyan
       $subSite.Dispose()
      }

        $root.Dispose()

}