Quantcast
Channel: SQL Server
Viewing all articles
Browse latest Browse all 3819

Blog Post: PowerShell- Monitoring Multiple Service on a Group of Servers

$
0
0
I got a request to monitor multiple services and send an email to intended recipients. This post explains how to monitor a multiple services on a group of servers. The function Get-ServiceStatusReport comprises of various cmdLets and function to monitor services on a list of servers. Get-Service HTML Ouptut Email Address validation The Function Get-ServiceStatusReport contains five parameters ComputerList – List of Servers ServiceName – Name of Services separated by comma SMTPMail – SMTP mail address FromID – Valid Email ID ToID – Valid Email ID Function call - Get-ServiceStatusReport -ComputerList C:\server.txt -includeService  "MySQL","MpsSvc","W32Time" -To pjayaram@app.com -From pjayaram@ app.com -SMTPMail  app01. app.com OR Get-ServiceStatusReport -ComputerList C:\server.txt -includeService  MySQL,MpsSvc,W32Time -To pjayaram@app.com -From pjayaram@ app.com -SMTPMail  app01. app.com You can download the code :-  MonitorMultiple Services Output:- Code:- Function Get-ServiceStatusReport  {  param(  [String]$ComputerList,[String[]]$includeService,[String]$To,[String]$From,[string]$SMTPMail  )  $script:list = $ComputerList   $ServiceFileName= "c:\ServiceFileName.htm"  New-Item -ItemType file $ServiceFilename -Force  # Function to write the HTML Header to the file  Function writeHtmlHeader  {  param($fileName)  $date = ( get-date ).ToString('yyyy/MM/dd')  Add-Content $fileName " html "  Add-Content $fileName " head "  Add-Content $fileName " meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' "  Add-Content $fileName ' title Service Status Report  /title '  add-content $fileName ' STYLE TYPE="text/css" '  add-content $fileName  " !--"  add-content $fileName  "td {"  add-content $fileName  "font-family: Tahoma;"  add-content $fileName  "font-size: 11px;"  add-content $fileName  "border-top: 1px solid #999999;"  add-content $fileName  "border-right: 1px solid #999999;"  add-content $fileName  "border-bottom: 1px solid #999999;"  add-content $fileName  "border-left: 1px solid #999999;"  add-content $fileName  "padding-top: 0px;"  add-content $fileName  "padding-right: 0px;"  add-content $fileName  "padding-bottom: 0px;"  add-content $fileName  "padding-left: 0px;"  add-content $fileName  "}"  add-content $fileName  "body {"  add-content $fileName  "margin-left: 5px;"  add-content $fileName  "margin-top: 5px;"  add-content $fileName  "margin-right: 0px;"  add-content $fileName  "margin-bottom: 10px;"  add-content $fileName  ""  add-content $fileName  "table {"  add-content $fileName  "border: thin solid #000000;"  add-content $fileName  "}"  add-content $fileName  "-- "  add-content $fileName  " /style "  Add-Content $fileName " /head "  Add-Content $fileName " body "  add-content $fileName  " table width='100%' "  add-content $fileName  " tr bgcolor='#CCCCCC' "  add-content $fileName  " td colspan='4' height='25' align='center' "  add-content $fileName  " font face='tahoma' color='#003399' size='4' strong Service Stauts Report - $date /strong /font "  add-content $fileName  " /td "  add-content $fileName  " /tr "  add-content $fileName  " /table "  }  # Function to write the HTML Header to the file  Function writeTableHeader  {  param($fileName)  Add-Content $fileName " tr bgcolor=#CCCCCC "  Add-Content $fileName " td width='10%' align='center' ServerName /td "  Add-Content $fileName " td width='50%' align='center' Service Name /td "  Add-Content $fileName " td width='10%' align='center' status /td "  Add-Content $fileName " /tr "  }  Function writeHtmlFooter  {  param($fileName)  Add-Content $fileName " /body "  Add-Content $fileName " /html "  }  Function writeDiskInfo  {  param($filename,$Servername,$name,$Status)  if( $status -eq "Stopped")  {   Add-Content $fileName " tr "   Add-Content $fileName " td bgcolor='#FF0000' align=left  b $servername /td "   Add-Content $fileName " td bgcolor='#FF0000' align=left  b $name /td "   Add-Content $fileName " td bgcolor='#FF0000' align=left  b $Status /td "   Add-Content $fileName " /tr "  }  else  {  Add-Content $fileName " tr "   Add-Content $fileName " td  $servername /td "   Add-Content $fileName " td  $name /td "   Add-Content $fileName " td  $Status /td "  Add-Content $fileName " /tr "  }  }  writeHtmlHeader $ServiceFileName   Add-Content $ServiceFileName " table width='100%' tbody "   Add-Content $ServiceFileName " tr bgcolor='#CCCCCC' "   Add-Content $ServiceFileName " td width='100%' align='center' colSpan=3 font face='tahoma' color='#003399' size='2' strong  Service Details /strong /font /td "   Add-Content $ServiceFileName " /tr "   writeTableHeader $ServiceFileName  #Change value of the following parameter as needed  $InlcudeArray=@()  #List of programs to exclude  #$InlcudeArray = $inlcudeService  Foreach($ServerName in (Get-Content $script:list))  {  $service = Get-Service -ComputerName $servername  if ($Service -ne $NULL)  {  foreach ($item in $service)   {   #$item.DisplayName   Foreach($include in $includeService)        {                          write-host $inlcude                                       if(($item.serviceName).Contains($include) -eq $TRUE)      {      Write-Host  $item.MachineName $item.name $item.Status       writeDiskInfo $ServiceFileName $item.MachineName $item.name $item.Status       }      }   }  }  }  Add-Content $ServiceFileName " /table "   writeHtmlFooter $ServiceFileName  function Validate-IsEmail ([string]$Email)  {                  return $Email -match "^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(? =[0-9a-zA-Z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$"  }  Function sendEmail    {   param($from,$to,$subject,$smtphost,$htmlFileName)    [string]$receipients="$to"  $body = Get-Content $htmlFileName   $body = New-Object System.Net.Mail.MailMessage $from, $receipients, $subject, $body   $body.isBodyhtml = $true  $smtpServer = $MailServer  $smtp = new-object Net.Mail.SmtpClient($smtphost)  $validfrom= Validate-IsEmail $from  if($validfrom -eq $TRUE)  {  $validTo= Validate-IsEmail $to  if($validTo -eq $TRUE)  {  $smtp.Send($body)  write-output "Email Sent!!"  }  }  else  {  write-output "Invalid entries, Try again!!"  }  }  $date = ( get-date ).ToString('yyyy/MM/dd')  sendEmail -from $From -to $to -subject "Service Status - $Date" -smtphost $SMTPMail -htmlfilename $ServiceFilename  }

Viewing all articles
Browse latest Browse all 3819

Trending Articles