The following script reads URL’s from an array to check if specific web services are online. When the script finds that one or more services are offline it sends an e-mail message (HTML). A TEXT version of the message is created in the Windows EventLog.
Het script uses custum functions: fnSendMail en fnWriteEventLog om berichten af te handelen.
# Global config settings... [string]$sSMTPServer1 = "smtp.example.org" [string]$sSubject1 = "EXAMPLE:WebService probes..." [string]$sToAddress1 = "test@example.org" [string]$sEventLogSource = "EVENTLOGSOURCE" [switch]$swAlarm = $false [array]$aWebServices1 = @( "https://example.org/webService?WSDL", "https://example.org/webService?WSDL", ) # Functions and procedures... function fnProbeWebSvc() { param ( [string]$sWebSvcWSDL ) $oWebSvc1 = New-WebServiceProxy -Uri $sWebSvcWSDL if ($oWebSvc1) { [switch]$swWebSvcIsAlive = $true } else { [switch]$swWebSvcIsAlive = $false } return $swWebSvcIsAlive } # Start Main script... # Create array for results... [array]$aWebServiceState = @() # Fill table from array... foreach ($row1_aWebServices1 in $aWebServices1) { $oWebServiceState = New-Object PSObject -Property @{ 'WebService' = $row1_aWebServices1 'IsAlive' = (fnProbeWebSvc -sWebSvcWSDL $row1_aWebServices1) } # FLip Alarm status if fnProbeWebSvc return value is false... if ($oWebServiceState.IsAlive -eq $false) {[switch]$swAlarm = $true} $aWebServiceState += $oWebServiceState } # Build HTML and TEXT body w. array data if alarm status is set to true... if ($swAlarm -eq $true) { # Body header HTML... $sbBody1_HTML = New-Object System.Text.StringBuilder [void]$sbBody1_HTML.Append("<html><head><title></title></head><body>`r`n") [void]$sbBody1_HTML.Append("<table><tbody><tr bgcolor='grey'><th>WebService</th><th>IsAlive</th></tr>`r`n") # Body header TEXT... $sbBody1_TEXT = New-Object System.Text.StringBuilder [void]$sbBody1_TEXT.Append("Webservice(s) offline. Contact your administrators.`r`n`r`n") # Build table rows from array... foreach ($row1_aWebServiceState in $aWebServiceState) { # Build table rows HTML... [void]$sbBody1_HTML.Append("<tr bgcolor='lightblue'><td>") [void]$sbBody1_HTML.Append($row1_aWebServiceState.WebService) # Row Coloring... if ($row1_aWebServiceState.IsAlive -eq $true) { [void]$sbBody1_HTML.Append("</td><td bgcolor='lightgreen'>") } else { [void]$sbBody1_HTML.Append("</td><td bgcolor='lightpink'>") } [void]$sbBody1_HTML.Append($row1_aWebServiceState.IsAlive) [void]$sbBody1_HTML.Append("</td></tr>") # Build table rows TEXT (only show failed services... if ($row1_aWebServiceState.IsAlive -eq $false) { [void]$sbBody1_TEXT.Append($row1_aWebServiceState.WebService) [void]$sbBody1_TEXT.Append(": ") [void]$sbBody1_TEXT.Append($row1_aWebServiceState.IsAlive) [void]$sbBody1_TEXT.Append("`r`n") } } # Mail body footer... [void]$sbBody1_HTML.Append("</tbody></table>`r`n") [void]$sbBody1_HTML.Append("<html><head><title></title></head><body>`r`n") # Send HTML body in mail to admins... [string]$sBody1 = $sbBody1_HTML.ToString() fnSendMail -sSMTPSrvrName $sSMTPServer1 -sFrom (fnGetFQDN -swIsEmail) -sTo $sToAddress1 -sSubject $sSubject1 -sBody $sBody1 -swIsBodyHTML # Send text body to eventlog... fnWriteEventLog -sNode "NODENAME" -sMessage $sbBody1_TEXT.ToString() }