menu
Tech blog, musings & updates from Intelligent Decisioning
Want to work with Intelligent Decisioning? That’s great, let’s talk

Monthly Archives: June 2017

Start and Stop SharePoint Search Crawls with PowerShell

Share socially -

Quite often you may wish to start a SharePoint Search content crawl on demand, without waiting for the next scheduled crawl to start. You may still be running SharePoint Server 2010, or not able (or willing) to run a continuous crawl of your content.

To make your job that little bit quicker when it comes to starting a Search Crawl, you can easily start either Incremental or Full Crawls via PowerShell.

Simply retrieve the Content Source that you want to crawl, then invoke the appropriate method.

$cs = Get-SPEnterpriseSearchCrawlContentSource -SearchApplication "Search Service Application" -Identity "Local SharePoint Sites"

# This method starts a full crawl
$cs.StartFullCrawl()

# This method starts an incremental crawl
$cs.StartIncrementalCrawl()

# Do this to stop any currently running crawls
$cs.StopCrawl()

# This property returns the status of your crawl
$cs.CrawlStatus

 

Obviously, change the SearchApplication parameter to match the name of your search application, and the “Identity” parameter to match the name of the specific Content Source you want to crawl.

You can wrap up all of the PowerShell lines that you need to kick off the crawl you want into a text file with the extension of “.ps1” and invoke from a SharePoint Administration Shell prompt whenever you need to!

 

Enable Stack Traces to find C# Disposal Issues

Share socially -

If you look through your SharePoint ULS logs during the development of server-side code and you spot the warning:

An SPRequest object was not disposed before the end of this thread.  To avoid wasting system resources, dispose of this object or its parent (such as an SPSite or SPWeb) as soon as you are done using it.

Then there’s a chance you haven’t followed Microsoft’s best practices around disposal of unmanaged resources in the C# SharePoint Server Side Object Model.

Going solely by the information in ULS doesn’t immediately show you where your SPSite or SPWeb was instantiated.  As the warning states, you need to enable SPReqest Allocation Callstacks to see full stack traces of your code to see where you need to fix SPRequest issues.

The following PowerShell snippet will do just that:

$cs = [Microsoft.SharePoint.Administration.SPWebService]::ContentService

$cs.CollectSPRequestAllocationCallStacks = $true
$cs.Update()

 

Of course, as you develop you can use static analysis tools such as SPCAF from Rencore to make sure you’re following the best practice for object disposal as you code.

Please note that this is only beneficial if you develop C# code using the SharePoint Server Side Object Model that runs on the SharePoint servers. If you are developing using any of the remote APIs (such as JavaScript Object Model, Client Object Model or REST) then this setting has no real benefit.

You may also notice that sometimes you will see this error when performing valid API tasks where you do not necessarily create the SPWeb or SPSite objects yourself. I’ve noticed this in particular with the Taxonomy API. I found these to be acceptable exceptions when analysing the ULS log for these warnings, as the code that raises the warning is deep within assemblies that are maintained by Microsoft, and the warnings may disappear over time with service pack releases.