Dieses kleine Script überwacht des Posteingang eines Postfachs auf ungelesene Nachrichten. Ich habe es erstellt um Dienstpostfächer zu überwachen, aus denen andere Programme automatisch Mails verarbeiten. Mit ein paar kleinen Anpassungen lässt sich daraus auch ein Monitor für PRTG oder Solarwinds erstellen.
#————————————————————————————–
# Postfach auf ungelesene Mails prüfen
# www.frankysweb.de
#
# by Frank Zöchling
# Version 0.1
#
#————————————————————————————–$mailboxName = „journal@frankysweb.de“ #zu überprüfende Mailbox
$maxUnreadAge = „20“ #Wert in Minuten (1 Tag = 1440 Minuten)#EWS Verbindung herstellen
Add-Type -Path „C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll“
$version = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2
$service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService($version)
$service.UseDefaultCredentials = $true
$service.AutodiscoverUrl($mailboxName)$inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)
#Mails abrufen und auswerten
$today = get-date
$maxagetime = $today.AddMinutes(-$maxUnreadAge)$mails = $inbox.FindItems(100)
$unreadmails = $mails | where {$_.isRead -match „False“}
$unreadmailscount = $unreadmails | measure-object | foreach-object {$_.Count}
$unreadmailsmaxagecount = $unreadmails | where {$_.DateTimeReceived -lt $maxagetime} | measure-object | foreach-object {$_.Count}write-host „Anzahl ungelesene E-Mails: $unreadmailscount“
write-host „Anzahl ungelesene E-Mails älter als $maxUnreadAge Minuten: $unreadmailsmaxagecount“
Um das Script aufzuführen ist die EWS API 2.0 erforderlich, die API kann hier runtergeladen werden:
http://www.microsoft.com/en-us/download/details.aspx?id=35371
Hallo Frank
Dein Script interessiert mich sehr da ich auch ein Postfach mit PRTG überwachen möchte.
Leider erhalte ich immer die selbe Anzahl ungelesener Mails.
ungelesen: 99
ungelesen älter als 20 minuten: 99
Kannst Du mir sagen wo da der Fehler liegt?
Danke im Voraus
Rolf
Hallo Frank!
Exchange 2016 Umgebung EWS 2.2 ist eingerichet.
EWS habe ich getestet und funktioniert.
Bei dem Aufruf
$inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)
bekomme ich immer die Meldung
Ausnahme beim Aufrufen von „Bind“ mit 2 Argument(en): „Es ist kein Postfach mit einer solchen GUID vorhanden.“
In D:\Script\Mailchecker.ps1:19 Zeichen:5
+ $inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($serv …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ServiceResponseException
Wäre da nach schlau.
Derzeit schaut das Script so aus:
$mailboxName = „dispatch@contoso.eu“ #zu überprüfende Mailbox
$maxUnreadAge = „20“ #Wert in Minuten (1 Tag = 1440 Minuten)
#EWS Verbindung herstellen
#Derzeit ist EWS Api2.2 Installiert
Add-Type -Path „C:\Program Files\Microsoft\Exchange\Web Services\2.2 \Microsoft.Exchange.WebServices.dll“
$version = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2016
$service = new-object Microsoft.Exchange.WebServices.Data.ExchangeService($version)
$service.UseDefaultCredentials = $true
$service.AutodiscoverUrl($mailboxName)
$inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)
#Mails abrufen und auswerten
$today = get-date
$maxagetime = $today.AddMinutes(-$maxUnreadAge)
$mails = $inbox.FindItems(100)
$unreadmails = $mails | where {$_.isRead -match „False“}
$unreadmailscount = $unreadmails | measure-object | foreach-object {$_.Count}
$unreadmailsmaxagecount = $unreadmails | where {$_.DateTimeReceived -lt $maxagetime} | measure-object | foreach-object {$_.Count}
write-host Anzahl ungelesene E-Mails: $unreadmailscount
write-host Anzahl ungelesene E-Mails älter als $maxUnreadAge Minuten: $unreadmailsmaxagecountâ
Hallo Frank,
ich habe folgende Anforderung (Exchange 2013):
1. Emails in einem Unterordner alter als X Minuten vorhanden sind
2. Eine bestimmte Anzahl von Mails in einem Unterordner überschritten wurde
Die erste Anforderung würde dein Script ja erfüllen, kannst Du es bitte für die 2. Anforderung anpassen.
Danke & Gruß
Eugen
Hallo Frank,
ich bin hier auf dein Script gestossen, sieht sehr intressant aus. Nur meine Frage dazu:
Läuft das auch auf Exchange 2016?
Gruß
Heiko
Hallo Heiko,
ja das Script läuft auch mit Exchange 2016.
Gruß, Frank