2017-03-16 1 views
0

Ich versuche, einen Powershell-Skript für Exchange zu schreiben, die die Menge an E-Mail eine bestimmte Mailbox innerhalb eines 1 Monat Zeitrahmen und eine E-Mail, diese Objekts Summen auf bestimmte Personen erhalten hat, finden. So Far ich habe:Exchange-Automation Script

$date = Get-Date -Format MM/dd/yyyy 
$time = Get-Date -Format HH:mm:ss 
$previousMonth = 

PS C:\> Get-MessageTrackingLog -Recipients:mailbox1.org -start "02/01/2017 00:00:00" -end "$date $time" -EventId "Receive" -ResultSize unlimited | Measure-Object 
PS C:\> Get-MessageTrackingLog -Recipients:mailbox2.org -start "02/01/2017 00:00:00" -end "$date $time" -EventId "Receive" -ResultSize unlimited | Measure-Object 
PS C:\> Get-MessageTrackingLog -Recipients:mailbox3.org -start "02/01/2017 00:00:00" -end "$date $time" -EventId "Receive" -ResultSize unlimited | Measure-Object 
PS C:\> Get-MessageTrackingLog -Recipients:mailbox4.org -start "02/01/2017 00:00:00" -end "$date $time" -EventId "Receive" -ResultSize unlimited | Measure-Object 
ps c:\> Send-MailMessage -SmtpServer "server" -To "recipient email<recipient email>" -From "Monthly Mailbox Totals <email address>" -Subject "Monthly Mailbox Item Count" -Body "" 

Was ich habe Probleme mit ist: Ich kann nicht ganz herausfinden, wie Sie den Datumsbereich berechnen für den -start-Eingang 1. des Vormonats zu erhalten von dem aktuellen Datum und Uhrzeit, und zweitens bin ich fest, wie man die Summen von diesem formatiert in den Körper der E-Mail, die gesendet wird, erhalten. Ich möchte, dass dieses Skript am ersten jeden Monats ausgeführt wird, wenn das überhaupt hilft.

Irgendwelche Tipps wäre sehr dankbar danken Ihnen im Voraus.

+0

Ich sehe 2-3 getrennte Fragen. Sie sollten versuchen, sich auf nur einen zu beschränken. Es gibt Datumsmethoden, mit denen Sie Daten in der Vergangenheit abrufen und sogar Ihre aktuelle Formatierungslogik beibehalten können. Sie speichern nicht einmal die Ergebnisse Ihrer Verfolgungsprotokollanforderungen. Fragen Sie auch, wie Sie das automatisieren können? – Matt

Antwort

0

System.DateTime hat eine Funktion AddX (Tage, Stunden, Minuten usw.). Mit diesen können Sie einen genauen Zeitrahmen angeben. Dann addieren Sie einfach den zurückgegebenen Wert von Get-MessageTrackingLog und senden den Inhalt Ihrer Variablen weg.

$StartDate = (Get-Date).AddDays(-14) #Get the last 2 Weeks 
$EndDate = Get-Date 
$i = 0 
$ += (Get-MessageTrackingLog -Recipients "RecipientA" -Start $StartDate -End $EndDate -EventId "Receive" -ResultSize unlimited | measure).Count 
$ += (Get-MessageTrackingLog -Recipients "RecipientB" -Start $StartDate -End $EndDate -EventId "Receive" -ResultSize unlimited | measure).Count 
Send-MailMessage -SmtpServer "server" -To "recipient" -From "sender" -Subject "Mailcount" -Body "Mail count for this month is $i" 

Wenn Sie die Flexibilität brauchen, um sich zu setzen Zeitrahmen können Sie einfach den Beschleuniger benutzen, um Ihre Datumszeichen in konvertieren DateTime

$StartDate = [DateTime]"3.10.17" 
+0

Awesome vielen Dank! Kann (Get-Date) .AddDays (-14) formatiert werden? Ich brauche es MM/TT/JJJJ HH: mm: ss wäre es (Get-Date) .AddDays (-14) -Format MM/TT/JJJJ HH: mm: ss – xs0u1x

+0

Sie müssen nicht Formatieren Sie es, um es in 'Get-MessageTrackingLog' zu verwenden. Es verwendet einfach das aktuelle Datum und die aktuelle Uhrzeit und subtrahiert 14 Tage. Wenn Sie es für Ausgabezwecke formatieren möchten, können Sie es wie folgt machen: '(Get-Date) .AddDays (-14) .ToString (" MM/TT/JJJJ HH: mm: ss ")' – Fairy