Textdatei als Body in Send-MailMessage
Hi,
ich versuche gerade ein Powershellscript zu entwerfen das folgendes macht.
Starte die Backupsoftware Snapshot und sichere G: -> gebe den Output in eine Datei error.txt --> Sende eine E-Mail mit der error.txt als Body an einen Empfänger...
Ich habe es mittlerweile soweit das er die Sicherung macht und den Status in eine Textdatei schickt, nur leider weiss ich nicht wie ich den Inhalt der Textdatei als Body in Send-Mailmessage rein bekomme.
Die Mail sollte dann so ankommen
Betreff: Backup
Body: Inhalt der Textdatei (error.txt)
________
Hier mein fertig fast fertiges Powershellscript
Start-Process -Filepath C:\Users\mguenth\Downloads\snapshot.exe -ArgumentList G:, \\matthias\psk
ripte\test.sna -RedirectStandardOutput C:\Users\mguenth\Downloads\error.txt | Send-MailMessage -To "test1@googlemail
.com" -From "test2@googlemail.com" -Subject Backup -SmtpServer 2003sbs
Hoffentlich kann mir jemand helfen und so erklären das ich es auch raffe muss dazusagen bin ein blutiger Anfänger in Powershell
Gruß
Matthias
ich versuche gerade ein Powershellscript zu entwerfen das folgendes macht.
Starte die Backupsoftware Snapshot und sichere G: -> gebe den Output in eine Datei error.txt --> Sende eine E-Mail mit der error.txt als Body an einen Empfänger...
Ich habe es mittlerweile soweit das er die Sicherung macht und den Status in eine Textdatei schickt, nur leider weiss ich nicht wie ich den Inhalt der Textdatei als Body in Send-Mailmessage rein bekomme.
Die Mail sollte dann so ankommen
Betreff: Backup
Body: Inhalt der Textdatei (error.txt)
________
Hier mein fertig fast fertiges Powershellscript
Start-Process -Filepath C:\Users\mguenth\Downloads\snapshot.exe -ArgumentList G:, \\matthias\psk
ripte\test.sna -RedirectStandardOutput C:\Users\mguenth\Downloads\error.txt | Send-MailMessage -To "test1@googlemail
.com" -From "test2@googlemail.com" -Subject Backup -SmtpServer 2003sbs
Hoffentlich kann mir jemand helfen und so erklären das ich es auch raffe muss dazusagen bin ein blutiger Anfänger in Powershell
Gruß
Matthias
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 183477
Url: https://administrator.de/contentid/183477
Ausgedruckt am: 17.11.2024 um 03:11 Uhr
16 Kommentare
Neuester Kommentar
Moin Matthias,
die Option heißt '-Body' siehe dazu hier.
Aber: '-Body' erwartet einen String mit dem Dateiinhalt - Du musst also die Datei vorher in einen solchen einlesen, etwa so:
Alternativ kannst Du die Option '-Attachments' verwenden, die erwartet Pfad+Dateiname (als String).
Bitte benutze beim Posten (auch nachträglich) die -Tags.
Freundliche Grüße von der Insel - Mario
die Option heißt '-Body' siehe dazu hier.
Aber: '-Body' erwartet einen String mit dem Dateiinhalt - Du musst also die Datei vorher in einen solchen einlesen, etwa so:
$datei = Get-content X:\Verzeichnis\datei.txt
Alternativ kannst Du die Option '-Attachments' verwenden, die erwartet Pfad+Dateiname (als String).
Bitte benutze beim Posten (auch nachträglich) die -Tags.
Freundliche Grüße von der Insel - Mario
Moin Matthias,
Wenn Du einem Parameter einen String mit Leerzeichen übergeben willst, muss der String in Literale gesetzt werden, etwa so:
Soll zusätzlich zum String noch eine Variable übergeben werden, so muss diese zunächst gesetzt werden, etwa so:
Infos zu Datumsfunktionen
Anschließend wird das Ganze verknüpft, etwa so:
Das Gesamtkonstrukt könnte dann etwa so aussehen:
Zum SMTP-Server: Der Standardwert steht in der Variable '$PSEmailServer', wenn diese Variable leer ist, dann etwa so:
Bitte benutze beim Posten (auch nachträglich) die -Tags.
Freundliche Grüße von der Insel - Mario
Wenn Du einem Parameter einen String mit Leerzeichen übergeben willst, muss der String in Literale gesetzt werden, etwa so:
-Subject "Backup vom heutigen Tage"
Soll zusätzlich zum String noch eine Variable übergeben werden, so muss diese zunächst gesetzt werden, etwa so:
$bdatum = get-date -DisplayHint date
Anschließend wird das Ganze verknüpft, etwa so:
-Subject "Backup vom $bdatum"
Das Gesamtkonstrukt könnte dann etwa so aussehen:
$datei = Get-content X:\Verzeichnis\datei.txt
$bdatum = get-date -DisplayHint date
Send-MailMessage -To "test1@googlemail.com" -From "test2@googlemail.com" -Subject "Backup vom $bdatum" -Body $datei -smtpServer "siehe nächste Erläuterung"
Zum SMTP-Server: Der Standardwert steht in der Variable '$PSEmailServer', wenn diese Variable leer ist, dann etwa so:
-smtpServer smtp.googlemail.com
Bitte benutze beim Posten (auch nachträglich) die -Tags.
Freundliche Grüße von der Insel - Mario
Moin Matthias,
Haarig an der Sache wird langsam, dass Du Dich offentsichtlich nicht darum kümmerst, was wohl der Hinweis
Bitte benutze beim Posten (auch nachträglich) die -Tags.
bezwecken soll.
Also bitte, dann geht es weiter.
Freundliche Grüße von der Insel - Mario
Haarig an der Sache wird langsam, dass Du Dich offentsichtlich nicht darum kümmerst, was wohl der Hinweis
Bitte benutze beim Posten (auch nachträglich) die -Tags.
bezwecken soll.
Also bitte, dann geht es weiter.
Freundliche Grüße von der Insel - Mario
Moin Matthias,
Etwa so (nur eine boolesche Variable zeigt Erfolg oder Misserfolg an):
Rest etwa so:
Zu SMTP-Server letzten Post beachten!
Macht er auch - wenn aber beide Variablen leer sind ...
Freundliche Grüße von der Insel - Mario
Zitat von @mguenth83:
Select-String -Path C:\Users\mguenth\Downloads\status.txt -Pattern "successfully" -OutVariable +snasucc
Etwa so (nur eine boolesche Variable zeigt Erfolg oder Misserfolg an):
$backok = Select-String -Path "C:\Users\mguenth\Downloads\status.txt" -Pattern "successfully" -Quiet
Rest etwa so:
$bdatum = get-date -DisplayHint date
Send-MailMessage -To "test1@googlemail.com" -From "test2@googlemail.com" -Subject "Backupstatus vom
$bdatum" -Body "Backuperfolg: $backok" -smtpServer smtp.googlemail.com
Zu SMTP-Server letzten Post beachten!
Leider spuckt er mir als body nur das komma aus.
Eiegentlich sollte er die beiden Werte ausgeben.
Eiegentlich sollte er die beiden Werte ausgeben.
Macht er auch - wenn aber beide Variablen leer sind ...
Freundliche Grüße von der Insel - Mario
Moin Matthias,
Ok, wenn es mir jetzt in die Nase regnet ...
Der von Dir gewünschten Eleganz steht, wenn Du ein wenig darüber nachdenkst, nur eine Variable wirklich nicht im Weg.
Naja, bei dem Vergleich würde ich als Powershell auch immer eine Mail schicken ...
Etwa so (mit Link dazu):
Im Mailversand die Zeile mit dem 'Body' anpassen, etwa so:
Den Hinweis auf den SMTP-Server erspa ...
Musst Du nicht, aber dann alles andere richtig machen ...
Freundliche Grüße von der Insel - Mario
Ok, wenn es mir jetzt in die Nase regnet ...
leider wollte ich das etwas eleganter gestalten sprich, falls die txt nen Error drin hat soll der Text "Backup leider
Fehlgeschlagen kommen" und wenn er ein success drin hat soll kommen "Backup erfolgreich abgeschlossen.
Fehlgeschlagen kommen" und wenn er ein success drin hat soll kommen "Backup erfolgreich abgeschlossen.
Der von Dir gewünschten Eleganz steht, wenn Du ein wenig darüber nachdenkst, nur eine Variable wirklich nicht im Weg.
Komischerweiße wenn ich dies ausführe schickt er mir zwei mal eine E-Mail, obwohl der eine Wert True ist und der andere false.
Naja, bei dem Vergleich würde ich als Powershell auch immer eine Mail schicken ...
Etwa so (mit Link dazu):
if ($backok)
{$btext = "Backup war erfolgreich!"}
else
{$btext = "Backup fehlgeschlagen!"}
Im Mailversand die Zeile mit dem 'Body' anpassen, etwa so:
-Body $btext
Den Hinweis auf den SMTP-Server erspa ...
Falls das irgendwie nicht geht muss ich deine Variante nehmen.
Musst Du nicht, aber dann alles andere richtig machen ...
Freundliche Grüße von der Insel - Mario
Moin Matthias,
da haben sich Format-Klammern '' eingeschlichen, also so:
Freundliche Grüße von der Insel - Mario
da haben sich Format-Klammern '' eingeschlichen, also so:
Start-Process -Filepath C:\Users\mguenth\Downloads\snapshot.exe -ArgumentList G:, \\matthias\pskripte\test.sna -RedirectStandardOutput C:\Users\mguenth\Downloads\status.txt
Wait-Process -Name snapshot
$bdatum = get-date -DisplayHint date
$backok = Select-String -Path "C:\Users\mguenth\Downloads\status.txt" -Pattern "success" -Quiet
if ($backok)
{$btext = "Backup war erfolgreich!"}
else
{$btext = "Backup fehlgeschlagen!"}
Send-MailMessage -To "test1@googlemail.com" -From "test2@googlemail.com" -Subject "Backupstatus vom $bdatum" -Body $btext -SmtpServer 2003sbs
Freundliche Grüße von der Insel - Mario
Moin Matthias,
poste oder kontrolliere bitte nochmals Dein Script nach o.a. Vorgabe, da fehlt irgendwo ein schließendes Literal.
Und:
Nur soviel: 'Send-MailMessage' erzeugt in der Version einen Fehler, weil nicht vorhanden ...
Zum Testen die mailende Zeile auskommentieren und ein beherztes:
stattdessen geschrieben - anschließend testen.
Nebenbei, aber mit unverminderter Aufmerksamkeit: Links zum Lesen und freuen und schließlich zum laden der Version 2.0 für OS > 2003++ oder hier für XP.
Freundliche Grüße von der Insel - Mario
poste oder kontrolliere bitte nochmals Dein Script nach o.a. Vorgabe, da fehlt irgendwo ein schließendes Literal.
Und:
... Achso ich hab noch die Powershell 1.0 falls das was ausmacht
Nur soviel: 'Send-MailMessage' erzeugt in der Version einen Fehler, weil nicht vorhanden ...
Zum Testen die mailende Zeile auskommentieren und ein beherztes:
write $btext
Nebenbei, aber mit unverminderter Aufmerksamkeit: Links zum Lesen und freuen und schließlich zum laden der Version 2.0 für OS > 2003++ oder hier für XP.
Freundliche Grüße von der Insel - Mario
Moin Matthias,
Nein, mein 'Schrei nicht so ...' bezog sich auf die von Dir als Überschrift und zusätzlich fett formatierte Fehlerausgabe - in den meisten Foren bedeutet GROßSCHREIBUNG = Schreien.
Dass Du schnell antwortest, finde ich sehr gut - da weiß man noch, um was es ging - und hat es nicht im Alltagsgeschäft schon wieder vergessen.
Die Zeile kann hier noch nichts ausgeben, weil die Variable noch nicht gesetzt, also leer ist ...
Und hier liegt der Hase im Pfeffer - hinter '... fehlgeschlagen!' fehlt ein Literal. Also so:
Wenn übrigens jetzt alles stimmt im Script, darf auch mit aktiver 'Send-MailMessage'-Zeile keine weitere Fehlermeldung kommen - außer der, die auf ein fehlendes Cmd-Let verweist ...
Und noch einen Tipp: Setze auch alle Pfade in Literale, falls Du einen solchen mit Leerzeichen einträgst, geht die Fehlersuche von vorn los ...
Freundliche Grüße von der Insel - Mario
Zitat von @mguenth83:
Sorry Mario das ich so schnell Antworte das sollte nicht so rüber kommen als wenn ich Rumbrüllen wurde. Ich denk nur
immer, um so schneller ich zurück schreibe um so schneller bekomme ich wieder ne Antwort ^^
Sorry Mario das ich so schnell Antworte das sollte nicht so rüber kommen als wenn ich Rumbrüllen wurde. Ich denk nur
immer, um so schneller ich zurück schreibe um so schneller bekomme ich wieder ne Antwort ^^
Nein, mein 'Schrei nicht so ...' bezog sich auf die von Dir als Überschrift und zusätzlich fett formatierte Fehlerausgabe - in den meisten Foren bedeutet GROßSCHREIBUNG = Schreien.
Dass Du schnell antwortest, finde ich sehr gut - da weiß man noch, um was es ging - und hat es nicht im Alltagsgeschäft schon wieder vergessen.
Also habs nochmal überprüft, irgendwie hat er ein Problem mit dem IF habe alle 3 Zeillen auskommentiert und den write Befehl rein geschrieben
...sieht jetzt so aus und damit gehts auch wenn ich $btext = 1 manuell setzte
...sieht jetzt so aus und damit gehts auch wenn ich $btext = 1 manuell setzte
> write $btext
Die Zeile kann hier noch nichts ausgeben, weil die Variable noch nicht gesetzt, also leer ist ...
> #if ($backok) {$btext = "Backup war erfolgreich!"}
> #else {$btext = "Backup fehlgeschlagen!}
Und hier liegt der Hase im Pfeffer - hinter '... fehlgeschlagen!' fehlt ein Literal. Also so:
if ($backok) {$btext = "Backup war erfolgreich!"}
else {$btext = "Backup fehlgeschlagen!"}
write $btext
Wenn übrigens jetzt alles stimmt im Script, darf auch mit aktiver 'Send-MailMessage'-Zeile keine weitere Fehlermeldung kommen - außer der, die auf ein fehlendes Cmd-Let verweist ...
Und noch einen Tipp: Setze auch alle Pfade in Literale, falls Du einen solchen mit Leerzeichen einträgst, geht die Fehlersuche von vorn los ...
Freundliche Grüße von der Insel - Mario