Masochist 11 Geschrieben 2. März 2011 Melden Teilen Geschrieben 2. März 2011 Hallo zusammen, bei mir in der Firma wird ein Error Ordner überwacht. Sobald in diesem Ordner eine nicht verarbeitete XML Datei landet, wird über einen gepl. Task eine Batchdatei aufgerufen die den Ordner auf *xml Dateien prüft und dann eine Mail über das Tool blat schickt. Wir möchten jetzt zusätzlich ein bestimmtes Feld der XML Datei auslesen und danach als Mail verschicken. Auszug Beispieldatei: <PurchaseOrderInformation> <PurchaseOrderNumber>0003930360</PurchaseOrderNumber> <PurchaseOrderIssuedDate> <Date> <Year>2011</Year> <Month>01</Month> <Day>26</Day> </Date> </PurchaseOrderIssuedDate> </PurchaseOrderInformation> Aus der XML-Datei soll der Wert des Feldes <PurchaseOrderNumber> mit einem Text an eine Mailadresse geschickt werden. Ist das generell mit einer Batchdatei möglich ? Habt ihr eine Idee wie man das lösen könnte ? Danke & Grüße Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 2. März 2011 Melden Teilen Geschrieben 2. März 2011 Powershell. Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 2. März 2011 Melden Teilen Geschrieben 2. März 2011 Dukel und seine ultraausführlichen Antworten ;) Mit Batch geht's im Prinzip auch. Google ggf. einfach mal nach "Batch Findstr", dann findest Du bestimmt die passende Anregung. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 2. März 2011 Melden Teilen Geschrieben 2. März 2011 Dukel und seine ultraausführlichen Antworten ;) Mit Batch geht's im Prinzip auch. Google ggf. einfach mal nach "Batch Findstr", dann findest Du bestimmt die passende Anregung. Grusel... Mit Powershell geht das in einem Einzeiler. Nur bevor ich da ein Script mir ausdenke und dann Powershell gar nicht in Fragt kommt poste ich nur die Anregung das mit Powershell zu machen. Später kann man immer noch genaueres fragen / erläutern. Zitieren Link zu diesem Kommentar
Masochist 11 Geschrieben 2. März 2011 Autor Melden Teilen Geschrieben 2. März 2011 Könnt ihr mir kurz weiterhelfen, bin nicht fit in Power Shell... //der Befehl gibt den Wert aus dem XML Frame PurchaseOrderNumber aus $test.Envelope.Payload.BusinessDocument.PurchaseOrd er.PurchaseOrderHeader.PurchaseOrderInformation.PurchaseOrderNumber $smtp.Send('edi@powershell.com','test@powershell.com','Testmail','text') Der Wert aus <PurchaseOrderNumber> muss nun in einer Variablen oder einer Textdatei abgespeichert werden damit vom Mailbefehl unten der Wert mitgeschickt werden kann, richtig ? Danke schonmal für die Hilfe Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 2. März 2011 Melden Teilen Geschrieben 2. März 2011 Ja ich würde das in einer Variable speichern. Man kann auch direkt brauf zugreifen. Am besten mit $() umklammert, dass das als Wert erkannt wird: $smtp.Send('edi@powershell.com','test@powershell.com','Testmail',$($test.Envelope.Payload.BusinessDocument.PurchaseOrder.PurchaseOrderHeader.PurchaseOrderInformation.PurchaseOrderNumber)) Aber fürn Einstig ist es einfacher (und lesbarer) das ganzt in eine Variable zu schreiben: $text = $test.Envelope.Payload.BusinessDocument.PurchaseOrder.PurchaseOrderHeader.PurchaseOrderInformation.PurchaseOrderNumber $smtp.Send('edi@powershell.com','test@powershell.com','Testmail',$text) Zitieren Link zu diesem Kommentar
Masochist 11 Geschrieben 3. März 2011 Autor Melden Teilen Geschrieben 3. März 2011 Monitor.ps1: set-executionpolicy unrestricted cd C:\Error\ $ReferenceNumber = $test.Envelope.Payload.BusinessDocument.PurchaseOrder.PurchaseOrderHeader.PurchaseOrderInformation.PurchaseOrderNumber $smtp.Send('edi@powershell.com','urgent@powershell.com,'Testmail $ReferenceNumber','text') Error_pruefen.bat cd C:\Error\ IF EXIST "*.xml"%1 goto meldung exit :meldung cd C:\WINDOWS\system32\windowspowershell\v1.0\ powershell.exe -command "C:\Scripte\powershell\Monitor.ps1" pause ------------------------- Wenn ich Monitor.ps1 über die Powershell aufrufe kommt die EMail an, allerdings ohne den Text aus dem XML File, es steht "$ReferenceNumber" im Betreff. Wenn ich Monitor über die Batchdatei oben aufrufe kommt diese Meldung: Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen. Bei C:\Scripte\powershell\Monitor.ps1:10 Zeichen:11 + $smtp.Send( <<<<'edi@powershell.com','urgent@powershell.com','Testmail $ReferenceNumber','text') Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 3. März 2011 Melden Teilen Geschrieben 3. März 2011 Ist das das ganze Script Woher kommt $test? Zitieren Link zu diesem Kommentar
Masochist 11 Geschrieben 3. März 2011 Autor Melden Teilen Geschrieben 3. März 2011 das ist das ganze Script wenn ich den Wert aus dem Feld in die Variable schreiben möchte, ist $text = Variablenname und anstelle von $test muss welcher wert stehen ? In der XML Datei ist Envelope das erste Tag. Muss bei $test noch der Dateiname rein ? $text = $test.Envelope.Payload.BusinessDocument.PurchaseOrder.PurchaseOrderHeader.PurchaseOrderInformation.PurchaseOrd erNumber Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 3. März 2011 Melden Teilen Geschrieben 3. März 2011 Du brauchst doch noch den Inhalt der XML Datei. Diesen bekommst du mit get-content. Zitieren Link zu diesem Kommentar
Masochist 11 Geschrieben 3. März 2011 Autor Melden Teilen Geschrieben 3. März 2011 okay, danke get-content und Wert in Variable speichern und ausgeben mit return funktioniert jetzt Mail versenden geht nun auch, allerdings wird der Wert der Variablen $referenceNumber nicht ausgegeben. Beim Betreff steht anstatt dem Wert folgendes drin: Von: edi@powershell.com An: admin@powershell.com Betreff: System.Xml.XmlElement System.Xml.XmlElement System.Xml.XmlElement System.Xml.XmlElement System.Xml.XmlElement System.Xml.XmlElement --------------------------------------- So sieht das File aus: ( Get-Content PO20110301.xml ) $scripts=[xml]( Get-Content PO20110301.xml ) $ReferenceNumber = $scripts.SelectNodes("/Envelope/Payload/BusinessDocument/PurchaseOrder/PurchaseOrderHeader/*") $msg=new-Object Net.Mail.MailMessage $smtp=new-object Net.Mail.SmtpClient("192.168.99.99") $msg.From="edi@powershell.com" $msg.To.Add("admin@powershell.com") $msg.subject="$ReferenceNUmber" $msg.body="Text" $smtp.send($msg) Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 3. März 2011 Melden Teilen Geschrieben 3. März 2011 Das: ( Get-Content PO20110301.xml ) brauchst du nicht. Starte die Powershell und gebe die einzelnen Zeilen direkt ein: $scripts=[xml]( Get-Content PO20110301.xml ) $ReferenceNumber = $scripts.SelectNodes("/Envelope/Payload/BusinessDocument/PurchaseOrder/PurchaseOrderHeader/*") Und gib dann mal $ReferenceNumber ein und schau ob es korrekt ist, was da ausgegeben wird. Zitieren Link zu diesem Kommentar
Masochist 11 Geschrieben 3. März 2011 Autor Melden Teilen Geschrieben 3. März 2011 jap der Wert ist korrekt wo dort ausgegeben wird. kann es sein, dass man die Variable bei dem Mailbefehl anderst mitgeben muss als hier $msg.subject="$ReferenceNUmber" Zitieren Link zu diesem Kommentar
Esta 114 Geschrieben 3. März 2011 Melden Teilen Geschrieben 3. März 2011 Hallo Masochist, nur so eine Idee - hast du schon probiert die Hochkommas weg zu lassen? Also so $msg.subject=$ReferenceNUmber Zitieren Link zu diesem Kommentar
Masochist 11 Geschrieben 3. März 2011 Autor Melden Teilen Geschrieben 3. März 2011 nein geht leider auch nicht Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.