Create Search Scope and apply ruele using power shell also define Search Setting to Site Collection

[string]$searchSiteName = "Search"

# Creates the search scope on site so it shows on the dropdown
function CreateSearchScope([string] $siteURL){

    # Variables for Site
    [string]$searchServiceApplicationName = "Search Service Application"

    [string]$adminServiceName = "SPAdmeinV4"
    [string]$lmsContentTypeTemplateID = "STS_ListItem_10001"
    [string]$searchDropDownValue= "Search Dropdown"
    [string]$scopeName = "LMS Search"

    # Gets the Search Service Application Object
    Write-Host "Get-SPEnterPriseSearchServiceApplication" -foregroundcolor green
    $ssa = Get-SPEnterPriseSearchServiceApplication -Identity $searchServiceApplicationName

    # Get the root web
    Write-Host "Get the root web." -foregroundcolor green
    $site = New-Object Microsoft.SharePoint.SPSite($siteURL)

    # Gets the scope
    Write-Host "Get-SPEnterpriseSearchQueryScope" -foregroundcolor green
    $scope = Get-SPEnterpriseSearchQueryScope -Identity $scopeName -SearchApplication $ssa -ea "silentlycontinue"

    Write-Host "Create a scope object" -foregroundcolor green
    $existingScope = $null
    if($scope -eq $null)
    {
        Write-Host "Create a scope New-SPEnterpriseSearchQueryScope" -foregroundcolor green
        $existingScope = New-SPEnterpriseSearchQueryScope -Name $scopeName -Description "Searches LMS Course Content Type Lists only." -SearchApplication $ssa -DisplayInAdminUI $true
    }
    else
    {
        Write-Host "Gets the existing scope Get-SPEnterpriseSearchQueryScope" -foregroundcolor green
        $existingScope = Get-SPEnterpriseSearchQueryScope -Identity $scopeName -SearchApplication $ssa -ea "silentlycontinue"
    }

    Write-Host "Gets all scope rules."
    $allScopeRules = Get-SPEnterpriseSearchQueryScopeRule -SearchApplication $searchServiceApplicationName -Scope $scopeName
  
    #Checks the Rule if already exists
    $checkRule = $allScopeRules | Where-Object { $_.RuleType -eq "Url" -and $_.MatchingString -eq "$siteURL/" }
  
    ######$checkRule | ForEach-Object { Write-Host "ID : " $_.ID ", Filter Behaviour : " $_.FilterBehaviour ", LogPrefix : " $_.LogPrefix ", Property : " $_.Property ", RuleType : " $_.RuleType ", Value : " $_.Value }
  
    if( $checkRule -ne $null )
    {
        Write-Host "Rule existed for URL - New-SPEnterpriseSearchQueryScope" -foregroundcolor green
    }
    else
    {
        Write-Host "Create URL Rule - New-SPEnterpriseSearchQueryScope" -foregroundcolor green
        $rule = New-SPEnterpriseSearchQueryScopeRule -RuleType "Url" -Url $siteURL -MatchingString "$siteURL/" -FilterBehavior "Include" -UrlScopeRuleType "Folder" -scope $existingScope
    }

    #Checks the Rule if already exists
    $checkRule = $allScopeRules | Where-Object { $_.RuleType -eq "PropertyQuery" -and $_.Value -eq $lmsContentTypeTemplateID }
  
    ######$checkRule | ForEach-Object { Write-Host "ID : " $_.ID ", Filter Behaviour : " $_.FilterBehaviour ", LogPrefix : " $_.LogPrefix ", Property : " $_.Property ", RuleType : " $_.RuleType ", Value : " $_.Value }

    if( $checkRule -ne $null )
    {
        Write-Host "Rule existed for Property type - New-SPEnterpriseSearchQueryScope" -foregroundcolor green
    }
    else
    {
        Write-Host "Create Content Type - New-SPEnterpriseSearchQueryScope" -foregroundcolor green
        $rule = New-SPEnterpriseSearchQueryScopeRule -RuleType PropertyQuery -ManagedProperty "contentclass" -PropertyValue $lmsContentTypeTemplateID -FilterBehavior "Require" -url $siteURL -scope $existingScope -SearchApplication $ssa
    }


    Write-Host "Start applying settings to the web." -foregroundcolor green
    $rootWeb = $site.RootWeb
    $rootWeb.AllowUnsafeUpdates = $true
    $rootWeb.AllProperties["SRCH_ENH_FTR_URL"] = "/" + $searchSiteName
    $rootWeb.AllProperties["SRCH_SITE_DROPDOWN_MODE"] = "ShowDD"
    $rootWeb.AllProperties["SRCH_TRAGET_RESULTS_PAGE"] ="/_layouts/OSSSearchResults.aspx"
    $rootWeb.update()
    Write-Host "Finished applying settings to the web." -foregroundcolor green
  

    Write-Host "Start Calling SearchScopeGroup Ps1 for updating group" -foregroundcolor green
    .$scriptDir"\"UpdateSearchScopeGroup.ps1
  
    write-host "Loading Scripts"
    Add-Type -ReferencedAssemblies $Assem -TypeDefinition $Source -Language CSharpVersion3  -ErrorAction Stop
    write-host "Call Methods of C# code"-foregroundcolor green
    [gp.sp.LMSSearchScopeGroup.GPSearchScopeGroup]::UpdateGPSearchScopeGroup($siteURL)
  
    Write-Host "Finished Updating Search Dropdown and set LMS Search To Default" -foregroundcolor green


  
  }

Popular posts from this blog

Register Event Handlers plus free Site Settings – Manage Event Handlers Add-on solution

Custom Form Base Login Web Part With Sharepoint 2010

Real World Branding with SharePoint 2010 Publishing Sites