none
Eingehende Faxe: Eventlog auslesen mit get-eventdata und Versenden mit definierten Betreff mit send-mailmessage RRS feed

  • Frage

  • Hallo miteinander,

    hier erst mal meine Umgebung:

    • Windows Server 2008 R2 SP1
    • Rolle Faxserver
    • Rolle Druck- und Dokumentdienste (nicht wichtig für dieses Szenario)

    Ich benötige ein wenig Unterstützung. Die Situation stellt sich wie folgt dar:

    Einkommende Faxe sollen per E-Mail weitergeleitet werden. Soweit kein Problem mit der eingerichteten Verteilermethode „Über E-Mail weiterleiten“.

    Das Problem: Es kann hier nicht der Betreff der E-Mail definiert werden.

    Mein Ansatz besteht darin:

    1. Eingehende Faxe in einem Ordner abzuspeichern zu lassen
    2. Geplante Aufgabe mit einem Eventlog Trigger für eingehende Faxe auslösen
    3. Per PowerShell Skript die *.tif Datei mit definierten Betreff (Absender Nummer) versenden

    Punkt 1 und 2 sind soweit gelöst und müssen hier soweit nicht besprochen werden.

    Punkt 3 hackt es eben. Bis jetzt konnte ich folgendes schon erfolgreich schreiben:

    Für das Auslesen des Eventlog verwende ich get-eventlog:

    get-eventlog
    -log application -source "microsoft fax" -Message
    "*1CD6006E7637E.tif*" | where {$_.eventID -eq 32008} 

    Mit  -Message "*1CD6006E7637E.tif*" filtere ich die passende Datei heraus. jedoch habe ich diese bis jetzt statisch eingetragen. Diese sollte variabel aus der aktuellsten Eventlog Meldung eingetragen werden. Soweit mein Verständis.

    Für das E-Mail Versenden verwende ich send-mailmessage:

    send-mailmessage
    -from "PowerShell <powershell@domain.local>" -to
    "Faxeingang <faxeingang@domain.local>" -subject
    "Test mail" -smtpServer SBS2003 -Attachment
    "C:\ProgramData\Microsoft\Windows NT\MSFax\Inbox\*.tif"

    -subject sollte hier die eingehende Nummer als Variable, also in diesem Fall "Von: +49(123)45677" sein.

    Auch die angefügte Datei -Attachment sollte als Variable definiert werden, da die engehendenden Faxe ensprechend gespeichert werden.

    Bei den Variablen sezen brauche ich ein wenig Hilfe.

    Eingehnde Faxe werden mit zwei Event-Meldungen protokolliert:

    Zuerst mit der Event-ID 32008 den Eingang des Faxes:

    Protokollname: Application
    Quelle:        Microsoft Fax
    Datum:         12.07.2012 10:18:50
    Ereignis-ID:   32008
    Aufgabenkategorie:Eingehend
    Ebene:         Informationen
    Schlüsselwörter:Klassisch
    Benutzer:      Nicht zutreffend
    Computer:      
    Beschreibung:
    C:\ProgramData\Microsoft\Windows NT\MSFax\Queue\1CD6006E7637E.tif empfangen. Von: +49(123)45677. Anruferkennung: . An: +49(123)456788. Seiten: 1. Übertragungszeit: ‎00:00:27. Gerätename: Dialogic Diva Fax Modem #2. Weitere Informationen erhalten Sie im Aktivitätsprotokoll.
    Ereignis-XML:
    <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
      <System>
        <Provider Name="Microsoft Fax" />
        <EventID Qualifiers="16384">32008</EventID>
        <Level>4</Level>
        <Task>3</Task>
        <Keywords>0x80000000000000</Keywords>
        <TimeCreated SystemTime="2012-07-12T08:18:50.000000000Z" />
        <EventRecordID>3130</EventRecordID>
        <Channel>Application</Channel>
        <Computer>srvfax.domain.local</Computer>
        <Security />
      </System>
      <EventData>
        <Data>C:\ProgramData\Microsoft\Windows NT\MSFax\Queue\1CD6006E7637E.tif</Data>
        <Data>+49(123)456789</Data>
        <Data>
        </Data>
        <Data>+49(123)456788</Data>
        <Data>1</Data>
        <Data>‎00:00:27</Data>
        <Data>Dialogic Diva Fax Modem #2</Data>
      </EventData>
    </Event>
    Als zweites mit der Event-ID 32093 wird das Fax in das Verzeichnis C:\ProgramData\Microsoft\Windows NT\MSFax\Queue\1CD6006E7637E.tif archiviert.
    Protokollname: Application
    Quelle:        Microsoft Fax
    Datum:         12.07.2012 10:18:50
    Ereignis-ID:   32093
    Aufgabenkategorie:Eingehend
    Ebene:         Informationen
    Schlüsselwörter:Klassisch
    Benutzer:      Nicht zutreffend
    Computer:      srvfax.domain.local
    Beschreibung:
    Empfangenes Fax C:\ProgramData\Microsoft\Windows NT\MSFax\Queue\1CD6006E7637E.tif wurde in C:\ProgramData\Microsoft\Windows NT\MSFax\Inbox\UnAssigned$401cd6006e7637e.tif archiviert.
    Ereignis-XML:
    <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
      <System>
        <Provider Name="Microsoft Fax" />
        <EventID Qualifiers="16384">32093</EventID>
        <Level>4</Level>
        <Task>3</Task>
        <Keywords>0x80000000000000</Keywords>
        <TimeCreated SystemTime="2012-07-12T08:18:50.000000000Z" />
        <EventRecordID>3131</EventRecordID>
        <Channel>Application</Channel>
        <Computer>srvfax.domain.local</Computer>
        <Security />
      </System>
      <EventData>
        <Data>C:\ProgramData\Microsoft\Windows NT\MSFax\Queue\1CD6006E7637E.tif</Data>
        <Data>C:\ProgramData\Microsoft\Windows NT\MSFax\Inbox\UnAssigned$401cd6006e7637e.tif</Data>
      </EventData>
    </Event>
    Hoffe, auf eine Hilfestellung für mein Problem. Sollten Infos fehlen, reiche ich diese gerne nach. Vielen Dank schon jetzt mal.

    Donnerstag, 12. Juli 2012 11:21

Antworten

  • Die nötigen Werte kannst du mit REGEX rausfiltern. Das folgende sollte gehen, sofern du die Events oben nicht zu stark editiert hast:
      

    $subject = get-eventlog -log application -source "microsoft fax" | where {$_.eventID -eq 32008} | `
    	Select-object -ExpandProperty Message -First 1 |  Select-String -Pattern "Von: \+[0-9]{2,5}\([0-9]{2,9}\)[0-9]{2,20}" | `
    	Select-Object -ExpandProperty Matches | Select-Object -ExpandProperty Value
    	
    $filename = get-eventlog -log application -source "microsoft fax" | where {$_.eventID -eq 32093 } | `
    	Select-object -ExpandProperty Message -First 1 |  Select-String -Pattern "C:\\ProgramData\\Microsoft\\Windows NT\\MSFax\\Inbox\\.*\.tif" | `
    	Select-Object -ExpandProperty Matches | Select-Object -ExpandProperty Value
    
    send-mailmessage -from "PowerShell <powershell@domain.local>" -to "Faxeingang <faxeingang@domain.local>" `
    	-subject $subject -smtpServer SBS2003 -Attachment $filename 

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    • Bearbeitet Denniver ReiningMVP, Moderator Donnerstag, 12. Juli 2012 13:45 LINK
    • Als Antwort markiert SebaldJ Freitag, 13. Juli 2012 05:52
    • Tag als Antwort aufgehoben SebaldJ Freitag, 13. Juli 2012 05:52
    • Als Antwort markiert SebaldJ Freitag, 13. Juli 2012 05:52
    Donnerstag, 12. Juli 2012 13:43
    Moderator

Alle Antworten

  • Die nötigen Werte kannst du mit REGEX rausfiltern. Das folgende sollte gehen, sofern du die Events oben nicht zu stark editiert hast:
      

    $subject = get-eventlog -log application -source "microsoft fax" | where {$_.eventID -eq 32008} | `
    	Select-object -ExpandProperty Message -First 1 |  Select-String -Pattern "Von: \+[0-9]{2,5}\([0-9]{2,9}\)[0-9]{2,20}" | `
    	Select-Object -ExpandProperty Matches | Select-Object -ExpandProperty Value
    	
    $filename = get-eventlog -log application -source "microsoft fax" | where {$_.eventID -eq 32093 } | `
    	Select-object -ExpandProperty Message -First 1 |  Select-String -Pattern "C:\\ProgramData\\Microsoft\\Windows NT\\MSFax\\Inbox\\.*\.tif" | `
    	Select-Object -ExpandProperty Matches | Select-Object -ExpandProperty Value
    
    send-mailmessage -from "PowerShell <powershell@domain.local>" -to "Faxeingang <faxeingang@domain.local>" `
    	-subject $subject -smtpServer SBS2003 -Attachment $filename 

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    • Bearbeitet Denniver ReiningMVP, Moderator Donnerstag, 12. Juli 2012 13:45 LINK
    • Als Antwort markiert SebaldJ Freitag, 13. Juli 2012 05:52
    • Tag als Antwort aufgehoben SebaldJ Freitag, 13. Juli 2012 05:52
    • Als Antwort markiert SebaldJ Freitag, 13. Juli 2012 05:52
    Donnerstag, 12. Juli 2012 13:43
    Moderator
  • Hallo Denniver,

    vielen Dank für deine Antwort. Es klappt sehr gut mit deinem Skript. Hoffe, du hast nicht allzu viel Zeit investieren müssen.

    Führe ich diese mit einer PowerShell Konsole aus, klappt das Versenden einwandfrei.

    Ich weiß nicht ob das hier Off-Topic ist:

    Sobald ich aber eine geplante Aufgabe das Skript starten lasse, wird minutenlang immer nur der Status „Wird ausgeführt“ angezeigt, ohne das eine Aktion geschieht.

    Benutzerkonto hat Domain-Administrationsrechte. Auch mit SYSTEM funktioniert es nicht. Hast du einen Rat oder ist diese Frage hier fehl am Platz?

    Grüße Johannes

    Freitag, 13. Juli 2012 05:57
  • Hallo, nun antworte ich mir selbst da ich das problem bei der geplanten Aufgabe selbst lösen konnte:

    Es muss unter Aktion als Programm "powershell" und als Argument der Pfad zum Skript eingetragen werden.

    Freitag, 13. Juli 2012 06:59
  • Hallo miteinander,

    ein Problem habe ich leider noch:

    Da ich den Code von Denniver angepasst auf zwei Skripte für zwei Eingangsnummern verwende, wird es unterbrochen, wenn zwei Faxe hintereinander eingehen.

    Hier die Fehlermeldung bei Ausführung in der PS Konsole:

    Send-MailMessage : Das Argument für den Parameter "Attachments" kann nicht überprüft werden. Das Argument ist NULL oder
     leer. Geben Sie ein Argument an, das nicht NULL oder leer ist, und führen Sie dann den Befehl erneut aus.
    Bei C:\ProgramData\Microsoft\Windows NT\MSFax\Scripts\faxeingang9368.ps1:10 Zeichen:51
    +     -subject $subject -smtpServer SBS2011 -Attachment <<<<  $filename
        + CategoryInfo          : InvalidData: (:) [Send-MailMessage], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.SendMailMessage

    Wird im Code also nur der erste Eintrag des Eventlog abgefragt wird?

    Meine Fragen dazu:

    Kann man die letzten 5 Eventlog Einträge mit der jeweiligen Event ID abfragen?

    Kann man mit der where abfrage mit einer UND-Verknüpfung den nicht auch die eventdata abfragen? Dort wird die Empfängernummer "Nummer 9368" mit protokolliert. Damit frage ich auch meinen Trigger für meine geplante Aufgabe ab.

    <EventData>
        <Data>C:\ProgramData\Microsoft\Windows NT\MSFax\Queue\1CD60D5359B19.tif</Data>
        <Data>+49(123)456789368</Data>
        <Data>
        </Data>
        <Data>Nummer 9368</Data>
        <Data>1</Data>
        <Data>‎00:00:26</Data>
        <Data>Dialogic Diva Fax Modem #3</Data>
      </EventData>
    </Event>

    Vielen Dank für Eure Hilfe!

    Grüße Johannes



    • Bearbeitet SebaldJ Freitag, 13. Juli 2012 10:30 Telefonnummer anonymisiert
    Freitag, 13. Juli 2012 09:39