How to “Enable this Library as a Catalog” in SharePoint 2013 using PowerShell


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

Sharegate: Kick-Ass Tool
Think Your SharePoint & Office 365 Are Secure ? Find Out Now!


Probably we would have fed up with reading and doing the things using PowerShell for the last few days. But anyhow, nowadays, I involved much into these stuffs. Basically the reason behind this is, to eliminate the steps from the Release Notes. That is, the Technical Team from the customer’s end can run the Scripts alone, instead of doing the steps manually through the User Interface. Though these things are going to be a one-time activity, these things will add some value to our customer.

In this article, let us see, how to enable a Library as a Catalog. As usual, let us see how to do this through the Interface. Then we will see the PowerShell Script

1. On the Pages – Settings

image

2. Click on the “Catalog Settings”

image

3. Select the Check Box

4. Enable the Anonymous access

5. Frame the URL with the fields

6. Select the Navigation Hierarchy.

All these steps can be done using the script.

 $LogTime = Get-Date -Format yyyy-MM-dd_hh-mm
 $LogFile = ".\EnableCatalogConnection-$LogTime.rtf"
 
 
 cls
 
 
 ##================================================================================================
 ## Description	: Enable Catalog Connection
 ## Author		: Sathish Nadarajan
 ## Date			: 09-Dec-2014
 ##================================================================================================
 
 
  
 $Host.UI.RawUI.WindowTitle = "-- Enable Catalog Connection  --"
 
 $StartDate = Get-Date
 Write-Host -ForegroundColor White "------------------------------------"
 Write-Host -ForegroundColor White "| Enable Catalog Connection  |"
 Write-Host -ForegroundColor White "| Started on: $StartDate |"
 Write-Host -ForegroundColor White "------------------------------------"
 
 
 
 #start-transcript $LogFile
 
 ################################################### Add SharePoint PowerShell Snapin   ######################################
 
 
 if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) {
     Add-PSSnapin Microsoft.SharePoint.Powershell
 }
 
 
 ########################################################### End of PowerShell Snapin ########################################
 
 ########################################################### Set the Exxecution Path #########################################
 
 $scriptBase = split-path $SCRIPT:MyInvocation.MyCommand.Path -parent
 Set-Location $scriptBase
 
  
 ########################################################### Function Declarations ########################################
 
 
 function SetListAsCatalog([string] $siteUrl, [string] $webUrl,[string] $listDisplayName,[string] $termStoreName,[string] $termGroupName,[string] $termSetName,[string] $fieldInternalName)
 {
     Write-Host -ForegroundColor Yellow "Going to Enable Search Catalog On the List - " $listDisplayName
 
     $site = get-SPSite -Identity $siteUrl
 
     $parentWeb = Get-SPWeb -Site $site -Identity $webUrl
 
     $parentWeb.AnonymousState = "Enabled"
 
     #web.AnonymousPermMask64 = SPBasePermissions.Open | SPBasePermissions.ViewPages;    
     $parentWeb.Update()
 
     $list = $parentWeb.Lists[$listDisplayName];
  
     # get managed metadata info for populating details about Catalog Navigation
  
     $taxSession = New-Object -TypeName Microsoft.SharePoint.Taxonomy.TaxonomySession @($parentWeb.Site);
  
     $termStore = $taxSession.TermStores[$termStoreName];
  
     $group = $termStore.Groups[$termGroupName];
  
     $termSet = $group.TermSets[$termSetName];
  
     # set up CatalogTaxonomyFieldSettings for the single value tagging field DemoTag1
  
     $taxFieldSetting = New-Object -TypeName Microsoft.SharePoint.Publishing.CatalogTaxonomyFieldSettings;
  
     $field = $list.Fields.getfieldbyinternalname($fieldInternalName);
  
     $taxFieldSetting.TermId = $field.AnchorId;
  
     $taxFieldSetting.TermSetId = $termSet.Id;
  
     $taxFieldSetting.TermStoreId = $termStore.Id;
  
     $taxFieldSetting.FieldId = $field.Id;
  
     $taxFieldSetting.FieldManagedPropertyName = "owstaxid" + $field.InternalName;
  
     $taxFieldSetting.IsSelected = $True;
  
     $taxFieldSetting.FieldDisplayName = $field.StaticName;
  
     # there can be more than one single value tagging field to integrate on when connecting, so the parameter expects an IEnumerable
  
     $taxFieldSettings = New-Object -TypeName System.Collections.Generic.List[Microsoft.SharePoint.Publishing.CatalogTaxonomyFieldSettings];
  
     $taxFieldSettings.Add($taxFieldSetting);
  
     # specify the Primary Key or FURL fields default as just /[Title]
  
     $selectedIds = New-Object -TypeName System.Collections.Generic.List[System.String];
  
     #$selectedIds.Add("Question");    ################## Commented this line as such this is not applying properly.
 
  
     # publish the list as a catalog
  
     [Microsoft.SharePoint.Publishing.PublishingCatalogUtility]::PublishCatalog($parentWeb, $list, $False, $selectedIds, $taxFieldSettings);
 
     if($list.AnonymousPermMask -ne $null)
     {
         $list.AnonymousPermMask = 8192
     }
 
     $versionObj = $list.RootFolder.Properties["vti_searchversion"]
     $list.RootFolder.SetProperty("vti_searchversion", ($versionObj + 1));  
     $list.Update()
 
     Write-Host -ForegroundColor Green "Search Catalog Enabled Successfully On the List - " $listDisplayName
 }
 
 
 ########################################################### End of Function Declarations ########################################
 
 ###################### Calling Functions###################################################
 
 $EnableCatalogDetailsCSV = $scriptBase + "\" + "02.CatalogDetails.csv"
 
 
 import-csv $EnableCatalogDetailsCSV | where {
     
     
     SetListAsCatalog $_.siteUrl $_.webUrl $_.listDisplayName $_.termStoreName $_.termGroupName $_.termSetName $_.fieldInternalName
 
 
 }
 
 
 
 
 
 ###################### End of Calling Functions###################################################
 
 #stop-transcript 
 

DOWNLOAD HERE

 

 

Happy Coding.

Sathish Nadarajan.

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

KWizCom Scan