none
Recipients per Powershell ausgeben lassen RRS feed

  • Frage

  • Hallo,

    wir versuchen gerade ein Skript zu basteln, in dem alle Recipients eines Tages, sortiert nach Häufigkeit, angezeigt werden. Dazu verwenden wir folgendes Kommando:
    get-messagetrackinglog -Start $Start -End $End -EventID "RECEIVE" -ResultSize Unlimited | select Sender,RecipientCount,TotalBytes,Recipients | Group-Object Recipients | Sort-Object Count -Descending
    Leider zeigt er in der Ausgabe bei "Name" nicht den Recipient an, sondern nur "System.String[]". Der Name wäre natürlich schöner. Es scheint an den geschweiften Klammern beim Feld "Recipients" zu liegen. Ein "Group-Object Sender" funktioniert nämlich. Wie können wir das hinbekommen ?

    Mit freundlichen Grüßen

    Sven

    Donnerstag, 9. Dezember 2010 11:19

Antworten

  • Moin,

    im Prinzip bist Du schon auf der richtigen Spur - Dir fehlt nur ein ganz
    wenig Wissen über die PowerShell allgemein.

    Das Problem ist: Es kann in einer Mail mehr als einen Empfänger geben,
    daher ist Recipients ein Feld (Auflistung, Array). Es gibt aber nur einen
    Sender, daher ist das ein Wert.

    Du siehst es direkt über get-member, bzw. auch in Deiner Anzeige:
    system.string[] -> mehrere Werte
    system.string -> ein Wert

    Die eckigen Klammern sind der feine Unterschied.

    In der Ausgabe siehst Du das auch: Werte aus einer Auflistung werden in
    geschweiften Klammern ausgegeben, ein Wert aus einem Einzelfeld aber ohne.

    Insofern ist Dein Script bereits jetzt schon unvollständig, das es nur
    Empfänger gruppiert, die an erste Stelle standen. Wenn ein Empfänger an
    zweiter Stand, findest Du ihn damit nicht.

    Es ist natürlich möglich, das zu lösen, aber nicht mehr mit einem
    Einzeiler. Hier musst Du erst die Recipientes aufbrechen, neue Objekte
    erzeugen und die kannst Du dann weiterverarbeiten.


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Donnerstag, 9. Dezember 2010 12:48
  • Hi ihr zwei,

    ...und es geht so einfach ...mit Logparser und ein wenige SQL-Syntax! ;-)

    Es ist natürlich möglich, das zu lösen, aber nicht mehr mit einem
    Einzeiler. Hier musst Du erst die Recipientes aufbrechen, neue Objekte
    erzeugen und die kannst Du dann weiterverarbeiten.

    LogParser.exe "select recipient-address as Empfänger, count(*) as Treffer from
    'C:\program files\Microsoft\Exchange
    Server\TransportRoles\Logs\MessageTracking\MSGTRK20101208*.log group by
    recipient-address order by Treffer desc " -i:CSV -nSkipLines:4 -o:datagrid

    Damit bekommst du eine schöne Liste aller heute gesendeten Emails nach dem
    Empfänger!

    Hier gehts weiter:
    http://o-o-s.de/?p=750

    Viele Grüße
    Christian

    Donnerstag, 9. Dezember 2010 13:25
    Moderator

Alle Antworten

  • Moin,

    im Prinzip bist Du schon auf der richtigen Spur - Dir fehlt nur ein ganz
    wenig Wissen über die PowerShell allgemein.

    Das Problem ist: Es kann in einer Mail mehr als einen Empfänger geben,
    daher ist Recipients ein Feld (Auflistung, Array). Es gibt aber nur einen
    Sender, daher ist das ein Wert.

    Du siehst es direkt über get-member, bzw. auch in Deiner Anzeige:
    system.string[] -> mehrere Werte
    system.string -> ein Wert

    Die eckigen Klammern sind der feine Unterschied.

    In der Ausgabe siehst Du das auch: Werte aus einer Auflistung werden in
    geschweiften Klammern ausgegeben, ein Wert aus einem Einzelfeld aber ohne.

    Insofern ist Dein Script bereits jetzt schon unvollständig, das es nur
    Empfänger gruppiert, die an erste Stelle standen. Wenn ein Empfänger an
    zweiter Stand, findest Du ihn damit nicht.

    Es ist natürlich möglich, das zu lösen, aber nicht mehr mit einem
    Einzeiler. Hier musst Du erst die Recipientes aufbrechen, neue Objekte
    erzeugen und die kannst Du dann weiterverarbeiten.


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Donnerstag, 9. Dezember 2010 12:48
  • Hi ihr zwei,

    ...und es geht so einfach ...mit Logparser und ein wenige SQL-Syntax! ;-)

    Es ist natürlich möglich, das zu lösen, aber nicht mehr mit einem
    Einzeiler. Hier musst Du erst die Recipientes aufbrechen, neue Objekte
    erzeugen und die kannst Du dann weiterverarbeiten.

    LogParser.exe "select recipient-address as Empfänger, count(*) as Treffer from
    'C:\program files\Microsoft\Exchange
    Server\TransportRoles\Logs\MessageTracking\MSGTRK20101208*.log group by
    recipient-address order by Treffer desc " -i:CSV -nSkipLines:4 -o:datagrid

    Damit bekommst du eine schöne Liste aller heute gesendeten Emails nach dem
    Empfänger!

    Hier gehts weiter:
    http://o-o-s.de/?p=750

    Viele Grüße
    Christian

    Donnerstag, 9. Dezember 2010 13:25
    Moderator
  • Hi Sven,

    konnten dir die Tips helfen?

    Viele Grüße
    Christian

    Freitag, 10. Dezember 2010 11:18
    Moderator
  • Hallo,

    ich werde das mit dem LogParser auf jeden Fall mal ausprobieren. Gerade das mit der grafischen Darstellung sieht interessant aus. Danke für die Hilfe.

    Viele Grüße

    Sven

    Montag, 13. Dezember 2010 12:25