Start crawling with PowerShell part 2

A while ago I blogged about starting a new crawl with PowerShell in this post,
but today I got a bit further, each rollout I do on my dev machine a whole new site
collection gets created using PowerShell, after that there is some test content provisioned
(also using PowerShell), and finally the search settings are added. It kinda feels
like everything is done through PowerShell. The point however is that I not only want
to start a new crawl, but make sure that ‘old’ content is deleted. Step by step; I
create some Crawled properties, create some Managed Metadata properties, create some
scopes and finally delete the old content and crawl the new one.

The first part creating crawled properties and metadata properties i used this blog
post
. Getting me something like the following, that checks if the crawled property
exists and if so gets it, otherwise creates it, then setting it into a metadata property
that can be used. Nice to know is that the –propset property even though the documentation
says its optional is in fact required!

  1: # Get or create SPEnterpriseSearchMetadataCrawledProperty
  2: if (Get-SPEnterpriseSearchMetadataCrawledProperty
  3:         -SearchApplication $searchapp -Name "proptocreate"
  4:         -ea "silentlycontinue")
{
  5:   $crawlprop = Get-SPEnterpriseSearchMetadataCrawledProperty
  6:           -SearchApplication $searchapp -Name "proptocreate"
  7: } else {
  8:   $crawlprop = New-SPEnterpriseSearchMetadataCrawledProperty
  9:           -SearchApplication $searchapp -VariantType 31
 10:           -Name proptocreate -IsNameEnum $false -PropSet
"00130329-0000-0130-c000-000000131346"
 11: }
 12:
 13: if (Get-SPEnterpriseSearchMetadataManagedProperty
 14:         -SearchApplication $searchapp -Identity "MetadataPorpertyExample"
 15:         -ea "silentlycontinue")
{
 16:    write-host -f Green "MetaProperty already exists, 
 17:           we delete it so it can be reacreated "
 18:    $prop = Get-SPEnterpriseSearchMetadataManagedProperty
 19:           -SearchApplication $searchapp -Identity "PublishingPageContent"
 20:    $prop.DeleteAllMappings()
 21:    $prop.Delete()
 22:    $searchapp.Update()
 23: } else {}
 24:
 25: write-host -f Green "Try to create MetaProperty"
 26: $prop = New-SPEnterpriseSearchMetadataManagedProperty
 27:    -SearchApplication $searchapp -Name "PublishingPageContent"
-Type 1
 28: $prop.EnabledForScoping = $true
 29: $prop.Update()
 30:
 31: New-SPEnterpriseSearchMetadataMapping -SearchApplication
 32: $searchapp -ManagedProperty $prop -CrawledProperty $crawlprop

 

After that i can create scopes (my colleague Peter found
it out), where I check if a scope already exists and if so delete it so it can be
recreated again:

  1: if (Get-SPEnterpriseSearchQueryScope
-SearchApplication $searchapp
  2:         -Identity "ScopeExample"
-ea "silentlycontinue") {
  3:   write-host -f Green "Scope already exists, 
  4:            we delete it so it can be reacreated "
  5:   $scope= Get-SPEnterpriseSearchQueryScope -SearchApplication
  6:             $searchapp -Identity "ScopeExample"
  7:   $scope.Delete();
  8:   $searchapp.Update();
  9: } else {}
 10:
 11: # Create "ScopeExample"
scope
 12: $scope = New-SPEnterpriseSearchQueryScope -Name "ScopeExample"
 13:    -Description "Doorzoek alle informatie" -SearchApplication $searchapp
 14:    -DisplayInAdminUI $true
 15:
 16: New-SPEnterpriseSearchQueryScopeRule -RuleType AllContent
 17:   -Url $url -scope $scope

 

And after that in finally can reset my index, and make sure everything is found:

  1: Write-Host -f Green "Delete current index ...";
  2: $searchapp.Reset($true,
$true)
  3:
  4: Write-Host -f Green "Start indexing and scopecompilation ";
  5: $searchapp.StartScopesCompilation()
  6:
  7: $CrawlContents = Get-SPEnterpriseSearchServiceApplication
  8:     | Get-SPEnterpriseSearchCrawlContentSource
  9:
 10: foreach ($crawlcontent in $CrawlContents)
 11:     { $crawlcontent.StartFullCrawl(); }

Leave a Reply