While putting together a few Automox Worklets, I found I wanted a quick way to tell whether a worklet had been processed by a remote agent (vs. combing through logs π).
I cobbled together a hasty email snippet to drop into the Evaluation Code window (this prolly should be placed before any real evaluation code block to ensure exit codes donβt overstep this snippet).
πππ
Example email:
Evaluation code:
<# Grab some system variables to pump into the email alert (as an example). #>
$Hostname = $env:COMPUTERNAME.ToUpper()
$HostDomain = $env:USERDOMAIN.ToUpper()
$HostWindowsVersion = (Get-WmiObject -class Win32_OperatingSystem).Caption.ToUpper()
$HostWindowsBuild = (Get-WmiObject -class Win32_OperatingSystem).Version.ToUpper()
<# Build a message body. #>
$smtpHTMLBody =
@"
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<style>
table {
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
font-size:1em;
text-align:Left;
border-collapse: collapse;
width: 50%;
}
#p01 {
color: #C95D42;
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
font-size: 1em;
font-weight: bold;
}
#p02 {
color: #FFFFFF;
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
font-size: 0.1em;
}
#p03 {
color: #767676;
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
font-size: 0.5em;
}
td {
border:1px solid #98bf21;
padding-top:5px;
padding-bottom:5px;
padding-right:7px;
padding-left:7px;
}
td#td01 {
font-weight: bold;
color:#ffffff;
padding-top:5px;
padding-bottom:5px;
padding-right:7px;
padding-left:7px;
background-color:#A7C942;
}
</style>
</head>
<body>
<p id="p01">Alert Message:</p>
<table>
<tr>
<td id="td01">Host:</td>
<td>$Hostname</td>
</tr>
<tr>
<td id="td01">Domain:</td>
<td>$HostDomain</td>
</tr>
<tr>
<td id="td01">Windows Version:</td>
<td>$HostWindowsVersion</td>
</tr>
<tr>
<td id="td01">Windows Build:</td>
<td>$HostWindowsBuild</td>
</tr>
</table>
<p id="p02">hidden value used to filter message</p>
<p id="p03">Powered by Automox. :)</p>
</body>
</html>
"@
<# Declare message components. #>
$smtpFrom = "Worklet Alerts <worklet_alerts@domain.com>"
$smtpTo = "Worklet Admin <worklet_admin@domain.com>"
$smtpSubject = "Automox Alert :: " + $env:COMPUTERNAME + " :: " + (Get-Date).ToString("MM/dd/yy HH:mm")
$SMTPServer = "smtp.domain.com"
$SMTPPort = "587"
$smtpUser = "messenger@domain.com"
$smtpPass = "Sup37looo000oong&kindaC0mpLeX"
$smtpSSPass = $smtpPass | ConvertTo-SecureString -AsPlainText -Force
$smtpCreds = New-Object System.Management.Automation.PSCredential -ArgumentList $smtpUser,$smtpSSPass
<# Build and send the message - written to support multiple versions of Powershell. #>
if ($PSVersionTable.PSVersion.Major -ge 3) {
$email = @{
From = $smtpFrom
To = $smtpTo
Subject = $smtpSubject
BodyAsHtml = $True
Body = $smtpHTMLBody
#attachment = $path
smtpServer = $SMTPServer
Port = $smtpPort
UseSsl = $True
Credential = $smtpCreds
}
send-MailMessage @email
} else {
$emailMessage = New-Object System.Net.Mail.MailMessage
$emailMessage.From = $smtpFrom
$emailMessage.To.Add( $smtpTo )
$emailMessage.Subject = $smtpSubject
$emailMessage.IsBodyHtml = $true
$emailMessage.Body = $smtpHTMLBody
$SMTPClient = New-Object Net.Mail.SmtpClient($SMTPServer,$SMTPPort)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($smtpUser, $smtpPass);
$SMTPClient.Send($emailMessage)
}