none
Gesendete und Empfangene Mails zählen RRS feed

  • Frage

  • Hallo,

    ich soll von einer Gruppe von Usern die tägliche Anzahl an empfangenen und gesendeten Mails zählen und das Ergebnis per Mail versenden. Leider habe ich noch recht wenig Erfahrung mit Powershell, so das ich mir folgendes zusammen gegoogelt/gebastelt habe.

    Auslesen der Tracking Logs:

    #Add-PSSnapin Microsoft.Exchange.Management.Powershell.E2010;
    $intSent = $intRec = 0
    Get-TransportServer CAS000001 | Get-MessageTrackingLog -ResultSize Unlimited -Start “03/20/2017” -End “03/21/2017” -Sender "xy@ichag.de" -EventID RECEIVE | ? {$_.Source -eq "STOREDRIVER"} | ForEach { $intSent++ }
    Get-TransportServer CAS000001 | Get-MessageTrackingLog -ResultSize Unlimited -Start “03/20/2017” -End “03/21/2017” -Recipients "xy@ichag.de" -EventID DELIVER | ForEach { $intRec++ }
    $intSent  | Out-File -FilePath "c:\temp\abcd.txt" -append
    $intRec  | Out-File -FilePath "c:\temp\abcd.txt" -append

    Auslesen der User aus einer Gruppe:

    #Import-Module activedirectory
    $Groups = Get-ADgroup -filter {Name -like "ICHAG-WG-Kundenbetreuung" } | Select-Object Name
    ForEach ($Group in $Groups) {
     Get-ADgroupMember -identity $($group.name) | Select Name
      write-host $group
      }

    In $Group liegen alle User der Sicherheitsgruppe, wie bekomme ich es hin, diese an eine Variable zu übergeben, die ich dann im Trackinglog verwenden kann. Besser wäre es noch die PrimarySMTPAddress des jeweiligen Users übergeben zu können, doch über Select Name, Mail oder PrimarySMTPAddress bekomme ich sie nicht angezeigt.

    Ich weiß, so fängt man normalerweise nicht an Powershell zu lernen, nur bräuchte ich eine Lösung, bevor ich mir Monate lang Schritt für Schritt PS beigebracht habe.

    Danke!

    Mittwoch, 22. März 2017 08:10

Antworten

  • So in etwa könnte es aussehen:

    $group = "TestGroup"
    $start = “03/20/2017”
    $end = “03/21/2017”
    $relay = "MAILSERVER.firma.de"
    
    Import-Module ActiveDirectory
    $users = Get-ADGroup -Filter {Name -eq $group} | Get-ADGroupMember | Get-ADUser -Properties mail
    foreach ($user in $users) {
        $nmails = (Get-MessageTrackingLog -Server CAS0001 -ResultSize Unlimited -Start $start -End $end -Sender $user.mail -EventID DELIVER).Count
        $nmailr = (Get-MessageTrackingLog -Server CAS0001 -ResultSize Unlimited -Start $start -End $end -Recipients $user.mail -EventID DELIVER).Count
        Send-MailMessage -From "bigbrother@firma.de" -To $user.mail -SmtpServer $relay -Subject "Mail-Bericht für $($user.mail)" -Body "Von: $start`r`nBis: $end`r`nGesendet: $nmails`r`nEmpfangen: $nmailr"
    }


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Mittwoch, 22. März 2017 08:48

Alle Antworten

  • So in etwa könnte es aussehen:

    $group = "TestGroup"
    $start = “03/20/2017”
    $end = “03/21/2017”
    $relay = "MAILSERVER.firma.de"
    
    Import-Module ActiveDirectory
    $users = Get-ADGroup -Filter {Name -eq $group} | Get-ADGroupMember | Get-ADUser -Properties mail
    foreach ($user in $users) {
        $nmails = (Get-MessageTrackingLog -Server CAS0001 -ResultSize Unlimited -Start $start -End $end -Sender $user.mail -EventID DELIVER).Count
        $nmailr = (Get-MessageTrackingLog -Server CAS0001 -ResultSize Unlimited -Start $start -End $end -Recipients $user.mail -EventID DELIVER).Count
        Send-MailMessage -From "bigbrother@firma.de" -To $user.mail -SmtpServer $relay -Subject "Mail-Bericht für $($user.mail)" -Body "Von: $start`r`nBis: $end`r`nGesendet: $nmails`r`nEmpfangen: $nmailr"
    }


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Mittwoch, 22. März 2017 08:48
  • Vielen Dank,

    ich werde es testen.

    Mittwoch, 22. März 2017 12:54
  • Paulchen

    schau dir auch einmal diesen fertigen (gratis) Reporter an

    https://www.frankysweb.de/exchange-reporter-2013/


    Chris


    • Bearbeitet -- Chris -- Mittwoch, 22. März 2017 16:56
    Mittwoch, 22. März 2017 16:53
  • Hallo Evgenij,

    dein Skript funktioniert super, danke noch mal dafür.

    Ich habe es wie folgt angepasst, da die Mail nicht an jeden User sondern nur an den Vorgesetzen gehen soll.

    $group = "Kundenbetreuung"
    $start = “03/20/2017”
    #$start = (get-date).ToShortDateString()
    $end = “03/21/2017”
    #$end = ((get-date).AddDays(+7)).ToShortDateString()
    $relay = "CAS000001"
    $filename = "c:\temp\both.txt"

    Import-Module ActiveDirectory
    "Mitarbeiter`t`t`t gesendet`t empfangen" | Out-File  -FilePath "c:\temp\both.txt" -append
    $users = Get-ADGroup -Filter {Name -eq $group} | Get-ADGroupMember | Get-ADUser -Properties mail
    foreach ($user in $users) {
        $nmails = (Get-MessageTrackingLog -Server CAS000001 -ResultSize Unlimited -Start $start -End $end -Sender $user.mail -EventID DELIVER).Count
        $nmailr = (Get-MessageTrackingLog -Server CAS000001 -ResultSize Unlimited -Start $start -End $end -Recipients $user.mail -EventID DELIVER).Count
    $user.mail + "`t" + $nmails +"`t`t" + $nmailr   | Out-File  -FilePath "c:\temp\both.txt" -append
    }

    Send-MailMessage -From "bigbrother@firma.de" -To "Admin@ichAG.de" -SmtpServer $relay -Subject "Mail-Bericht fuer Betreuung" -Body "`r`nVom: $start`r`nBis: $end`r`n" -Attachments $filename

    remove-item $filename

    Formatierung ist noch nicht ganz so wie ich sie haben will, aber folgendes ist für mich wichtiger. Ich würde das Skript über einen Scheduler einmal pro Woche laufen lassen und einen Zeitraum von einer Woche erfassen. Dazu habe ich mir den Code hinter die Variable #$start und #$end gebastelt. Allerdings bekomme ich dann folgenden Fehler:Cannot process argument transformation on parameter 'Start'. Cannot convert value "27.03.2017" to type "System.DateTime
    ". Error: "String was not recognized as a valid DateTime."
        + CategoryInfo          : InvalidData: (:) [Get-MessageTrackingLog], ParameterBindin...mationException
        + FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-MessageTrackingLog

    Kannst du mir noch einen Tipp geben wie ich das mit dem Datumsformat machen muss oder welches Objekt ich anfassen muss?

    Danke!

    Montag, 27. März 2017 15:26
  • $start = Get-Date -Format 'MM\/dd\/yyyy'
    $end = Get-Date (Get-Date).AddDays(7) -Format 'MM\/dd\/yyyy'


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Montag, 27. März 2017 15:50
  • oder so (ging es bei mir auch)

    $DatumVon = (get-date).AddMonths(-1).ToString("MM/dd/yyyy 00:00")

    $DatumBis = (get-date).AddDays(-1).ToString("MM/dd/yyyy 23:00")


    Chris

    Dienstag, 28. März 2017 08:55