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
2. Click on the “Catalog Settings”
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
Happy Coding.
Sathish Nadarajan.
Leave a comment