A common requirement in SharePoint search is to create Managed Properties and map it to crawled properties so that it can be used in search query.

The following is the approach to write a PS script that can be used to create one or more managed properties using an input XML file.

  1. <managedproperties>
  2. <managedproperty name=”myManagedProp1″ crawlproperty =”myCrawledProp1″ type=”1″ />
  3. <managedproperty name=”myManagedProp2″ crawlproperty =”myCrawledProp1″ type=”2″ />
  4. </managedproperties>

Function – ManagedProperty Creation
Author – Deepak Solanki


Make sure to load SharePoint Snapin if not defined

  1. [System.reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint”)
  2. $snapin = ”Microsoft.SharePoint.PowerShell”
  3. if (get - pssnapin $snapin - ea“silentlycontinue”)
  4. {
  5. write - host - f Green“PSsnapin $snapin is loaded”
  6. }
  7. elseif(get - pssnapin $snapin - registered - ea“silentlycontinue”)
  8. {
  9. write - host - f Green“PSsnapin $snapin is registered”Add - PSSnapin $snapin write - host - f Green“PSsnapin $snapin is loaded”
  10. }
  11. else
  12. {
  13. write - host - f orange“PSSnapin $snapin not found” - foregroundcolor Red
  14. }
Function definition
  1. function createManagedProperty($xmlFile, $searchApplicationName)
  2. {
  3. $configXml = [xml](get - content $xmlFile)
  4. $searchapp = Get - SPEnterpriseSearchServiceApplication $searchApplicationName
  5. $category = Get - SPEnterpriseSearchMetadataCategory - Identity SharePoint - SearchApplication $searchapp
  6. foreach($metaProp in $configXml.managedproperties.managedproperty)
  7. {
  8. Write - Host - ForegroundColor Green“Creating property: ”$metaProp.Name $crawledPropName = $metaProp.crawlproperty
  9. }
Check if Managed property already exist
  1. $ManagedProp = Get-SPEnterpriseSearchMetadataManagedProperty -SearchApplication $searchapp -Identity $metaProp.name -ErrorAction SilentlyContinue
Delete existing managed property
  1. if ($ManagedProp - ne $null)
  2. {
  3. $ManagedProp.DeleteAllMappings()
  4. Remove - SPEnterpriseSearchMetadataManagedProperty - SearchApplication $searchapp - Identity $metaProp.name - Confirm: $false
  5. }
  6. else {##Create Managed property
  7. New - SPEnterpriseSearchMetadataManagedProperty - SearchApplication $searchapp - Name $metaProp.name - Type $metaProp.type - Queryable $true - Retrievable $true
  8. }
  9. $ManagedProp = Get - SPEnterpriseSearchMetadataManagedProperty - SearchApplication $searchapp - Identity $metaProp.name
  10. ##Check
  11. if Crawled Property is available
  12. $crawledproperty = Get - SPEnterpriseSearchMetadataCrawledProperty - SearchApplication $searchapp - Name $crawledPropName - ErrorAction SilentlyContinue
  13. ##Map managed property to crawl property
  14. if ($crawledproperty - ne $null)
  15. {
  16. New - SPEnterpriseSearchMetadataMapping - SearchApplication $searchapp - ManagedProperty $ManagedProp - CrawledProperty $crawledproperty
  17. }
  18. else
  19. {
  20. Write - Host - ForegroundColor Red“Crawled property does not exist: ”$crawledPropName
  21. }
  22. }
  23. }
Declaration of the constants
  1. $SearchApplicationName = “Search Service Application”
  2. $configfile = “ManagedProperties.xml”
  3. $executingScriptDirectory = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
  4. $file = “$executingScriptDirectory/$configfile”
Actual execution starts here

Write-Host -foregroundcolor Green “***Script Started***”
createManagedProperty -searchApplicationName $SearchApplicationName -xmlFile $file
Write-Host -foregroundcolor Green “***Script Completed***”