Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Textdatei als Body in Send-MailMessage

Frage Entwicklung

Mitglied: mguenth83

mguenth83 (Level 1) - Jetzt verbinden

13.04.2012 um 09:44 Uhr, 7189 Aufrufe, 16 Kommentare

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
Mitglied: mak-xxl
13.04.2012 um 10:17 Uhr
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:

01.
$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 <code>-Tags.

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: mguenth83
16.04.2012 um 08:52 Uhr
Hi,
habs mal versuche aber irgendwie bin ich da nicht weiter gekommen, kannst du es nochmal für echt doofe erklären wie genau das funktioniert ?
Habe mittlerweile raus gefunden das deine Zeile als eigenständiger Befehl ausgeführt werden muss und dannach muss man ja noch irgendwie bei -body die eingelesene Datei angeben oder ?

Achso und was noch schön wär wenn ich in die -Subject Zeile noch das aktuelle Datum einfügen kann.

Habe das ganze mit
Send-MailMessage -To "test1@googlemail.com" -From "test2@googlemail.com" -Subject Backup vom $Date -SmtpServer 2003sbs
probiert aber das mag er nicht.
Bitte warten ..
Mitglied: mak-xxl
16.04.2012 um 10:36 Uhr
Moin Matthias,

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 
Infos zu Datumsfunktionen

Anschließend wird das Ganze verknüpft, etwa so:

-Subject "Backup vom $bdatum"
Das Gesamtkonstrukt könnte dann etwa so aussehen:
01.
$datei = Get-content X:\Verzeichnis\datei.txt 
02.
$bdatum = get-date -DisplayHint date 
03.
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 <code>-Tags.

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: mguenth83
16.04.2012 um 12:41 Uhr
Hi,

also danke erstmal für deine Hilfe, ohne Dich wär ich aufgeschmissen....

Mein Script sieht bis jetzt so aus...
01.
Start-Process -Filepath C:\Users\mguenth\Downloads\snapshot.exe -ArgumentList G:, \\matthias\pskripte\test.sna -RedirectStandardOutput C:\Users\mguenth\Downloads\status.txt 
02.
Select-String -Path C:\Users\mguenth\Downloads\status.txt -Pattern "successfully" -OutVariable +snasucc 
03.
Select-String -Path C:\Users\mguenth\Downloads\status.txt -Pattern "error" -OutVariable +snaerr 
04.
$bdatum = get-date -DisplayHint date 
05.
Send-MailMessage -To "test1@googlemail.com" -From "test2@googlemail.com" -Subject "Backupstatus vom $bdatum" -Body "$snasucc,$snaerr" -SmtpServer 2003sbs


Leider spuckt er mir als body nur das komma aus.

Eiegentlich sollte er die beiden Werte ausgeben.

Sprich er soll einfach nur gucken ob ein Successfull oder ein Error steht und wenn eins von beiden vorhanden ist soll er dies ins Body schreiben..

Ganz schön Haarig die Sache
Bitte warten ..
Mitglied: mak-xxl
16.04.2012 um 12:48 Uhr
Moin Matthias,

Zitat von mguenth83:
...
Ganz schön Haarig die Sache

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 <code>-Tags.
bezwecken soll.
Also bitte, dann geht es weiter.

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: mguenth83
16.04.2012 um 12:54 Uhr
Hi,
tut mir echt leid, muss noch ne Menge lernen. Hoffe die Formatierung ist jetzt richtig ?!
Bitte warten ..
Mitglied: mak-xxl
16.04.2012 um 13:14 Uhr
Moin Matthias,

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):

01.
$backok = Select-String -Path "C:\Users\mguenth\Downloads\status.txt" -Pattern "successfully" -Quiet
Rest etwa so:

01.
$bdatum = get-date -DisplayHint date 
02.
Send-MailMessage -To "test1@googlemail.com" -From "test2@googlemail.com" -Subject "Backupstatus vom 
03.
$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.

Macht er auch - wenn aber beide Variablen leer sind ...

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: mguenth83
16.04.2012 um 14:27 Uhr
Gute Idee Mario,
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.

Dazu hab ich folgendes geschrieben:
01.
Start-Process -Filepath C:\Users\mguenth\Downloads\snapshot.exe -ArgumentList G:, \\matthias\pskripte\test.sna -RedirectStandardOutput C:\Users\mguenth\Downloads\status.txt 
02.
 
03.
Select-String -Path C:\Users\mguenth\Downloads\status.txt -Quiet "successfully" -OutVariable +snasucc 
04.
Select-String -Path C:\Users\mguenth\Downloads\status.txt -Quiet "error" -OutVariable +snaerr 
05.
$bdatum = get-date -DisplayHint date 
06.
 
07.
If ($snasucc -eq "True") {Send-MailMessage -To "test1@googlemail.com" -From "test2@googlemail.com" -Subject "Backupstatus vom $bdatum" -Body "Backup erfolgreich durchgeführt" -SmtpServer 2003sbs} 
08.
if ($snaerr -eq "True") {Send-MailMessage -To "test1@googlemail.com" -From "test2@googlemail.com" -Subject "Backupstatus vom $bdatum" -Body "Backup leider Fehlgeschlagen" -SmtpServer 2003sbs}
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.

Falls das irgendwie nicht geht muss ich deine Variante nehmen.

Gruß
Matze
Bitte warten ..
Mitglied: mak-xxl
16.04.2012 um 14:46 Uhr
Moin Matthias,

Zitat von mguenth83:
Gute Idee 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.

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):
01.
if ($backok)  
02.
{$btext = "Backup war erfolgreich!"}  
03.
else  
04.
{$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
Bitte warten ..
Mitglied: mguenth83
16.04.2012 um 15:56 Uhr
Hi,
ich weiss auch nicht was ich falsch mache. Kann sein das ich noch net so ganz raff wie das ganze alles zusammenhängt bzw welchen Befehl ich wo benutzen muss. Jedenfalls gibt er mir ne Fehlermeldung zurück wenn ich das so hinschreibe.


01.
Start-Process -Filepath C:\Users\mguenth\Downloads\snapshot.exe -ArgumentList G:, \\matthias\pskripte\test.sna -RedirectStandardOutput C:\Users\mguenth\Downloads\status.txt 
02.
Wait-Process -Name snapshot 
03.
 
04.
$bdatum = get-date -DisplayHint date 
05.
$backok = Select-String -Path "C:\Users\mguenth\Downloads\status.txt" -Pattern "success" -Quiet 
06.
 
07.
if ($backok)  
08.
{$btext = "Backup war erfolgreich!"}  
09.
[else 
10.
{$btext = "Backup fehlgeschlagen!}] 
11.
 
12.
Send-MailMessage -To "test1@googlemail.com" -From "test2@googlemail.com" -Subject "Backupstatus vom $bdatum" -Body $btext -SmtpServer 2003sbs
FehlerCode:
Der Zeichenfolge, beginnend mit:
Bei Zeile:12 Zeichen:108
Send-MailMessage -To "test1@googlemail.com" -From "test2@googlemail.com" -Subject "Backupstatus vom $bdatum <<<< " -Body $btext -SmtpServer 2003sbs
fehlt der Terminator: ".
At line:12 char:142

Fehlende schließende "}" im Anweisungsblock.
At line:12 char:142

Ich kann den Fehler einfach nicht finden, denke ich bin heute Blind


Achso ich hab noch die Powershell 1.0 falls das was ausmacht
Bitte warten ..
Mitglied: mak-xxl
16.04.2012 um 16:10 Uhr
Moin Matthias,

da haben sich Format-Klammern '[]' eingeschlichen, also so:

01.
Start-Process -Filepath C:\Users\mguenth\Downloads\snapshot.exe -ArgumentList G:, \\matthias\pskripte\test.sna -RedirectStandardOutput C:\Users\mguenth\Downloads\status.txt  
02.
 
03.
Wait-Process -Name snapshot  
04.
  
05.
$bdatum = get-date -DisplayHint date  
06.
$backok = Select-String -Path "C:\Users\mguenth\Downloads\status.txt" -Pattern "success" -Quiet  
07.
  
08.
if ($backok)   
09.
{$btext = "Backup war erfolgreich!"}   
10.
else  
11.
{$btext = "Backup fehlgeschlagen!"} 
12.
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
Bitte warten ..
Mitglied: mguenth83
16.04.2012 um 16:46 Uhr
Sage immer noch das gleiche, ich glaub ich hab was kaputt gemacht.

Hier der Fehler:
Der Zeichenfolge, beginnend mit:
Bei Zeile:12 Zeichen:108
+Send-MailMessage -To "test1@googlemail.com" -From "test2@googlemail.com" -Subject "Backupstatus vom $bdatum <<<< " -Body $btext -SmtpServer 2003sbs
fehlt der Terminator: ".
At line:12 char:142

Fehlende schließende "}" im Anweisungsblock.
At line:12 char:142
Bitte warten ..
Mitglied: mak-xxl
16.04.2012 um 16:49 Uhr
Moin Matthias,

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
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
Bitte warten ..
Mitglied: mguenth83
16.04.2012 um 22:33 Uhr
Habe es gerade geprüft, habe doch die Powershell 2.0 die Links sind schonmal interessant ud habe Sie auch gleich abgespeichert.

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 ^^

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

01.
write $btext 
02.
 
03.
#if ($backok) {$btext = "Backup war erfolgreich!"} 
04.
#else {$btext = "Backup fehlgeschlagen!}
Gruß
Matze
Bitte warten ..
Mitglied: mak-xxl
17.04.2012 um 07:28 Uhr
Moin Matthias,

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 ^^

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
> 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
Bitte warten ..
Mitglied: mguenth83
17.04.2012 um 10:28 Uhr
Hi,
stimmt, hat sich ein Fehler eingeschlichen, hab jetzt " gesetzt hinter Backup fehlgeschlagen! und schon ging es...

Hier nochmal das ganze Script falls es jemand benutzen will:

01.
Start-Process -Filepath C:\Users\mguenth\Downloads\snapshot.exe -ArgumentList G:, \\matthias\pskripte\test.sna -RedirectStandardOutput C:\Users\mguenth\Downloads\status.txt 
02.
 
03.
Wait-Process -Name snapshot 
04.
 
05.
$bdatum = get-date -DisplayHint date 
06.
$backok = Select-String -Path "C:\Users\mguenth\Downloads\status.txt" -Pattern "success" -Quiet 
07.
 
08.
write $btext 
09.
 
10.
if ($backok) {$btext = "Backup war erfolgreich!"} 
11.
else {$btext = "Backup Fehlgeschlagen, bitte kontaktieren Sie die Firma Test1 unter der Telnr: 000-0000"} 
12.
 
13.
Send-MailMessage -To "test1@googlemail.com" -From "test2@googlemail.com" -Subject "Backup vom $bdatum" -BodyAsHtml "$btext" -SmtpServer 2003sbs
Danke für die Hilfe
Gruß
Matze
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Exchange Server
Exchange 2016 CU2 Shared Mailbox Default Send Account (1)

Frage von coon91 zum Thema Exchange Server ...

Java
gelöst Textdatei in Array speichern (zeilenweise) (1)

Frage von Bruchsal zum Thema Java ...

VB for Applications
Import Textdatei von Dateiname aus Zelle (2)

Frage von grasihuepfer zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...