Finally I managed to get some time to have a look into the SharePoint 2013 features in depth (in DEV mode Hurray!!!!). To keep things interesting I thought I will create a script to provision a SP2013 Search Service application in a Single server farm and ended up with the below script. I have tested it on my VM and my plan is to extend this script to set up other search Features like Crawl option, Content Sources and a Example site so the full search features in the SP2013.
Please feel free to comment on this and I will amend it accordingly.
Summary:
- Creates a Search account user in the domain.
- Creates a Managed account for it.
- Set up a new Search Service application and its components.
Add-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction SilentlyContinue $domainName = "SP" $searchServiceAdminAppPoolUserName = "SearchServiceAdmin" $searchServiceAdminAppPoolUserFullName = "$domainName\$searchServiceAdminAppPoolUserName" $IndexFolder = "c:\SP2013\SearchIndex" $SearchAppPoolName = "SP2013 Application Pool" $SearchServiceApplicationName = "Search Application" $SearchServiceApplicationProxyName = "Search Application Proxy" $SearchServer = "WIN-2J3IDCDEUH6" $DBServer = "WIN-2J3IDCDEUH6\DEFAULTDB" $SearchServiceDBName = "SP2013 Search" #------------------------------------------------------------------------------------------------------------------------ # How to configure SharePoint Search Service application. # http://technet.microsoft.com/en-us/library/gg502597.aspx #------------------------------------------------------------------------------------------------------------------------ #------------------------------------------------------------------------------------------------------------------------ #1. Create this user in the domain. #------------------------------------------------------------------------------------------------------------------------ if(get-aduser -identity "CN=$searchServiceAdminAppPoolUserName,CN=Users,DC=$domainName,DC=Local") { Write-Host "User $searchServiceAdminAppPoolUserFullName already exist in the domain $domainName" } else { New-ADUser -Name "$searchServiceAdminAppPoolUserName" -AccountPassword (ConvertTo-SecureString -AsPlainText "ytrewq1!" -Force) -Enabled $true -PasswordNeverExpires $true -Path "CN=Users,DC=$domainName,DC=Local" } #------------------------------------------------------------------------------------------------------------------------ #2. Create a Managed account. #------------------------------------------------------------------------------------------------------------------------ if(Get-SPManagedAccount | Where-Object { $_.UserName -eq $searchServiceAdminAppPoolUserFullName }) { Write-Host "Search Service Admin AppPool User Account : $searchServiceAdminAppPoolUserFullName already exist" } else { $searchServiceAdminAppPoolUserCredential = Get-Credential $searchServiceAdminAppPoolUserFullName New-SPManagedAccount -Credential $searchServiceAdminAppPoolUserCredential } #------------------------------------------------------------------------------------------------------------------------ #3. Create a new Search Service application. #------------------------------------------------------------------------------------------------------------------------ #---------------------------------------------------------------------------------------------------------------------- # Start the local Enterprise Search service. #---------------------------------------------------------------------------------------------------------------------- $SearchServiceInstance = Get-SPEnterpriseSearchServiceInstance -local #Start-SPEnterpriseSearchServiceInstance -Identity $SearchServiceInstance #------------------------------------------------------------------------------------------------------------------------ #3a. Create a Search Application Pool. #------------------------------------------------------------------------------------------------------------------------ $SearchAppPoolInstance = Get-SPServiceApplicationPool -Identity $SearchAppPoolName -ErrorAction SilentlyContinue if($SearchAppPoolInstance) { Write-Host "Search Application Pool : $SearchAppPoolName already exist." } else { $SearchAppPoolInstance = New-SPServiceApplicationPool -Name $SearchAppPoolName -Account $searchServiceAdminAppPoolUserFullName -verbose } #------------------------------------------------------------------------------------------------------------------------ #3b. Create a Search Application Instance. #------------------------------------------------------------------------------------------------------------------------ $SearchServiceApplication = Get-SPEnterpriseSearchServiceApplication -Identity $SearchServiceApplicationName -ErrorAction SilentlyContinue if($SearchServiceApplication) { Write-Host "Search Service Application : $SearchServiceApplicationName already exist." # Removes the configured Search application, Databases and the Index Remove-SPServiceApplication $SearchServiceApplication -RemoveData } # Set the Search Service default index location... # If the default index location is null, creating a New-SPEnterpriseSearchServiceApplication will throw the following error. # New-SPEnterpriseSearchServiceApplication : Value cannot be null. # Parameter name: indexLocation $SearchServer | % { $svcInst = (Get-SPServer -Identity $_).serviceinstances | ? { $_.GetType().FullName -eq "Microsoft.Office.Server.Search.Administration.SearchServiceInstance" } $svcInst.DefaultIndexLocation = $defaultIndexLocation $svcInst.Update() $svcInst.Provision() } $SearchServiceApplication = New-SPEnterpriseSearchServiceApplication -Name $SearchServiceApplicationName -ApplicationPool $SearchAppPoolInstance.Name -DatabaseServer $DBServer -DatabaseName $SearchServiceDBName # This creates the following Database. # 1. $SearchServiceDBName (ex: SP2013 Search) # 2. $SearchServiceDBName_AnalyticsReporting (ex: SP2013 Search_AnalyticsReporting) # 3. $SearchServiceDBName_CrawlStore # 4. $SearchServiceDBName_LinkStore #------------------------------------------------------------------------------------------------------------------------ #3c. Create a Search Application Proxy for the above Search Service Application instance. #------------------------------------------------------------------------------------------------------------------------ $SearchServiceApplicationProxy = Get-SPEnterpriseSearchServiceApplicationProxy -Identity $SearchServiceProxyName -ErrorAction SilentlyContinue if ($SearchServiceApplicationProxy) { Write-Host "Search Service Application Proxy : $SearchServiceApplicationProxy already exist." } else { $SearchServiceApplicationProxy = New-SPEnterpriseSearchServiceApplicationProxy -Name $SearchServiceProxyName -SearchApplication $SearchServiceApplication } #------------------------------------------------------------------------------------------------------------------------ # Configure Search components in SP2013 # http://technet.microsoft.com/en-us/library/jj862356.aspx #------------------------------------------------------------------------------------------------------------------------ $CurrentSearchTopology = Get-SPEnterpriseSearchTopology -SearchApplication $SearchServiceApplication -Active $NewSearchTopology = New-SPEnterpriseSearchTopology -SearchApplication $SearchServiceApplication New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $NewSearchTopology -SearchServiceInstance $SearchServiceInstance New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $NewSearchTopology -SearchServiceInstance $SearchServiceInstance New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $NewSearchTopology -SearchServiceInstance $SearchServiceInstance New-SPEnterpriseSearchCrawlComponent -SearchTopology $NewSearchTopology -SearchServiceInstance $SearchServiceInstance New-SPEnterpriseSearchAdminComponent -SearchTopology $NewSearchTopology -SearchServiceInstance $SearchServiceInstance Set-SPEnterpriseSearchAdministrationComponent -SearchApplication $SearchServiceApplication -SearchServiceInstance $SearchServiceInstance Remove-Item -Recurse -Force -LiteralPath $IndexFolder -ErrorAction SilentlyContinue MKdir -Path $IndexFolder -Force New-SPEnterpriseSearchIndexComponent -SearchTopology $NewSearchTopology -SearchServiceInstance $SearchServiceInstance -RootDirectory $IndexFolder $NewSearchTopology.Activate() Remove-SPEnterpriseSearchTopology -Identity $CurrentSearchTopology -Confirm:$false