sirmank
Goto Top

Send-Mailmessage schickt nicht aus geplantem Task

Hallo zusammen,

ich hoffe hier hat jemand noch eine Idee warum per Send-Mailmessage keine Nachricht verschickt wird.

Ich habe ein Powershellskript geschrieben, dass mir eine E-Mail für eine Backupüberwachung schicken soll.
Überprüft wird, welches USB-Laufwerk angeschlossen ist und der Status aus einer Textdatei wird ausgelesen.
Anschließend soll die Textdatei mit kurzem Übersichtstext als E-Mail Versand werden.

Das ganze funktioniert auch, wenn ich die Aufgabe mit "nur ausführen, wenn der Benutzer angemeldet ist" starte.
Lass ich die Aufgabe unabhängig von der Benutzeranmeldung ausführen wird das Skript zwar ausgeführt (Überprüft mit write-out in eine Datei sowohl vor als auch hinter dem Send-Mailmessage), aber es wird keine Mail Versand.

$drives = (gwmi Win32_USBControllerDevice | % {[wmi]($_.Dependent)} | Where-Object {($_.Description -like '*massen*')}).deviceid     # Alle USB Massenspeicher IDs auslesen  
[array]$drives=$drives|%{     # Bekannte IDs in sprechende Namen ändern [array] sorgt dafür, dass auch ein einzelnes Laufwerk in einem Array landet
    switch($_){
        "USB\VID_1A5A&PID_0006\007820719538" {"RDX Laufwerk"}  
        "USB\VID_1058&PID_260D\575837324442314C37505343" {"WD My Passport"}  
        "USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200386Z" {"Montag"}  
        "USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200382V" {"Dienstag"}  
        "USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W201056V" {"Mittwoch"}  
        "USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200367D" {"Donnerstag"}  
        "USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200414Y" {"Freitag1"}  
        "USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200439V" {"Freitag2"}  
        "USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200393A" {"Freitag3"}  
        "USB\VID_04E8&PID_61FB\MSFT30S6YKNS0W200438F" {"Freitag4"}  
        Default {"Unbekanter Datenträger: "+$_}  
        }
    }
if ((Get-Content C:\backup\auswertung-Sicherung.txt |Select-String -Pattern "Gesamt") -like "*Gesamtergebnis: OK*") {$status="OK"} else {$status="Fehler"}     # Status aus Textdatei auslesen  

$body="Sicherung `n`nFolgende USB Laufwerke sind angeschlossen`n`n"+ $drives[0] +"`n"+ $drives[1]+ "`n"+ $drives[2]+"`nStatus Datensicherung: $status"     # Body für die Mail erzeugen  

Send-MailMessage -From 'Backup <hyperv@ho.local>' -to 'Servermeldungen <servermeldungen@local.de>' -Subject 'Backup' -Body $body -Attachments C:\backup\auswertung-Sicherung.txt -SmtpServer 'exchange.local'     # Mail verschicken  

Ich bin erst Mittwoch wieder im Büro und kann leider vorher nicht reagieren.
Euch allen einen schönen Feiertag.
mit freundlichen Grüßen
SirMank

Content-ID: 3144179970

Url: https://administrator.de/contentid/3144179970

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

DerWoWusste
DerWoWusste 02.10.2023 um 21:02:59 Uhr
Goto Top
Wenn du das Kennwort nicht eingespeichert hast, wäre das zu erwarten.
SirMank
SirMank 03.10.2023 um 07:22:13 Uhr
Goto Top
Habe ich leider auch schon ausprobiert,
Auch wenn das Passwort in der Aufgabenplanung eingespeichert ist wird keine Mail verschickt.
Trotzdem, vielen Dank.

Als Ergänzende Info:
Der annehmende Mailserver (Exchange 2016) erlaubt anonyme Benutzer und es taucht dort keine Fehlermeldung im Empfangskonnektor auf.

Ich werde das morgen noch mal kontrollieren, aber ich gehe erst mal davon aus, dass gar kein Netzwerkverkehr stattfindet.
7907292512
7907292512 03.10.2023 aktualisiert um 08:33:56 Uhr
Goto Top
Start-Transcript vor deinen Code und Stop-Transcript dahinter setzen und komplett alles mitloggen lassen.

Btw. Send-Mailmessage nutzt man heute eigentlich nicht mehr, dafür nimmt man besser gleich Mailkit.

Sid.
SirMank
SirMank 03.10.2023 um 08:54:22 Uhr
Goto Top
Das Transcript lasse ich morgen direkt mal anlegen. Bisher konnte ich nämlich noch keine Fehlermeldung mitschneiden.

Mailkit habe ich zwar noch nicht eingesetzt, aber ich habe das bisher so Verstanden, dass man das braucht wenn man Verschlüsselt senden möchte.
Ich benötige weder Verschlüsselung noch Authentifizierung, macht es trotzdem Sinn auf Mailkit zu wechseln?
7907292512
7907292512 03.10.2023 aktualisiert um 09:22:36 Uhr
Goto Top
Zitat von @SirMank:
Ich benötige weder Verschlüsselung noch Authentifizierung, macht es trotzdem Sinn auf Mailkit zu wechseln?
Ja, auf jeden Fall, bietet wesentlich mehr Möglichkeiten und ist zuverlässiger/vorhersagbarer auch was das Error-Handling betrifft.
SirMank
SirMank 03.10.2023 um 11:02:13 Uhr
Goto Top
Ok. Das werde ich mir aber erst Donnerstag anschauen, da habe ich etwas mehr Zeit.
SirMank
SirMank 04.10.2023 um 09:16:24 Uhr
Goto Top
Einen kurzen Zwischenbericht

Nach dem der Mailversand zwei Wochen lang nicht funktioniert hat, funktioniert er heute ohne Probleme. Ich werde Send-Mailmessage auf jeden Fall ersetzen.

Jetzt ist mir aber aufgefallen, dass die WMI-Abfrage aus Zeile 1 das Array scheinbar nicht befüllt, wenn der Task unabhängig von der Benutzeranmeldung ausgeführt wird.
Wenn da noch jemand eine Idee zu hätte...
SirMank
SirMank 06.10.2023 um 11:10:49 Uhr
Goto Top
Ich werde für das WMI Problem einen neuen Thread eröffnen.

Da der Server keinen direkten Internetzugang hat, hat leider alles etwas länger gedauert. ich habe dieses Powershellmodul heruntergeladen:
https://www.powershellgallery.com/packages/Send-MailKitMessage/3.2.0
Leider benötige ich dafür (wie glaube ich für alle Versionen von MailKit) mindestens .Net 4.8.
Das habe ich bereits nachinstalliert, aber ich kann den Server erst am Wochenende neu starten.
Weiteres dann am Montag.
Schönes Wochenende euch allen.

SirMank
SirMank
Lösung SirMank 23.10.2023 um 15:01:03 Uhr
Goto Top
Hallo zusammen,
ich habe das Mailproblem jetzt endlich gelöst:
wie bereits erwähnt habe ich das Send-MailkitMessage installiert und bekam immer die Fehlermeldung, dass die Sperrliste des Zertifikats nicht abgefragt werden kann.
Ich habe erst versucht die Überprüfung zu deaktivieren, was natürlich nicht nur der falsche Weg war sondern auch nicht funktionierte.
Um mehr Möglichkeiten zu haben habe ich doch nur die beiden DLL Dateien als Typ hinzugefügt.
Die Lösung war, das ich sowohl das Zertifikat des Mailservers importiert habe, als auch die Zertifikate der kompletten Zertifikatskette. Da der Computer nicht Mitglied der Domäne des Servers ist fehlte dort natürlich auch das Stammzertifikat der Domäne.
Ich habe das Skript für den Mailversand wie folgt angepasst
# Mail mit Mailkit erzeugen
Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\send-mailkitmessage\MailKit.dll"  
Add-Type -Path "C:\Program Files\WindowsPowerShell\Modules\send-mailkitmessage\MimeKit.dll"  
$SMTP     = New-Object MailKit.Net.Smtp.SmtpClient
$Builder  = New-Object MimeKit.BodyBuilder
$Message  = New-Object MimeKit.MimeMessage
$TextPart = New-Object MimeKit.TextPart("PLAIN")  
$SMTP.CheckCertificateRevocation=$false
$Message.From.Add("hyperv@ho.local")  
$Message.To.Add("servermeldungen@local.de")  
$Message.Subject = 'Backup'  
$Message.Body    = $TextPart
$Builder.TextBody=$body
$Builder.Attachments.Add("C:\backup\auswertung-Sicherung.txt")  
$Message.Body = $Builder.ToMessageBody()
$SMTP.Connect('exchange.ctc.local', 25, $False)  
$SMTP.Send($Message)
$SMTP.Disconnect($true)
$SMTP.Dispose()
# Mailkit Ende