| 1 | <#
|
|---|
| 2 | Author: David Schaerer, ETH Zurich, July 2016
|
|---|
| 3 |
|
|---|
| 4 | example of smartd env variables:
|
|---|
| 5 | SMARTD_ADDRESS=user@yourdomain.local
|
|---|
| 6 | SMARTD_DEVICE=/dev/sda
|
|---|
| 7 | SMARTD_DEVICEINFO=WDC WD5000AAKS-00V1A0, S/N:WD-WCAWF3694327, WWN:5-0014ee-157d29a56, FW:05.01D05, 500 GB
|
|---|
| 8 | SMARTD_DEVICESTRING=/dev/sda
|
|---|
| 9 | SMARTD_DEVICETYPE=ata
|
|---|
| 10 | SMARTD_FAILTYPE=EmailTest
|
|---|
| 11 | SMARTD_MESSAGE=TEST EMAIL from smartd for device: /dev/sda
|
|---|
| 12 | SMARTD_PREVCNT=0
|
|---|
| 13 | SMARTD_TFIRST=Thu Jul 14 09:04:10 2016 WEDT
|
|---|
| 14 | SMARTD_TFIRSTEPOCH=1468479850
|
|---|
| 15 | #>
|
|---|
| 16 |
|
|---|
| 17 |
|
|---|
| 18 | # Configure Email settings here
|
|---|
| 19 | $from = "SmartMonTools <root@$($env:COMPUTERNAME.ToLower()).yourdomain.local>"
|
|---|
| 20 | $defaultToAddress = "admin@yourdomain.local"
|
|---|
| 21 | $smtpSrv = "smtp.yourdomain.local"
|
|---|
| 22 |
|
|---|
| 23 |
|
|---|
| 24 |
|
|---|
| 25 | ############# Email from/to part #############
|
|---|
| 26 |
|
|---|
| 27 | # To
|
|---|
| 28 | # SMARTD_ADDRESS will be defined by smartd.conf (comma separated string of email addresses without spaces)
|
|---|
| 29 | if (!$env:SMARTD_ADDRESS){
|
|---|
| 30 | # If no email recipient was defined set it to a predefined email address
|
|---|
| 31 | $to = $defaultToAddress
|
|---|
| 32 | } else {
|
|---|
| 33 | # Convert recipient string from smartd.config into a valid string array for Send-MailMessage cmdlet
|
|---|
| 34 | [string[]]$to = $env:SMARTD_ADDRESS.Split(" ")
|
|---|
| 35 |
|
|---|
| 36 | # If any spaces, remove them
|
|---|
| 37 | for ($i=0;$i -lt $to.Count;$i++){
|
|---|
| 38 | $to[$i] = $to[$i].Trim()
|
|---|
| 39 | }
|
|---|
| 40 | }
|
|---|
| 41 |
|
|---|
| 42 | ############# Subject part #############
|
|---|
| 43 |
|
|---|
| 44 | $subject="SMART error ($env:SMARTD_FAILTYPE) detected on host: $env:COMPUTERNAME"
|
|---|
| 45 |
|
|---|
| 46 | ############# Email text part #############
|
|---|
| 47 |
|
|---|
| 48 | if (!($env:SMARTD_FAILTYPE -eq "EmailTest")){
|
|---|
| 49 | $furtherInvest="You can also use the smartctl utility for further investigation.`n"
|
|---|
| 50 | }
|
|---|
| 51 |
|
|---|
| 52 | if (!($env:SMARTD_PREVCNT -eq 0)){
|
|---|
| 53 | $sentTime = "The original message about this issue was sent at $env:SMARTD_TFIRST.`n"
|
|---|
| 54 | }
|
|---|
| 55 |
|
|---|
| 56 | switch ($env:SMARTD_NEXTDAYS){
|
|---|
| 57 | "" {$nextWarn="No additional messages about this problem will be sent.`n"}
|
|---|
| 58 | 1 {$nextWarn="Another message will be sent in 24 hours if the problem persists.`n"}
|
|---|
| 59 | default {$nextWarn="Another message will be sent in $env:SMARTD_NEXTDAYS days if the problem persists.`n"}
|
|---|
| 60 | }
|
|---|
| 61 |
|
|---|
| 62 | $emailBody=("
|
|---|
| 63 | This message was generated by the smartd service running on:
|
|---|
| 64 |
|
|---|
| 65 | host name: $env:COMPUTERNAME
|
|---|
| 66 | DNS domain: $((Get-WmiObject win32_computersystem).Domain)
|
|---|
| 67 | Win domain: $env:USERDOMAIN
|
|---|
| 68 |
|
|---|
| 69 | The following warning/error was logged by the smartd service:
|
|---|
| 70 |
|
|---|
| 71 | $env:SMARTD_MESSAGE
|
|---|
| 72 |
|
|---|
| 73 | Device info:
|
|---|
| 74 | $env:SMARTD_DEVICEINFO
|
|---|
| 75 |
|
|---|
| 76 | For details see the event log or log file of smartd.
|
|---|
| 77 | $($furtherInvest)$($sentTime)$($nextWarn)
|
|---|
| 78 |
|
|---|
| 79 | --
|
|---|
| 80 | This message has been generated with SmartMonTools $((Get-Item .\smartd.exe).VersionInfo.FileVersion)
|
|---|
| 81 | ")
|
|---|
| 82 | Write-Debug $emailBody > .\smartdMsg-$env:COMPUTERNAME.txt
|
|---|
| 83 |
|
|---|
| 84 | ############# Email delivery part #############
|
|---|
| 85 |
|
|---|
| 86 | if (!$subject){
|
|---|
| 87 | $subject = "smartd email error: missing subject"
|
|---|
| 88 | } elseif (!$emailBody){
|
|---|
| 89 | $emailBody = "smartd email error: missing email body."
|
|---|
| 90 | }
|
|---|
| 91 |
|
|---|
| 92 | # Send the email
|
|---|
| 93 | Send-MailMessage -SmtpServer $smtpSrv -to $to -from $from -Subject $subject -Body $emailBody
|
|---|