Monitor SharePoint Web Sites Availability and Send Alert Email using PowerShell
Requirement: Script to monitor SharePoint web sites and Trigger an Alert Email when something goes wrong!
PowerShell script to Monitor SharePoint Sites:
Here is the alert Email in action:
Schedule this script in Windows task scheduler to run for every 10 minutes.
Update: What if the site loaded with an error? E.g. "Sorry, something went wrong" error message.
Here is the updated script to check if the site loaded with error message:
PowerShell script to Monitor SharePoint Sites:
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue #Configuration Parameters $EmailFrom = "[email protected]" $EmailTo = @("[email protected]") $EmailSubject = "Alert: SharePoint site is Down!" #Get Outgoing Email Server of the SharePoint Farm $SMTPServer= (Get-SPWebApplication -IncludeCentralAdministration | Where { $_.IsAdministrationWebApplication } ) | % {$_.outboundmailserviceinstance.server.address} #Make a web request to check site status $WebClient = New-Object System.Net.WebClient $WebClient.UseDefaultCredentials = $true #Iterate through each web application Foreach($WebApp in (Get-SPWebApplication)) { $EmailBody="" #Get the timestamp $TimeStamp = Get-Date –f "yyyy-MM-dd HH:mm:ss" try { $Page = $WebClient.DownloadString($WebApp.Url) } catch [Exception] { $EmailBody += "The SharePoint site: $($WebApp.Url) is unavailable. Please take necessary action!<br><br>" $EmailBody += "<b>URL:</b> " + $WebApp.Url + "<br><br>" $EmailBody += "<b>Exception:</b> " + $_.Exception.message + "<br><br>" $EmailBody += "<b>Timestamp:</b> " + $TimeStamp #Send an Alert Email message Send-MailMessage -To $EmailTo -Subject $EmailSubject -Body $EmailBody -SmtpServer $SMTPServer -From $EmailFrom -BodyAsHtml -usessl } }
Here is the alert Email in action:
Schedule this script in Windows task scheduler to run for every 10 minutes.
Update: What if the site loaded with an error? E.g. "Sorry, something went wrong" error message.
Here is the updated script to check if the site loaded with error message:
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue #Configuration Parameters $EmailFrom = "[email protected]" $EmailTo = @("[email protected]") $EmailSubject = "Alert: SharePoint site is Down!" #Get Outgoing Email Server of the SharePoint Farm $SMTPServer= (Get-SPWebApplication -IncludeCentralAdministration | Where { $_.IsAdministrationWebApplication } ) | % {$_.outboundmailserviceinstance.server.address} #Make a web request to check site status $WebClient = New-Object System.Net.WebClient $WebClient.UseDefaultCredentials = $true #Iterate through each web application Foreach($WebApp in (Get-SPWebApplication)) { $EmailBody="" #Get the timestamp $TimeStamp = Get-Date –f "yyyy-MM-dd HH:mm:ss" try { $Page = $WebClient.DownloadString($WebApp.Url) if($Page.Contains("Sorry, something went wrong")) { $EmailBody += "The SharePoint site: $($WebApp.Url) encountered with an unexpected error. Please take necessary action!<br><br>" $EmailBody += "<b>URL:</b> " + $WebApp.Url + "<br><br>" $EmailBody += "<b>Timestamp:</b> " + $TimeStamp #Send an Alert Email message Send-MailMessage -To $EmailTo -Subject $EmailSubject -Body $EmailBody -SmtpServer $SMTPServer -From $EmailFrom -BodyAsHtml -usessl } } catch [Exception] { $EmailBody += "The SharePoint site: $($WebApp.Url) is unavailable. Please take necessary action!<br><br>" $EmailBody += "<b>URL:</b> " + $WebApp.Url + "<br><br>" $EmailBody += "<b>Exception:</b> " + $_.Exception.message + "<br><br>" $EmailBody += "<b>Timestamp:</b> " + $TimeStamp #Send an Alert Email message Send-MailMessage -To $EmailTo -Subject $EmailSubject -Body $EmailBody -SmtpServer $SMTPServer -From $EmailFrom -BodyAsHtml -usessl } }You can add few more probable error messages such as: "cannot connect to the configuration database", "Server error", etc.
Hello, excellent script, I would like to use it in my company, at this moment I am executing it but it jumps an error:
ReplyDeleteSend-MailMessage: The remote certificate is not valid according to the validation procedure.
In C: \ Users \ administrator \ Documents \ Missing SAG \ NoticeCitySite.ps1: 54 Character: 9
+ Send-MailMessage -To $ EmailTo -Subject $ EmailSubject -Body $ EmailBody -S ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: InvalidOperation: (System.Net.Mail.SmtpClient: SmtpClient) [Send-MailMessage], AuthenticationException
+ FullyQualifiedErrorId: AuthenticationException, Microsoft.PowerShell.Commands.SendMailMessage
make sure your code uses: -usessl parameter. Add your SharePoint server to the relay list in Exchange server.
DeleteHow to test it?
ReplyDeleteThe best it to add it into your warmup script
ReplyDelete