How To Configure Search Service Application Using PowerShell

In this article, I will guide you through the steps involved in provisioning Search Application along with the corresponding PowerShell Script

Here are the steps that we will explore in the upcoming section.

SharePoint

 

SharePoint

SharePoint

Though we can provision Search Application from Central Admin as well the purpose here is to demonstrate the use of PowerShell commands required to provision Search Application so that’s what we will do.

First, let’s go to Central Admin to ensure that no existing instance of Search Service Application has been provisioned earlier.

Under Application Management -> Click on “Manage Service Applications”.

 

SharePoint

 

Here, we can see what all Service Application Instances provisioned earlier and we can see there are none.

 

SharePoint

 

Now, launch SharePoint Management Shell to run the required PowerShell commands.

 

SharePoint

 

We will run the PowerShell commands in the following order to make sure each Sub component is provisioned as desired.

Step 1 - Provision Service Application Instance

In this step, we will first provision Search Service Application using the following cmdlet.

$sa = New-SPEnterpriseSearchServiceApplication -Name "Search Service Application" -DatabaseName "SearchDB" –ApplicationPool "SecurityTokenServiceApplicationPool"

Make sure Application Pool exists before you run this command else it will fail since this cmdlet won't add the Application Pool automatically.

 

SharePoint

 

Step 2 - Provision Application Proxy

Then we need to provision Application Proxy by using the following cmdlet referring the Service Application Instance provisioned in the previous step.

New-SPEnterpriseSearchServiceApplicationProxy -Name "Search Service Application Proxy" -SearchApplication $sa

 

SharePoint

Step 3 - Validate Service Instance

 

Next step is to validate that the Service Instance is online and to do so we can use the following cmdlet.

Get-SPEnterpriseSearchServiceInstance -local

 

SharePoint
Step 4 - Clone Topology

Next step is to clone the topology which is required in order to make any changes to the search topology in a search installation that has items in the search index

As per Microsoft recommendation, around this, you need to modify this new topology object, which is a clone of the active topology, by adding or removing search components. After you have made the changes to the clone topology object, you have to activate this clone to have this topology in action.

$clone = $sa.ActiveTopology.Clone()

 

SharePoint

 

Step 5 - Get Search Service Instance Server Name

This Server name is required in the upcoming steps so it is wise to make use of the following cmdlet to retrieve the server name.

Get-SPEnterpriseSearchServiceInstance| Select Server

 

SharePoint

 

Step 6 - Get Search Service Instance

Then we get a handle over the search service instance running on the respective server using the following cmdlet

$si = Get-SPEnterpriseSearchServiceInstance | ?{$_.Server -match "SP-2016-Dev"}

This reference object will be used in the upcoming steps

 

SharePoint

 

Step 7 - Provision Admin Component

Next step is to provision a new Admin Component for the given topology and search service instance using the following cmdlet. This cmdlet is using reference to search service instance we get in the earlier steps

New-SPEnterpriseSearchAdminComponent -SearchTopology $clone -SearchServiceInstance $si

 

SharePoint

 

Step 8 - Provision Processing Component

Next step is to provision new content processing component for the given topology and search service instance using the following cmdlet

New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $clone -SearchServiceInstance $si

SharePoint

Step 9 - Provision Analytics Component

Then we have to provision new analytics processing component for the given topology and search service instance using the following cmdlet

New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $clone -SearchServiceInstance $si

 

SharePoint

 

Step 10 - Provision Crawl Component

Then we have to provision a new crawl component for the given topology and search service instance using the following cmdlet

New-SPEnterpriseSearchCrawlComponent -SearchTopology $clone -SearchServiceInstance $si

 

SharePoint

 

Step 11 - Provision Index Component

Then we have to provision a new index component for the given topology and search service instance using the following cmdlet

New-SPEnterpriseSearchIndexComponent -SearchTopology $clone -SearchServiceInstance $si -IndexPartition 0 -RootDirectory C:\SearchIndex\

RootDirectory

Specifies the root directory that will hold the index location for the new search index component. If you plan to isolate the index on dedicated discs in order to avoid I/O contention that may leads to performance degradation as it might be a risk that index filling up the OS disk and ruin the overall server performance.

 

SharePoint

 

Step 12 - Provision Query Component

And finally we have to provision new query processing component for the given topology and search service instance using the following cmdlet

New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $clone -SearchServiceInstance $si

 

SharePoint

 

Step 13 - Activate New Topology

Once all the components have been added to the new topology, activate it by using the following cmdlet.

$clone.Activate()

 

SharePoint

 

Step 14 - Clean Inactive Topologies

Finally, we have to clean all the inactive topologies associated with a search service application. We can perform this clean by using the following the code using “Remove-SPEnterpriseSearchTopology” cmdlet.

foreach($tp in (Get-SPEnterpriseSearchTopology -SearchApplication $sa | ?{$_.State -eq "Inactive"})) { Remove-SPEnterpriseSearchTopology -Identity $tp -Confirm:$false }

 

SharePoint

 

Step 15 - Change Default Content Access Account

And, we can change the default content access account by using the following code.

$sa = Get-SPEnterpriseSearchServiceApplication $content = New-Object Microsoft.Office.Server.Search.Administration.Content($sa) $content.SetDefaultGatheringAccount("<Enter User Name>", (ConvertTo-SecureString "<Enter Password>" -AsPlainText -Force))

 

SharePoint

 

Now, it is time to validate if search service application has been provisioned correctly.

Go to Central Admin -> Manage Service Applications.

We can see a new Search Application has been provisioned successfully by clicking the Search Service Application Link.

 

SharePoint

 

And, we can see all the components are provisioned and running as expected.

 

SharePoint

 

Also, we can validate the SQL Databases that have been provisioned during creating new search service applications as shown in the following screenshots.

 

SharePoint
SharePoint
SharePoint

 

Hope you find it helpful.