$ver = $host | select version
if ($ver.Version.Major -gt 1) {
$Host.Runspace.ThreadOptions = "ReuseThread"
}
if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) {
Add-PsSnapin Microsoft.SharePoint.PowerShell
}
#----CONFIGS
$searchServiceName = "just testing"
$logFilePath = "c:tempsearchserverlog.txt"
function GetErrorLogs(){
$ssa = Get-SPEnterpriseSearchServiceApplication | Where-Object {$_.Name -eq $searchServiceName}
$ssaContent = new-object Microsoft.Office.Server.Search.Administration.Content($ssa)
$logViewer = New-Object Microsoft.Office.Server.Search.Administration.Logviewer $ssa
$ErrorList = $logViewer.GetAllStatusMessages() | Select ErrorId
$crawlLogFilters = New-Object Microsoft.Office.Server.Search.Administration.CrawlLogFilters;
$crawlLogFilters.AddFilter([Microsoft.Office.Server.Search.Administration.MessageType]"Error");
$startNum = 0;
$errorItems += $logViewer.GetCurrentCrawlLogData($crawlLogFilters, ([ref] $startNum));
WHILE($startNum -ne -1){
$crawlLogFilters.AddFilter("StartAt", $startNum);
$startNum = 0;
$errorItems += $logViewer.GetCurrentCrawlLogData($crawlLogFilters, ([ref] $startNum));
}
return $errorItems
}
function sendEmail($errorItemsParam){
$currentDate = get-date;
$isThereAnyErrorsToday = "false";
$result = "<table>";
foreach($error in $errorItemsParam){
$date = get-date $error.LastTouchStart;
if($date.Date -eq $currentDate.Date){
$result += "<tr><td>DisplayUrl</td><td>"+$error.DisplayUrl+"</td></tr>";
$result += "<tr><td>ErrorLevel</td><td>"+$error.ErrorLevel+"</td></tr>";
$result += "<tr><td>ErrorMsg</td><td>"+$error.ErrorMsg+"</td></tr>";
$result += "<tr><td>HResult</td><td>"+$error.HResult+"</td></tr>";
$result += "<tr><td>ErrorDesc</td><td>"+$error.ErrorDesc+"</td></tr>";
$result += "<tr><td>ContentSourceId</td><td>"+$error.ContentSourceId+"</td></tr>";
$result += "<tr><td>LastTouchStart</td><td>"+$error.LastTouchStart+"</td></tr>";
$result += "<tr><td colspan='2'></td></tr>";
$result += "<tr><td colspan='2'></td></tr>"; $isThereAnyErrorsToday = "true";
}
}
$result += "</table>";
#Write-Host $result
$result > $logFilePath #SMTP server name $smtpServer = "mailserver.com"
#Creating a Mail object
$msg = new-object Net.Mail.MailMessage
#Email structure
$msg.Subject = "Search server error logs"
$msg.Body = Get-Content $logFilePath
$msg.IsBodyHtml = "true";
#Creating SMTP server object $smtp = new-object Net.Mail.SmtpClient($smtpServer)
#Sending email
if($isThereAnyErrorsToday -eq "true"){
Write-Host "Sending Email"
$smtp.Send($msg)
}
else{
Write-Host "No error today"
}
}
$messageBody = GetErrorLogs sendEmail($messageBody)