O365 - Enable and Configure Navigation on Managed Metadata Terms using CSOM in PowerShell from a CSV file

The seventh post in a series of blog posts that walk through the process of performing configuration tasks against the Managed Metadata Term Store in O365 using CSOM in PowerShell. These posts will explain how to use a CSV file to provide the input values for the scripts however the logic within the scripts can be used to perform the same tasks without using a CSV file with minimal effort.

The example PowerShell script below can be used to enable navigation on the target term set, configure the "Navigation Node Title" property values of the terms within the term set and configure the "Navigation Hover Text" property values of the terms within the term set on a SharePoint Online Term Store in a target Office 365 tenant

It requires five variables to be updated - $User which is the tenant admin, $TenantURL which is the URL for the SharePoint Admin Center, $Site which is a valid URL of any SharePoint Site Collection that exists within the tenant, $GroupName which is the name of the Term Group you wish to connect to and $TermSetName which is the name of the Term Set for which you wish to enable and configure navigation of terms.

$User = "<Tenant Admin>"

$TenantURL = "<URL of SharePoint Admin Center>"

$Site = "<URL of Site Collection that exists in the tenant>"

$GroupName = "<Term Group Name that contains the target Term Set>"

$TermSetName = "<Target Term Set Name>"

 

#Add references to SharePoint client assemblies and authenticate to Office 365 site - required for CSOM

Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"

Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Taxonomy.dll"

$Password = Read-Host -Prompt "Please enter your password" -AsSecureString

try

{

 

#Bind to the Managed Metadata Service within the target instance of SPO

$Context = New-Object Microsoft.SharePoint.Client.ClientContext($Site)

$Creds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($User,$Password)

$Context.Credentials = $Creds

$MMS = [Microsoft.SharePoint.Client.Taxonomy.TaxonomySession]::GetTaxonomySession($Context)

$Context.Load($MMS)

$Context.ExecuteQuery()

 

#Retrieve all of the Term Stores from the Managed Metadata Service

$TermStores = $MMS.TermStores

$Context.Load($TermStores)

$Context.ExecuteQuery()

 

#Bind to the Term Store you want to perform configurations against

$TermStore = $TermStores[0]

$Context.Load($TermStore)

$Context.ExecuteQuery()

 

#Bind to the Term Group you want to perform configurations against

$Group = $TermStore.Groups.GetByName($GroupName)

$Context.Load($Group)

$Context.ExecuteQuery()

 

#Bind to Term Set you want to perform configurations against

$TermSet = $Group.TermSets.GetByName($TermSetName)

$Context.Load($TermSet)

$Context.ExecuteQuery()

 

#Enable Navigation for the Term Set

#Note that the value of this property can be set to "False" is we wish to disable navigation for the Term Set.

$TermSet.SetCustomProperty("_Sys_Nav_IsNavigationTermSet", "True")

$context.ExecuteQuery()

 

#Specify path to CSV input file that contains;

#The names of the Terms within the Term Set to configure,

#The values for the "Navigation Node Title" property to apply for each Term in the Term Set,

#The values for the "Navigation Hover Text" property to apply for each Term in the Term Set,

$path = "<Specify path to CSV file>"

 

#Import and load the CSV input file into the PowerShell Session

$csv = import-csv -path $path

 

#Process entries in the CSV file

foreach($line in $csv){

 

#Bind to Terms within the Term Set by using the values supplied in the "TermNames" column of the CSV file

$Terms = $TermSet.Terms.GetByName($line.TermNames)

$Context.Load($Terms)

$Context.ExecuteQuery()

 

Foreach ($Term in $Terms)

    {

        #Configure Navigation Node Title by using the values supplied in the "NavigationNodeTitle" column of the CSV file

        $Term.SetLocalCustomProperty("_Sys_Nav_Title", $Line.NavigationNodeTitle)

       

        #Configure Navigation Hover Text by using the values supplied in the "NavigationHoverText" column of the CSv file

        $Term.SetLocalCustomProperty("_Sys_Nav_HoverText", $Line.NavigationHoverText)

        $context.ExecuteQuery()

            }

    }

    }

 

catch

{

    write-host "Caught an exception:" -ForegroundColor Red

    write-host "Exception Type: $($_.Exception.GetType().FullName)" -ForegroundColor Red

    write-host "Exception Message: $($_.Exception.Message)" -ForegroundColor Red

}

finally

{

    write-host ""

    write-host "Site Navigation has been successfully enabled on the TermSet" -ForegroundColor Green

    write-host "Navigation Node Titles have been successfully configured on the Terms within the Term Set" -ForegroundColor Green

    write-host "Navigation Hover Text has been successfully configured on the Terms within the Term Set" -ForegroundColor Green

 

SampleTermNamesNavigationValues.csv