How to Map Page Layouts to Terms for Navigation in SharePoint 2013 using PowerShell


Sathish Nadarajan
SharePoint MVP
Published On :   03 Feb 2015
Visit Count
Today :  1    Total :   8127
Plan, Migrate, Secure, Report
SharePoint & Office 365 Tool. Simple & Easy to Use. 15-Day Trial!

SharePoint Office 365 Tool
Simple & Powerful Tool for Migration, Security & Reporting. Free Trial


In this article, let us see how to Map the Page layouts for various Terms using Powershell in SharePoint 2013.

Before diving into the Script, let us see, how to do that using the User Interface.

1. Go to Central Admin

image

2. Go to Manage Service Applications

image

3. Select Managed Metadata Service Application.

image

4. Select the TermSet and on the Intended Use Tab, Select the Check Box, “Use this Term Set for Site Navigation”

5. Now, select any of the Term and on the “Term Driven Pages” Tab select the check boxes and give the appropriate URLS.

image

Now, the same thing, let us see how to do that using PowerShell.

The script is as follows.

 $LogTime = Get-Date -Format yyyy-MM-dd_hh-mm
 $LogFile = ".\UpdateTermSet-$LogTime.rtf"
 
 
 cls
 
 
 ##================================================================================================
 ## Description	: This script is used to Set the TermSet for the Navigation and Set the Catalog, Item Page URLs.
 ## Author		: Sathish Nadarajan
 ## Date			: 15-Dec-2014
 ##================================================================================================
 
 
  
 $Host.UI.RawUI.WindowTitle = "-- Set Term URLs --"
 
 $StartDate = Get-Date
 Write-Host -ForegroundColor White "------------------------------------"
 Write-Host -ForegroundColor White "| Update the Navigation Tag and Catalog, Item Page URLs |"
 Write-Host -ForegroundColor White "| Started on: $StartDate |"
 Write-Host -ForegroundColor White "------------------------------------"
 
 
 
 #start-transcript $logfile
 
 $ErrorActionPreference = "Stop"
 ######################### Add SharePoint PowerShell Snapin ###############################################
 
 if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) 
 {
     Add-PSSnapin Microsoft.SharePoint.Powershell
 }
 
 ########################### End of Add SharePoint PowerShell Snapin ##################################
 
 ######################## Set Execution Path ################################################
 
 $scriptBase = split-path $SCRIPT:MyInvocation.MyCommand.Path -parent
 Set-Location $scriptBase
 
 
 function UpdateTerms([string] $caURL,[string] $groupName,[string] $termsetName,[string] $termGUID, [string] $ChangeCatalogTargetURL,[string] $ChangeCatalogTargetUrlForChildTerms,[string] $ChangeTargetURL,[string] $ChangeTargetUrlForChildTerms, [string] $CatalogTargetUrl, [string] $CatalogTargetUrlForChildTerms, [string] $TargetUrl, [string] $TargetUrlForChildTerms)
 {
 
     $caSite = Get-SPSite -Identity $caURL
 
     $taxonomySession = Get-SPTaxonomySession -Site $caSite
  
     $termStore = $taxonomySession.DefaultKeywordsTermStore
  
     $termStoreGroup = $termStore.Groups[$groupName]
  
     $termset = $termStoreGroup.TermSets[$termsetName]
  
     $termset.SetCustomProperty("_Sys_Nav_IsNavigationTermSet", "True")
 
     $term = $termset.GetTerm($termGUID)
  
     Write-Host "Going to Update the Term :- " $term.Name -ForegroundColor Yellow
 
     $term.SetLocalCustomProperty(“_Sys_Nav_CatalogTargetUrl”, $CatalogTargetUrl)
 
     if($ChangeCatalogTargetUrlForChildTerms -eq $true)
     {
         $term.SetLocalCustomProperty(“_Sys_Nav_CatalogTargetUrlForChildTerms”, $CatalogTargetUrlForChildTerms)
     }
  
     #$term.SetLocalCustomProperty(“_Sys_Nav_CategoryImageUrl”, “~sitecollection/Images/Test.png”)
  
     $term.SetLocalCustomProperty(“_Sys_Nav_TargetUrl”, $TargetUrl)
  
     if($ChangeTargetUrlForChildTerms -eq $true)
     {
         $term.SetLocalCustomProperty(“_Sys_Nav_TargetUrlForChildTerms”, $TargetUrlForChildTerms)
     }
  
     
 
     
 
     #$term.SetLocalCustomProperty(“_Sys_Nav_ExcludedProviders”, "false")
 
     #$term.LocalCustomProperties
 
     $termStore.CommitAll()
 
     Write-Host "Updated the Term :- " $term.Name -ForegroundColor Green
 }
  
 
 
 $UpdateTermsCSV = $scriptBase + "\" + "MapPageLayoutsToTerms.csv"
 
 import-csv $UpdateTermsCSV | where {
     UpdateTerms $_.CentralAdminUrl $_.TermGroupName $_.TermSetName $_.TermGUID $_.ChangeCatalogTargetURL $_.ChangeCatalogTargetUrlForChildTerms $_.ChangeTargetURL $_.ChangeTargetUrlForChildTerms $_.CatalogTargetUrl $_.CatalogTargetUrlForChildTerms $_.TargetUrl $_.TargetUrlForChildTerms
 
 
     											
 
 
     
 }
 

Download HERE

Happy Coding.

Sathish Nadarajan.

SharePoint Usage Reports
Usage reports, collaboration and audit for SharePoint.
Categories

Migratiin Tools for SharePoint