Jump to content

XML Datei via Powershell auslesen (inkl. E-Mail Versand)


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,

 

seit Stunden versuche ich eine Lösung zu finden und dennoch komme ich nicht weiter.

 

Ausgangssituation: Ein Kunde will mit dem GFI Faxmaker seine Faxe versenden. Soweit auch kein Problem. Da es jedoch gewisse Umstände bei ihm gibt, weshalb die Faxe via XMLAPI versand werden sollen, fangen die Probleme an.

 

Eine XML-Datei und das zugehörige PDF-Dokument werden in einem Ordner abgelegt und vom Faxmaker erkannt und letztlich verarbeitet. Das Problem an der Sache ist, dass der Absender/User keine Benachrichtigung erhält, ob der Versand erfolgreich war oder gescheitert ist. Sobald man seine Faxaufträge via XMLAPI auf die Reise schickt, werden keine Benachrichtigungen versandt. Alle anderen Wege funktionieren wie der Kunde es möchte.

 

GFI schreibt zu diesem Verhalten in seiner Doku eigentlich nur, dass man sich Lösungen von drittanbietern bedienen möchte.

 

Also habe ich nach einer Lösung gesucht, mit der ich zum einen das Fax-Verzeichnis überwachen kann und die Benachrichtigungen dann über diesen Weg an den User bringe.

 

Alles was ich finden konnte war ein ungefährer Weg via Powershell, wo ich nun auch beim Thema wäre.

Meine XML-Datei sieht wie folgt aus:

 

<?xml version="1.0" encoding="utf-8"?>
<faxmakerstatus><fax><errorcode>0</errorcode><description>*********************************************************
FAXSENDEBERICHT
*********************************************************

Betreff: Erfolgreich: Dies ist ein Testfax (Fax gesendet an 047110815)
Absender: Vorname Nachname
Absender E-Mail: Benutzer@Firma.de
Status: Sent
Datum/Uhrzeit: 11.12.2012 18:45:32
Geschwindigkeit: 14400 bps
Verbindungsdauer: 01:48
Seiten: 1
Seiten gesamt: 1
Auflösung: Normal
Remote-ID: +49 08154711
Leitungsnummer: 0
Wiederholungsversuche: 1
Beschreibung: Fax erfolgreich verschickt : Success

*********************************************************
</description><uid>3a5a90s7de3g20k9y4d5e7e6fse28se5e097</uid><faxfile>C:\FaxPickup\20121211_184253_00015.pdf</faxfile><recipient>047110815</recipient></fax></faxmakerstatus>

 

Mein Powershell Script sie so aus:

 

$BodyText =""
$BaseFile=[xml]( Get-Content C:\gfixml\testfax.xml.status )
#$Att_File = new-object Net.Mail.Attachment($FaxDoc)
$XMLPath = $BaseFile.SelectNodes("/faxmakerstatus/*")


foreach ($element in $XMLPath) {
$BodyText = $BodyText + " "+$element.description 
#$FaxDoc = $FaxDoc + " "+$element.faxfile 
}



#[system.Windows.Forms.MessageBox]::Show("$BodyText")

$msg=new-Object Net.Mail.MailMessage
$smtp=new-object Net.Mail.SmtpClient("192.168.100.100")
$msg.From="faxmaker@firma.de"
$msg.To.Add("benutzer@firma.de")
$msg.subject="Fax Statusbericht"
$msg.body="$BodyText"
#$msg.Attachments.Add($FaxDoc)
$smtp.send($msg)

 

 

Mein Problem ist dass ich beispielsweise die Zeile "Betreff: Erfolgreich: Dies ist ein Testfax (Fax gesendet an 047110815)" (Betreff: würde ich dabei gern weglassen) nicht aus dem XML-Dokument ausgelesen bekommen, um es beim $msg.subject einzusetzen. Die Absender E-Mail Adresse (siehe XML-Dokument) muss ich ebenso in das Script hineinbekommen usw.

 

Mit dem vorstehenden Powershell script habe ich es zumindest soweit geschafft das eine E-Mail an den fest hinterlegten Empfänger gesandt wird.

Link zu diesem Kommentar

In dem Body steht dann:

 

*********************************************************

FAXSENDEBERICHT

*********************************************************

 

Betreff: Erfolgreich: Dies ist ein Testfax (Fax gesendet an 047110815)

Absender: Vorname Nachname

Absender E-Mail: Benutzer@Firma.de

Status: Sent

Datum/Uhrzeit: 11.12.2012 18:45:32

Geschwindigkeit: 14400 bps

Verbindungsdauer: 01:48

Seiten: 1

Seiten gesamt: 1

Auflösung: Normal

Remote-ID: +49 08154711

Leitungsnummer: 0

Wiederholungsversuche: 1

Beschreibung: Fax erfolgreich verschickt : Success

 

*********************************************************

 

Abgesehen davon dass ich die einzelnen Informationen bzw. Teile aus der XML nicht verwenden kann, habe ich noch das Problem dass das PDF-Dokument mit jedem ausführen des Scriptes immer weiter mit dem Pfad und dem Dateinamen rangehängt wird. Dass das nicht funktioniert, bleibt dabei natürlich nicht aus.

 

 

Komme ich zu meiner heutigen Preisfrage: War jemand von euch schon einmal in einer solchen Situation mit dem Faxmaker und hat eine Idee oder habt ihr Vorschläge wie ich auf Basis meiner Variante weiterkomme?!

 

Vielen Dank schon einmal im Voraus!

 

Rene

Link zu diesem Kommentar

Interessantes Problem :)

Mit ein bisschen RegEx Magic kann man da schon was machen.

 

Hier mal mein Vorschlag:

$faxxml = [xml](Get-Content d:\temp\testfax.xml)

$result = @{}
$regex = [regex]"(?sm)^(?<key>(\b\w+[\s-/]\b[\w-]+|\b\w+)):\s(?<value>.+?)(\n|$)"
$text = $faxxml.faxmakerstatus.fax.description

foreach ($item in $regex.Matches($text)) {
$result.Add($item.Groups["key"].value,$item.Groups["value"].value)
}

$MailMessage = @"
   To = $($result["Absender E-Mail"])
   From = faxmaker@firma.de
   Subject = $($result["Betreff"])
   Smtpserver = smtpserver
"@
$msgparm = ConvertFrom-StringData $MailMessage

Send-MailMessage @msgparm -Body ($result | ft -Wrap | Out-String)

Zum Code selber. Ich schnappe mir die Description und jage einen Regex drüber. Damit befülle ich ein Hashtable und kann dann mit "$result["<key>"] an die Werte dran.

Dann nehme ich einen Here-String ($mailmessage) und befülle die notwendigen Parameter für das Versenden der Mail. Als nächstes wird der Here-String noch in ein Hashtable umgewandelt (ConvertFrom-StringData) und an der Befehl Send-MailMessage übergeben.

Den Body mache ich getrennt vom Hashtable.

 

Alles klar soweit? ;)

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