How to: Programmatically Manage the Crawl of a Content Source in PowerShell
Hi,
If you have read my previous post you may think, why did you stop there? Well, that is what I thought too :), and started with this article from MSDN.
We wanted to start managing the crawling of our content source more programmatically, as we have seen that running several at the same time affects the overall process.
So running these powershell scripts as scheduled task and monitoring the status can improve in crawling.
You may improve them reusing the context and content sources and doing some pipeline
to be included in the overall file:
## SharePoint Reference
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.Search.Administration")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.Search")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server")
To start an incremental crawl of the content source
function global:StartIncremental-Crawl($url, $csname)
{
trap [Exception] {
write-error $("ERROR: " + $_.Exception.GetType().FullName);
write-error $("ERROR: " + $_.Exception.Message);
continue;
}$s = new-Object Microsoft.SharePoint.SPSite($url);
$c = [Microsoft.Office.Server.Search.Administration.SearchContext]::GetContext($s);
$sc = new-Object Microsoft.Office.Server.Search.Administration.Content($c);$cs = $sc.ContentSources[$csname];
$cs.StartIncrementalCrawl();
$s.Dispose();
}StartIncremental-Crawl -url https://your_site_url -csname "your content source name"
To start a full crawl of the content source
function global:StartFull-Crawl($url, $csname)
{
trap [Exception] {
write-error $("ERROR: " + $_.Exception.GetType().FullName);
write-error $("ERROR: " + $_.Exception.Message);
continue;
}$s = new-Object Microsoft.SharePoint.SPSite($url);
$c = [Microsoft.Office.Server.Search.Administration.SearchContext]::GetContext($s);
$sc = new-Object Microsoft.Office.Server.Search.Administration.Content($c);$cs = $sc.ContentSources[$csname];
$cs.StartFullCrawl();
$s.Dispose();
}StartFull-Crawl -url https://your_site_url -csname "your content source name"
To pause a crawl in process
function global:Pause-Crawl($url, $csname)
{
trap [Exception] {
write-error $("ERROR: " + $_.Exception.GetType().FullName);
write-error $("ERROR: " + $_.Exception.Message);
continue;
}$s = new-Object Microsoft.SharePoint.SPSite($url);
$c = [Microsoft.Office.Server.Search.Administration.SearchContext]::GetContext($s);
$sc = new-Object Microsoft.Office.Server.Search.Administration.Content($c);$cs = $sc.ContentSources[$csname];
$cs.PauseCrawl();
$s.Dispose();
}Pause-Crawl -url https://your_site_url -csname "your content source name"
To resume a paused crawl
function global:Resume-Crawl($url, $csname)
{
trap [Exception] {
write-error $("ERROR: " + $_.Exception.GetType().FullName);
write-error $("ERROR: " + $_.Exception.Message);
continue;
}$s = new-Object Microsoft.SharePoint.SPSite($url);
$c = [Microsoft.Office.Server.Search.Administration.SearchContext]::GetContext($s);
$sc = new-Object Microsoft.Office.Server.Search.Administration.Content($c);$cs = $sc.ContentSources[$csname];
$cs.ResumeCrawl();
$s.Dispose();
}Resume-Crawl -url https://your_site_url -csname "your content source name"
To stop a crawl of the content source
function global:Stop-Crawl($url, $csname)
{
trap [Exception] {
write-error $("ERROR: " + $_.Exception.GetType().FullName);
write-error $("ERROR: " + $_.Exception.Message);
continue;
}$s = new-Object Microsoft.SharePoint.SPSite($url);
$c = [Microsoft.Office.Server.Search.Administration.SearchContext]::GetContext($s);
$sc = new-Object Microsoft.Office.Server.Search.Administration.Content($c);$cs = $sc.ContentSources[$csname];
$cs.StopCrawl();
$s.Dispose();
}Stop-Crawl -url https://your_site_url -csname "your content source name"
To check the crawl status values for a content source
function global:Get-CrawlStatus($url)
{
trap [Exception] {
write-error $("ERROR: " + $_.Exception.GetType().FullName);
write-error $("ERROR: " + $_.Exception.Message);
continue;
}$s = new-Object Microsoft.SharePoint.SPSite($url);
$c = [Microsoft.Office.Server.Search.Administration.SearchContext]::GetContext($s);
$sc = new-Object Microsoft.Office.Server.Search.Administration.Content($c);Write-Output $sc.ContentSources;
$s.Dispose();
}Get-CrawlStatus -url https://your_site_url | Format-Table -property CrawlStatus, CrawlStarted, CrawlCompleted
Enjoy!