Create SharePoint 2013 Search Service Application using PowerShell

Although we can create SharePoint 2013 search service application from Central Administration,  I prefer creating it through PowerShell as it gives the ability to get rid of GUIDs in Search service Database names. Also, from SharePoint 2013 Central Administration, Its not possible to modify search topology! So, PowerShell is the ideal way to create/configure Search in SharePoint 2013.

Creating Search Service Application in PowerShell includes these 7 steps:

  1. Create an application pool for search service application 
  2. Start search service instances on the server
  3. Create a search service application 
  4. Create a search service application proxy
  5. Create new search service topology 
  6. Create all six components of the search and assign them to the search topology
  7. Activate the search topology

PowerShell Script to Create Search Service Application for SharePoint 2013:

Here is the PowerShell script to create Search service application in SharePoint 2013.

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

# Specify the Settings for the Search Service Application
$ServerName = (Get-ChildItem env:computername).value
$IndexLocation = "D:\Search Index"
$SearchServiceApplicationName = "Search Service Application"
$SearchServiceApplicationProxyName = "Search Service Application Proxy"
$SearchDatabaseServer = "G1SP2013"
$SearchServiceApplicationDatabase = "SP2013_Search_Service" 

$SearchAppPoolName = "Search Service Application pool"
$SearchAppPoolAccount =  Get-SPManagedAccount "Crescent\SP13_Search"

#Check if Managed account is registered already
Write-Host -ForegroundColor Yellow "Checking if the Managed Accounts already exists"
$SearchAppPoolAccount = Get-SPManagedAccount -Identity $SearchAppPoolAccount -ErrorAction SilentlyContinue
If ($SearchAppPoolAccount -eq $null)
{
    Write-Host "Please Enter the password for the Service Account..."
    $AppPoolCredentials = Get-Credential $SearchAppPoolAccount
    $SearchAppPoolAccount = New-SPManagedAccount -Credential $AppPoolCredentials
} 

#*** Step 1: Create Application Pool for Search Service Application **** 
#Get the existing Application Pool
$SearchServiceAppPool = Get-SPServiceApplicationPool -Identity $SearchAppPoolName -ErrorAction SilentlyContinue
#If Application pool Doesn't exists, Create it
if (!$SearchServiceAppPool)
{ 
    $SearchServiceAppPool = New-SPServiceApplicationPool -Name $SearchAppPoolName -Account $SearchAppPoolAccount 
    write-host "Created New Application Pool" -ForegroundColor Green
}

#*** Step 2: Start Search Service Instances ***
Start-SPEnterpriseSearchServiceInstance $ServerName -ErrorAction SilentlyContinue
Start-SPEnterpriseSearchQueryAndSiteSettingsServiceInstance $ServerName -ErrorAction SilentlyContinue

#*** Step 3: Create Search Service Application **** 
# Get the Search Service Application
$SearchServiceApplication = Get-SPEnterpriseSearchServiceApplication -Identity $SearchServiceApplicationName -ErrorAction SilentlyContinue
# Create the Search Service Application, If it doesn't exists! 
if(!$SearchServiceApplication)
{
    $SearchServiceApplication = New-SPEnterpriseSearchServiceApplication -Name $SearchServiceApplicationName -ApplicationPool $SearchServiceAppPool -DatabaseServer $SearchDatabaseServer -DatabaseName $SearchServiceApplicationDatabase
    write-host "Created New Search Service Application" -ForegroundColor Green
}

#*** Step 4: Create Search Service Application Proxy **** 
 #Get the Search Service Application Proxy
 $SearchServiceAppProxy = Get-SPEnterpriseSearchServiceApplicationProxy -Identity $SearchServiceApplicationProxyName -ErrorAction SilentlyContinue
 # Create the Proxy, If it doesn't exists! 
if(!$SearchServiceAppProxy)
{
    $SearchServiceAppProxy = New-SPEnterpriseSearchServiceApplicationProxy -Name $SearchServiceApplicationProxyName -SearchApplication $SearchServiceApplication 
    write-host "Created New Search Service Application Proxy" -ForegroundColor Green
}

#*** Step 5: Create New Search Topology 
$SearchServiceInstance = Get-SPEnterpriseSearchServiceInstance -Local
#To Get Search Service Instance on Other Servers: use - $SearchServiceAppSrv1 = Get-SPEnterpriseSearchServiceInstance -Identity "<Server Name>"

# Create New Search Topology 
$SearchTopology =  New-SPEnterpriseSearchTopology -SearchApplication $SearchServiceApplication

#*** Step 6: Create Components of Search

New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance

New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance

New-SPEnterpriseSearchCrawlComponent -SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance

New-SPEnterpriseSearchAdminComponent -SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance

#Prepare Index Location
Remove-Item -Recurse -Force -LiteralPath $IndexLocation -ErrorAction SilentlyContinue
MKDIR -Path $IndexLocation -Force

#Create Index and Query Components
New-SPEnterpriseSearchIndexComponent -SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance -RootDirectory $IndexLocation 

New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance

#*** Step 7: Activate the Toplogy for Search Service ***
$SearchTopology.Activate() # Or Use: Set-SPEnterpriseSearchTopology -Identity $SearchTopology

Here is the Search center topology created:

Create SharePoint 2013 Search Service Application using PowerShell

As you see in the above screen, Provisioning search service application creates 4 databases:  I’m naming them as follows:

  • SP2013_Search_Service – Search Service Administration database stores configuration and topology (It could be better: SP2013_Search_Service_AdminDB”)
  • SP2013_Search_Service_AnalyticReporting- Stores the result of usage analysis report.
  • SP2013_Search_Service_CrawlStore – The crawl database contains detailed tracking and historical information about crawled items
  • SP2013_Search_Service_LinksStore – Link database, Stores the information extracted by the content processing component & click-through information of searched items.

The above script creates a search service application in SharePoint 2013 using PowerShell for a stand-alone environment. If you are looking for creating a SharePoint search service application in a multi-server farm, refer: create and configure a search service application in SharePoint 2016 Multi-server Farm

Salaudeen Rajack

Salaudeen Rajack - Information Technology Expert with Two-decades of hands-on experience, specializing in SharePoint, PowerShell, Microsoft 365, and related products. He has held various positions including SharePoint Architect, Administrator, Developer and consultant, has helped many organizations to implement and optimize SharePoint solutions. Known for his deep technical expertise, He's passionate about sharing the knowledge and insights to help others, through the real-world articles!

One thought on “Create SharePoint 2013 Search Service Application using PowerShell

  • It’s stuck after “Created New Application Pool” what is the problem may be?

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *