Jump to content

Batch Datei: Feld in XML File auslesen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar
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.

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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)

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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)

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...