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()
}