Create and Delete Result Source in SharePoint 2013 using PowerShell

Sathish Nadarajan
 
Solution Architect
July 16, 2014
 
Rate this article
 
Views
21267

In the last article, we saw how to create the Result Source using C# and through the Central Administration. Now, let us see, how to create the same using PowerShell. The script is self-explanatory. There is nothing much to explain on the script as well as about the Result Source as we discussed much about result source on the previous article itself.

Create Result Source

 ################## Create Result Source #####################
 
 $publishingSite = Get-SPSite "http://c4968397007:1000/"
 $sspApp = Get-SPEnterpriseSearchServiceApplication;
 
 # load Search assembly
 
 [void] [Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.Search")
 
 # create manager instances
 
 $fedManager = New-Object Microsoft.Office.Server.Search.Administration.Query.FederationManager($sspApp)
 $searchOwner = New-Object Microsoft.Office.Server.Search.Administration.SearchObjectOwner([Microsoft.Office.Server.Search.Administration.SearchObjectLevel]::Ssa, $publishingSite.RootWeb)
 
 # define query
 
 $query = '{searchTerms?}'
 $queryProperties = New-Object Microsoft.Office.Server.Search.Query.Rules.QueryTransformProperties
 # define custom sorting
 $sortCollection = New-Object Microsoft.Office.Server.Search.Query.SortCollection
 $sortCollection.Add("Title", [Microsoft.Office.Server.Search.Query.SortDirection]::Ascending)
 $queryProperties["SortList"] = [Microsoft.Office.Server.Search.Query.SortCollection]$sortCollection
 
 # create result source
 $resultSource = $fedManager.CreateSource($searchOwner)
 $resultSource.Name = 'Result Source Through PowerShell'
 $resultSource.ProviderId = $fedManager.ListProviders()['Local SharePoint Provider'].Id
 $resultSource.CreateQueryTransform($queryProperties, $query)
 
 $resultSource.Commit()
 
 ################## Delete Result Source #####################
 
 $publishingSite = Get-SPSite "http://c4968397007:1000/"
 $sspApp = Get-SPEnterpriseSearchServiceApplication;
 
 # load Search assembly
 
 [void] [Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.Search")
 
 # create manager instances
 
 $fedManager = New-Object Microsoft.Office.Server.Search.Administration.Query.FederationManager($sspApp)
 $searchOwner = New-Object Microsoft.Office.Server.Search.Administration.SearchObjectOwner([Microsoft.Office.Server.Search.Administration.SearchObjectLevel]::Ssa, $publishingSite.RootWeb)
 $resultSource = $fedManager.GetSourceByName("Result Source Through PowerShell",$searchOwner)
 
 #The below lines are used to List all the result Sources.  This is not relevant for deletion. 
 $searchObjectFilter = New-Object Microsoft.Office.Server.Search.Administration.SearchObjectFilter($searchOwner)
 $fedManager.ListSources($searchObjectFilter,$true)
 
 $fedManager.RemoveSource($resultSource)
 

Here one important thing with the SearchObjectLevel.

There are 4 different Levels are there.

([Microsoft.Office.Server.Search.Administration.SearchObjectLevel]:: SPSite

([Microsoft.Office.Server.Search.Administration.SearchObjectLevel]:: SPSiteSubscription

([Microsoft.Office.Server.Search.Administration.SearchObjectLevel]:: SPWeb

([Microsoft.Office.Server.Search.Administration.SearchObjectLevel]:: Ssa

We need to retrieve the result source accordingly.

Happy Coding.

Sathish Nadarajan.

Author Info

Sathish Nadarajan
 
Solution Architect
 
Rate this article
 
Sathish is a Microsoft MVP for SharePoint (Office Servers and Services) having 15+ years of experience in Microsoft Technologies. He holds a Masters Degree in Computer Aided Design and Business ...read more
 

Leave a comment