masterblaster88
Goto Top

E-Mail Versand Powershell, -body Variable auslesen

Guten Morgen,

ich glaube ich steh ein wenig auf dem Schlauch. Ich will eine E-Mail versenden und habe ein Problemchen. Ich hoffe Ihr könnt mir dabei helfen.
Ich will als Body von der E-Mail eine Log Datei versenden (ohne Anhang). Diese lese ich vorher in eine Variable ein und füge es später bei -body ein.


Inmoment sieht es so aus:

$EmailBody=Get-Content c:\scripts\log\log.txt
Send-MailMessage -To <<Empfänger>> -from <<Absender>> -SmtpServer mail.gmx.net -Subject "LogDatei" -Body $EmailBody -UseSsl -Credential $creds

Wenn ich das Script ausführe kommt die Fehlermeldung:

Send-MailMessage : "System.Object" kann nicht in den Typ "System.String" konvertiert werden, der für den Parameter "Body" erforderlich ist. Die angegebene Methode wird nicht unterstützt.
Bei Zeile:2 Zeichen:118
Send-MailMessage -To <<Empfänger>> -from <<Absender>> -SmtpServer mail.gmx.net -Subject "LogDatei" -Body <<<< $EmailBody -UseSsl -Credential $creds
CategoryInfo : InvalidArgument: (: ) [Send-MailMessage], ParameterBindingException
FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.SendMailMessage

(Hab natürlich Empfänger und Absender anonymisiert... da stehen tatsächlich E-Mail Adressen drin)
Ich benutze Das Script ziemlich oft, aber diese Konstellation hatte ich noch nicht. Wie kann ich den Variablen Inhalt in String Konvertieren?!


Ich hoffe Ihr könnt mir ein wenig weiterhelfen.

Infos:
- Windows Server 2008 R2
- Windows Powershell ISE Host Version 2.0
- E-Mail Versand funktioniert einwandfrei (nur Body macht Probleme)


(P.S: Sorry für die Formatierung... ist noch ziemlich früh heute morgen face-smile )

Content-ID: 240975

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

Ausgedruckt am: 05.11.2024 um 02:11 Uhr

colinardo
Lösung colinardo 16.06.2014 aktualisiert um 09:39:29 Uhr
Goto Top
Moin MasterBlaster,
ändere diese Zeile wie folgt ab:
$EmailBody=Get-Content c:\scripts\log\log.txt | Out-String
Dann ist der Typ der Variablen kein Zeilen-Array mehr sondern ein purer String!

Grüße Uwe
MasterBlaster88
MasterBlaster88 16.06.2014 um 09:39:56 Uhr
Goto Top
Super
danke für die schnelle Antwort Uwe.
Ich stand wirklich auf dem Schlauch face-smile
AnkhMorpork
AnkhMorpork 16.06.2014 aktualisiert um 12:05:59 Uhr
Goto Top
Hallo,

alternativ sollte auch das funktionieren:

$EmailBody=(Get-Content c:\scripts\log\log.txt).ToString()

Gruß
ANKH


Nachtrag: Habe beide Varianten eben mal mit größeren Textdateien durchgespielt. Die Variante 2 läuft hier deutlich schneller (ca. Faktor 3). Ist vielleicht für längere Logfiles interessant.