Netz-Weise Logo

Weisheiten - der Netz-Weise Blog

Hier finden Sie Tipps und Tricks für vor, während und nach der Schulung.
2 Minuten Lesezeit (301 Worte)

Send-Mailmessage erzeugt keine verwendbaren Fehler - und wie man damit umgeht

Send-Mailmessage ist ein sehr nützliches Cmdlet, um Emails direkt aus Powershell an einen Mailserver zu senden. Er steht seit Powershell 2.0 zur Verfügung und vermeidet so, dass man sich direkt mit dem [System.net.mail]-Typ herumschlagen muß. Allerdings zeigt das Cmdlet ein sehr merkwürdiges Fehlerverhalten.

Wenn man versucht, Verbindungsfehler abzufangen, ist ein erster vernünftiger Ansatz, einfach auf den Parameter -Errorvariable zurückzugreifen:

Send-Mailmessage -SmtpServer mail.meineFirma.de -Subject 'Warnung' -Body 'Hier kommt die Maus' -From 'Elefant@netz-weise.xyz' -to 'Maulwurf@netz-weise.xyz' -ErrorVariable Fehlermeldung
If ( $Fehlermeldung ) { $Fehlermeldung.Exception.Message }

Tritt ein Fehler auf, wird dieser direkt in der Variablen $Fehlermeldung gespeichert. Achtung, bei der Angabe der Fehlervariablen wird kein $-Zeichen angegeben!

Dummerweise funktioniert diese Herangehensweise nicht. Die Variable $Fehlermeldung bleibt immer leer. Also nächster Versuch, Abfragen der Variablen $Error[0], die alle Fehler als Array speichert und im ersten Eintrag mit dem Index 0 immer den letzten Fehler gespeichert hat. Um herauszufinden, ob Send-Mailmessage einen Fehler geworfen hat oder erfolgreich war, kann man über die Standardvariable $? abrufen. $? ist true, wenn der letzte Befehl erfolgreich war, und false, wenn ein Fehler aufgetreten ist.

Send-Mailmessage -SmtpServer mail.meineFirma.de -Subject 'Warnung' -Body 'Hier kommt die Maus' -From 'Elefant@netz-weise.xyz' -to 'Maulwurf@netz-weise.xyz'
If ( -not $? ) {  $error[0].Exception.Message }

Dummerweise klappt auch dieser Ansatz nicht. $? gibt zwar korrekt false aus, wenn Send-Mailmessage eine Fehlermeldung ausgibt, aber wieder ist die Fehlermeldung nicht in der Fehlervariablen. Tatsächlich, und das ist das Problem, hat der Programmierer des Cmdlets geschlampt und das Fehlerobjekt offensichtlich nicht sauber ausgegeben. Was hilft ist, den Fehlerausgabestrom in die Standardausgabe umzuleiten und den Fehler von hier aus abzufangen:

$Fehlermeldung = Send-Mailmessage -SmtpServer mail.meineFirma.de -Subject 'Warnung' -Body 'Hier kommt die Maus' -From 'Elefant@netz-weise.xyz' -to 'Maulwurf@netz-weise.xyz' 2>&1
If ( $Fehlermeldung ) { $Fehlermeldung.Exception.Message }

Dieser Ansatz sollte so auch bei anderen Cmdlet funktionieren, die die Fehlermeldung nicht sauber zurückgeben.

Weiterführende Links

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage?view=powershell-5.1

Parameter in Powershell-Funktionen und Skripten vo...
MDT - Autologon nach Installation aktiviert lassen

Ähnliche Beiträge

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Samstag, 11. Mai 2024

Sicherheitscode (Captcha)