• Hallo Gast, du kaufst gerne günstig ein und erfährst oft vor deinen Freunden von interessanten Angeboten? Dann kannst du dein Talent als Schnäppchenjäger jetzt zu Geld machen und anderen PCGH-Lesern beim Sparen helfen! Schau einfach mal rein - beim Test der Community Deals!

HWiNFO64 schickt mail durch Alert-Funktion

ursmii

PC-Selbstbauer(in)
fuer alle deren Rechner nun unter Hochdruck Falten und heiss bekommen oder eben ploetzlich kuehl bleiben.
Daher hab ich dies hier im Folding@Home publiziert

Seit laengerem nutze ich die Alert-Funktion von HWiNFO64 um mir Schwellwerte anzuzeigen und dann in einem zweiten Schritt auch zu mailen.
Leider hab ich es "auf die Schnelle" nicht geschafft die aktuellen alert Werte mitzugeben und habe deshalb einfach eine
allgemeine, den Bereich beschreibende Meldung abgesetzt.

Gesucht hab ich mit g** und das folgende fuer mich ausgewaehlt und
SENDMAIL 7 Command Line Utilities to Easily Send Email Using SMTP • Raymond.CC entsprechend den Anweisungen installiert

Empfaenger: ursmii
Betreff: ALERT (CPU-Temp)
Body: CPU-Temp (80*C) wurde ueberschritten
Dazu habe ich wie dort beschrieben fuer jeden alert ein entsprechendes .bat & .ps1 erstellt
Batch:
C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe -executionpolicy remotesigned -File C:\Users\ursmii\Documents\system\alerts\alert_CPU_Fan.ps1

Sendmail PS1:
$EmailFrom = "ursmii@mail.net"
$EmailTo = "ursmii@mail.net"
$Subject = "A L E R T (CPU Fan)"
$Body = "RPM CPU_Fan"
$SMTPServer = "mail.mail.net"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("ursmii@mail.net", "PaSsWoRt");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

Das hat mich jedoch nicht befriedigt, da der alert ja einen ueberschreitenden resp. unterschreitenden Schwellwert hat, jedoch dazu nur einen
Programmaufruf zulaesst.
Lange hab ich nach dem API von HWiNFO64 gesucht und dies damit versucht zu implementieren.
Schlussendlich hab ich wegen des Aufwandes damit aufgehoert.

Nun in der Zwangsquarantaene (immer noch gesund) hab ich das ganze nochmals durchgedacht und bin zum Schluss gekommen, dass es eigentlich mit einem Win-Batch file klappen muesste.
Da die Batchprogrammierung doch einige jahrzehnte zurueckliegt hat mir dann diese Seite Computer Hope - Index sehr geholfen.

Voraussetzung:
- Fuer die zu ueberwachenden Werte muss jeweils ein Alert enabled sein
- Die value ist entsprechend zu setzen (kleiner, groesser, beide)
- Run a Program muss auf das spezifische Batch file verweisen
- Log alerts into "HWINFO_AlertLog.txt" muss behakt sein. Hinweis: Die Datei ist im Installationsverzeichnis!

Bemerkung: Die Verwendung von %v & %s hab ich nicht hin gekriegt. Vielleicht Du?

Nun zum Programm, das besteht nicht wie urspruenglich aus zwei Teilen; nein der .ps1-Teil wird dynamisch erstellt und nach der Ausfuehrung gleich wieder geloescht.
Die fuer den Mail-Body relevanten Daten werden aus der letzten Zeile der AlertLog-Datei genommen.
------------------------------
@echo off
for /f "delims==" %%a in (C:\progra~1\HWiNFO64\HWiNFO_AlertLog.txt) do set lastline=%%a
cd C:\Users\ursm\Documents\system\alerts
echo %lastline% >> _alert-mail.txt

@echo $EmailFrom = "ursmii@mail.net" > alert_Temp_GPU.ps1
@echo $EmailTo = "ursmii@mail.net" >> alert_Temp_GPU.ps1
@echo $Subject = "A L E R T (GPU-Temp)" >> alert_Temp_GPU.ps1
@echo $Body = "%lastline%" >> alert_Temp_GPU.ps1
@echo $SMTPServer = "mail.mail.net" >> alert_Temp_GPU.ps1
@echo $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) >> alert_Temp_GPU.ps1
@echo $SMTPClient.EnableSsl = $true >> alert_Temp_GPU.ps1
@echo $SMTPClient.Credentials = New-Object System.Net.NetworkCredential("ursmii@mail.net", "PaSsWoRt"); >> alert_Temp_GPU.ps1
@echo $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body) >> alert_Temp_GPU.ps1

C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe -executionpolicy remotesigned -File C:\Users\ursmii\Documents\system\alerts\alert_Temp_GPU.ps1
del C:\Users\ursm\Documents\system\alerts\alert_Temp_GPU.ps1

@echo on
--------------------------------

Daraus entsteht die bekannte ps1-Datei, die von Sendmail verwendet wird

$EmailFrom = "ursmii@mail.net"
$EmailTo = "ursmii@mail.net"
$Subject = "A L E R T (CPU-Fan)"
$Body = "23.3.2020,12:57:54.629,GPU Temperature,35 *C "
$SMTPServer = "mail.gmx.net"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("ursmii@mail.net", "passwort");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

Ich wuensche euch viel Spass damit :)

. 01_Schwellwert_erreicht.jpg 02_Alert_Settings.jpg 03_Alert-Mail.jpg
 
Oben Unten