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 |
---|