Exchange Monitor

Exchange Monitor ist ein PowerShell Script welches Exchange Server überwacht und Administratoren im Fehlerfall auch per SMS benachrichtigen kann. Exchange Monitor ist für kleine Exchange Organisationen gedacht, die über keine eigene Monitoring / Überwachungslösung verfügen.

Exchange Monitor erstellt eine Website, die mit jedem Webserver dargestellt werden kann (IIS, Apache, PowerShell, etc.) oder direkt mit einem Browser geöffnet werden kann. Exchange Monitor wird per geplanten Task (am besten auf einem separaten Server) ausgeführt und erstellt eine index.html Datei mit folgenden Informationen:

  • Mail Versand/Empfang Überwachung (verschickt eine Mail ins Internet und wertet die Antwort aus)
  • Überprüft zusätzliche SMTP Gateways bei Bedarf (Proxys, AntiSPAM Gateways)
  • Listet die Warteschlangen auf und alarmiert bei volllaufenden Warteschlangen
  • Überwacht den Speicherplatz der Exchange Server
  • Überwacht die SMTP Gateways per Ping
  • Überwacht die Exchange Dienste
  • Kann per SMS Fehler melden (ja… SMS, Whatsapp in alt, Mail wär ja doof bei einem Ausfall…) :-)

Exchange Monitor bietet zwar keine Echtzeit Überwachung, kann aber helfen Probleme zu erkennen, bevor es zu einem Ausfall kommt.

Screenshots der Monitoring Website:

Dashboard

Details

Installation:

Die Installation ist einfach: Runterladen, entpacken, settings.ini anpassen, starten.

.\Start-ExchangeMonitor.ps1 -Installpath c:\ExchangeMonitor

In dem Verzeichnis findet sich die folgende Struktur:

image

Im Verzeichnis „HTML“ liegt nach dem ersten Durchlauf eine Datei mit dem Namen „index.html“, diese kann entweder direkt per Browser geöffnet werden, oder es wird ein IIS installiert der auf dieses Verzeichnis zeigt.

Im Exchange Monitor Verzeichnis findet sich ebenfalls die Datei „settings.ini“. Hier müssen die entsprechenden Einstellungen vor dem ersten Start vorgenommen werden:

image

  • Checkpoints = Anzahl der zu speichernden Prüfpunkte
  • Echomail =Testmail mit Autoresponder für Mailflow (kann normalerweise so belassen werden)
  • Testmailbox =E-Mail Adresse von der die Testmail geschickt und wieder empfangen werden
  • TestUser =Der zugehörige Benutzername zur Testmailbox
  • TestUserDomain =Die zugehörige AD-Domain in der sich das Konto des TestUsers befindet
  • TestUserPass =Passwort des Testusers
  • AddSmtpServers =zu prüfende SMTP Gateways, die per SMTP Port 25 erreichbar sind (AntiSPAM Gateways, Proxys etc)
  • Latency =Zeit in Sekunden in der die Testmailbox wieder innerhalb des Postfachs gefunden werden muss, der Wert muss ggf je nach Umgebung höher oder niedriger gesetzt werden
  • IncludeExchangeReport =Ab Exchange Reporter Version 2.1 wird es die Möglichkeit geben, die Exchange Reports auch im Monitor anzuzeigen. Bis dahin bitte auf „nein“ belassen.

 

Voraussetzungen:

  • Exchange Server 2010/2013
  • Powershell 4
  • EWS API 2.2 (Download)

Change Log:

Version 2.0:

  • Erste öffentliche Version

Version 2.1:

  • diverse Bugfixes
  • Testmail Funktion verbessert
  • Möglichkeit eingefügt nur den Port des SMTP Gateways zu überwachen
  • Status der Datenbanken eingefügt

Bekannte Bugs:

– bisher keine, Probleme bitte per Kontaktformular melden

Download:

Exchange Monitor kann nach belieben angepasst und verwendet werden. Wenn Ihnen Exchange Monitor hilfreich erscheint, würde ich mich um eine Spende freuen.

 

93 Gedanken zu „Exchange Monitor“

  1. Der Monitor ist super! Vielen Dank dafür erstmal.

    Hier noch ein Feature Request: Ein Exclude in der settings.conf um einzelne Server raus zu nehmen, wenn man mal ein CU installiert oder so. Sonst kommt ja dauernd die Meldung dass dort Dienste nicht laufen oder sonstige Fehlermeldungen von dem Server, der im Wartungsmodus ist.

    Antworten
  2. Hallo zusammen,

    seit dem letzten Update (Exchange Server 2016 CU18) funktioniert das Überprüfen
    des Mailflows nicht mehr.
    Das Script gibt folgenden Fehler aus:

    Prüfe Dienste… Fertig
    Sende Testmails…Ausnahme beim Aufrufen von „Bind“ mit 2 Argument(en): „The request failed. Der Remoteserver hat eine
    n Fehler
    zurückgegeben: (401) Nicht autorisiert.“
    In C:\Monitoring\Exchange Monitor 2.1\Scripts\Get-ExchangeTestMail.ps1:13 Zeichen:1
    + $inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service, …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ServiceRequestException

    Kann mir hier jemand weiterhelfen?
    Besten Dank im Voraus.

    Viele Grüsse

    Tom

    Antworten
  3. Hallo Franky,

    ich versuche gerade den Monitor 2.1 unter einem Exchange 2016 zu installieren und erhalte beim Ausführen den Fehler

    Starte Exchange Monitor
    Lade Funktionen aus Include-Functions.ps1: Fehler (nicht gefunden)

    Gibt es da einen Fix für?

    Gruß

    René

    Antworten
  4. Hallo Frank,
    dein Script ist sehr hilreich. Danke, dass du es mit uns teilst!

    Ich setze Exchange 2016 auf Server 2016 ein. Einige Probleme konnte ich mit Hilfe dieses Threads bereits lösen und kann hiermit eventuell auch mal weiterhelfen.
    ### Beim Fehler „BIND…2Arguments“ hilft bei mir der Eintrag der internen EWS URL beim Bypass
    ____InternalNLBBypassUrl : https://xserver.domain.local/EWS/Exchange.asmx
    ### …Performace Monitor bei Exchange Englisch/Deutsch-Problem Outstanding RPC
    funktioniert bei mir wenn statt
    ALT: $RPCReq = (get-counter „\\$Servername\MSExchangeIS\RPC-Anforderungen“).countersamples.CookedValue
    NEU: $RPCReq = (get-counter „\\$Servername\MSExchange RpcClientAccess\RPC-Anforderungen“).countersamples.CookedValue
    einträgt.

    bereits erhaltene Hilfe aus Thread:
    — „Echo Eintrag. TU-Berlin hat diesen Dienst in 2018 eingestellt. Nach Recherchen habe ich jetzt mal „echo@univie.ac.at“ eingetragen, das scheint…“

    — AUTODISCOVER: …habe dazu im Get-ExchangeTestmail.ps1 die oberen Lines etwas bearbeitet:
    $service.Url = New-Object URI(„https://myserver.mydomain.local/EWS/exchange.asmx“)

    — …in der „Start-ExchangeMonitor.ps1“ in Zeile 159 den Wert für Sleep anpassen (Bsp: sleep 3600). Dann läuft es einmal in der Stunde…

    Meine Frage:
    Bei Exchange 2016 sind einige Dienste nicht gestartet (bei mir POP, IMAP,…) das führt natürlich immer zu dem bereits berichteten Fehler
    xxxxxxxxxxx – Mailübermittlung gestört
    $ : The term ‚$‘ is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
    spelling of the name, or if a path was included, verify that the path is correct and try again.
    At D:\Exchange_Monitor\Scripts\HTMLEngine.ps1:200 char:20
    + $servicename = $
    + ~
    + CategoryInfo : ObjectNotFound: ($:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
    Sag mir doch bitte, was in Zeile „$servicename = $“ erwartet wird, damit kein Fehler kommt.

    Schönen Resttag noch.
    VG Hans

    Antworten
  5. Erstmal:
    Super Script!!

    Ich habe nur ein Problem …

    Im Falle eines Fehlers möchte das Script eine SMS Senden, was nicht geht da diese Funktion nicht eingerichtet ist …
    Demzufolge wirft das Script auch noch folgenden Fehler:

    $ : Die Benennung „$“ wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.
    In C:\ExchangeMonitor\Scripts\HTMLEngine.ps1:200 Zeichen:20
    + $servicename = $
    + ~
    + CategoryInfo : ObjectNotFound: ($:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

    Gibt es die Möglichkeit den SMS Versand einfach abzustellen?

    VG David

    Antworten
  6. Der Exchange Client von GData 14.2 lässt sich hier auf der CU12 mit aktuellem Patch nicht mehr installieren und reklamiert eine fehlende EWS-API. Setzt man den reg-Schlüssel, läuft das setup, scheitert aber am Auffinden des Management-Servers. Soll jetzt der Schlüssel wieder rein oder bleibt er draussen. Eine Lösung von GData habe ich auch noch nicht bekommen.

    Antworten
  7. Ich forste gerade unseren Spamfilter durch und es stellt sich heraus, daß manche Mails an
    unseren Echomailer quasi unbehelligt durchgehen, andere aber technisch wirklich sehr
    minimalistisch sind und haarscharf an einer Abweisung vorbeischrammen.

    Bei den Echomails von Exchange Monitor sehe ich:

    MISSING_DATE(1) – kein Date: Header
    MISSING_MID(2.5) – keine Message-ID (was interessant ist, sollte die nicht das getestete Mailsystem gerade erzeugen?)
    MISSING_TO(2) – kein To: Header
    MISSING_FROM(2) – kein From: Header

    Da das Script möglichst „naturgetreue“ Mails erzeugen sollte wäre es gut, wenn To:, From: und Date: Header erzeugt würden.

    Antworten
    • Hallo Ralf,
      vielen Dank für deinen Hinweis. Das Script nutzt die Funktion „Send-MailMessage“ der PowerShell und verschickt die Mails über den lokalen Mailserver. Die Header sollten hier also eigentlich passen. Ich könnte mir allerdings vorstellen, dass manche Anwender das Script etwas abgewandelt haben und es sich hierbei um die Portchecks handelt (in der INI Datei unter AddSmtpServers und OnlyCheckIfSMTPPortOpen), ohne TO und FROM kannst du ja auch relativ wenig mit der Mail anfangen :-)
      Gruß, Frank

      Antworten
  8. Hallo Franky,

    ich bekomme einen komischen Fehler:
    Verschicke Alarm per SMS:
    xxxxxxxxxxx – Mailübermittlung gestört
    $ : The term ‚$‘ is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
    spelling of the name, or if a path was included, verify that the path is correct and try again.
    At D:\Exchange_Monitor\Scripts\HTMLEngine.ps1:200 char:20
    + $servicename = $
    + ~
    + CategoryInfo : ObjectNotFound: ($:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

    Irgend eine Idee?

    Antworten
  9. Die initialen 10 Minuten sind durch das erste Senden bedingt (vermute ich mal), danach sollte es sehr schnell gehen. Außer die Kiste raucht, wenn uns wieder Yahoo! mit Groups-Mailings zuschüttet.
    Ja, fragen ist sehr nett – ich brauch halt einen Ansprechpartner, falls mal etwas Amok laufen sollte.

    Antworten
  10. Hallo zusammen,

    hatte bis gerade eben das gleiche Problem wir ihr…
    Ich bin dann auf meiner Recherchenach einer Lösung auf den echo(at)charite.de gestoßen. Der gibt, wie der abgeschaltet Echo der TU, den gesendeten Betreff mit zurück.
    Also muss man nur in der Settings den Echo-Mailer austauschen und es geht wieder…

    Antworten
    • Hallo Andy,
      vielen Dank für den Hinweis. Ich habe es gerade ausprobiert, die Mail benötigt bei mir ca. 10 Minuten bis zur Antwort, da müssten vielleicht die TimeOuts noch etwas höher gestellt werden, aber sonst funktioniert es wunderbar. Bitte auch die Nutzungsbedingung beachten:
      If you want to use this service for routine monitoring, you *MUST* ask postmaster(at)charite.de for permission before doing so.
      Gruß,
      Frank

      Antworten
  11. Hallo,
    also bei mir kommt gar nichts mehr zurück, da es das Postfach nach der Umstellung nicht mehr gibt.
    Komisch, dass du eine Antwort bekommst…

    echo@tu-berlin.de
    mfilter-186-1-3.mx.srv.dfn.de #<mfilter-186-1-3.mx.srv.dfn.de #5.1.1 smtp; 550 5.1.1 : Recipient address rejected: undeliverable address: host exchange.tu-berlin.de[130.149.7.70] said: 550 5.1.1 User unknown (in reply to RCPT TO command)> #SMTP#

    Alle im Wiki genannten Echo-Mailer geben leider immer den gleichen Betreff aus, so das diese so nicht auszuwerten sind. Mal sehen ob Frank etwas neues findet.
    Nochmals Danke für das Script!

    Jens

    Antworten
    • Hi,
      es gibt noch ein paar verbleibende Echo Mailer, aber wie Jens schon richtig bemerkt hat, der Betreff ist immer gleich und macht es daher schwierig die Antwort auf eine Testmail in den Message Tracking Logs zu finden. Ich schaue mal, ob ich es anders lösen kann.
      Gruß,
      Frank

      Antworten
  12. Hi, erst einmal danke für dieses tolle Script.
    Ich hatte auch das Problem mit dem Mailflow und der Meldung „Verschicke Alarm per SMS: EX01 – Mailübermittlung gestört“.
    Ich habe dann mal mit Get-MessageTrackingLog geschaut was denn da zurück kommt. Dabei ist mir aufgefallen das im Subject kein „Re“ vorhanden ist welches aber im Script „Get-ExchangeTestMail.ps1“, Zeile 30, erwartet wird.
    Habe nun bei mir die Zeile 30 angepasst.
    Alt: $resubject = „Re: “ + „$subject“
    Neu: $resubject = „$subject“
    Nun wird auch der Mailflow ausgewertet und Grün angezeigt.

    Gruß
    Mike

    Antworten
  13. Hallo Frank,

    super Tool – aber auch wir bräuchten dringend die 16er Version. Ist das noch auf der Roadmap oder ist die Weiterentwicklung eingestellt?

    Chris

    Antworten
  14. Hallo Frank,

    sehr gutes Tool, danach habe ich die ganze Zeit gesucht. :-)
    ich benötige evtl. noch die Servercomponentstate Statis, da wir auf unserem Cluster einige Proxys überwachen müssen, da diese gerne mal auf inactive gestellt werden.

    Danke und Gruß aus Bad Homburg
    Andy

    Antworten
  15. Hallo Frank,
    ich bin auch sehr angetan von deinen super Leitfäden und dem Autodiscover Whitepaper. Jetzt fehlt zu meinem Glück nur noch der Exchange Monitor für Exchange 2016.
    Deshalb schließe ich mich mal der Frage von Matze an, gibt es einen Zeitplan zur Überarbeitung?

    Schöne Grüße aus Münster
    Kim

    Antworten
  16. Hallo Frank,

    erstmal, super Seite und habe dank deiner Hilfe die Migration von Exchange 2010 zu Exchange 2016 ohne Probleme durchführen können;-)

    Hast du mittlerweile einen Zeitplan, wann der Monitor auf dem Ex2016 läuft?

    Viele Grüße aus dem Saarland
    Matze

    Antworten
  17. Hallo Christian,

    ich hatte ja das Problem mit der Testmail und hab es inzwischen gelöst. Bei mir lags am autodiscover… Hab zwar noch nicht rausgefunden was dort falsch eingestellt ist, aber ich hab das Skript angepasst.
    in der Get-ExchangeTestMail.ps1 in Zeile 7
    $service.AutodiscoverUrl(„$testmailbox“)
    durch
    $service.Url = New-Object URI („https://meinexchange.meinedomain.de/ews/exchange.asmx“)
    ersetzt.
    Seitdem hab ich keinen Fehler mehr und es funktioniert.

    Antworten
  18. Für mich konnte ich das Problem durch eine kleine Änderung im Script lokalisieren und letztendlich dadurch auch lösen.
    In Get-ExchangeTestMail.ps1 in Zeile 27:
    Alt: $mail = send-mailmessage -smtpserver $servername -from $testmailbox -to $echomail -subject $subject -ea 0
    Neu: $mail = send-mailmessage -smtpserver $servername -from $testmailbox -to $echomail -subject $subject -ErrorAction Continue
    Dadurch wird der Fehler angezeigt, aber das Script bricht trotzdem nicht ab. Mit der angezeigten Fehlermeldung könnt ihr euch auf die Suche begeben.

    Antworten
  19. Ok, das Betreff-Problem konnte ich selbst lösen. In Test-SMTPServer.ps1 in Zeile 57:
    Ersetze „subject: Testmail SMTP“ durch „Subject: Testmail SMTP“
    Dadurch interpretiert der Echo Mailer der TU den Betreff korrekt. Anscheinend werten die das Case-Sensitiv aus.

    Der Mailflow Test bleibt aber immer noch rot und dazu konnte ich feststellen, dass die Test-Mail gar nicht versendet wird.
    Der Fehler muss irgendwo in Get-ExchangeTestMail.ps1 in Zeile 27 liegen.
    In unserem SMTP-Proxy finde ich die ganzen „Testmail SMTP“ E-Mails, aber keine einzige mehr mit einer Radom-Zahl im Betreff.

    Antworten
  20. Hallo Frank,
    ich habe ebenfalls neuerdings das gleiche Problem wie Marita, Marcel und Andy.
    Die Mail an echo@tu-berlin.de wird mit dem Betreff „Testmail SMTP“ verschickt und eine Antwort landet auch im Postfach. Aber das Skript scheint die Antwort nicht auszuwerten.
    Auffällig ist, dass die Antworten als Betreff nur noch „Re:“ haben. Der ursprüngliche Betreff ist nicht mehr enthalten.

    Antworten
  21. Hallo Frank,

    super Sache, Dein Monitor! Habe ein Problem:
    Bei mir bleibt der Mailflow immer rot und es erscheint die Meldung „Verschicke Alarm per SMS: EX01 – Mailübermittlung gestört“.
    Wie kann ich feststellen woran es hakt?

    Grüße und vielen Dank
    Marita

    Antworten
  22. Hallo Frank,

    gibt es denn die Möglichkeit in den Exchange Monitor das Auslesen der Größe von den Benutzerpostfächern zu integrieren?
    Die normale Abfrage läuft über diesen Befehl: Get-MailboxStatistics | select-Object displayname,totalitemsize | Sort-Object totalitemsize -Descending | Format-Table -AutoSize
    Irgendwie bekomme ich es nicht hin4, dass die Werte „Displayname“ und „Totalitemsize“ an die .csv übergeben werden. Der Ordner wird in der Unterstruktur erstellt und ebenfalls die Datei, aber leider nur mit den Überschriften „Displayname“;“Totalitemsize“ darunter geht es weiter mit „“;““.

    Danke im Voraus
    Grüße
    Ronny

    Antworten
  23. Hallo Frank,

    danke für deine Super Arbeit.
    Ich habe den Tipp von Ben umgesetzt und die AutodiscoverURL geändert, leider bekomme ich immer noch den zweiten Fehler:
    Ausnahme beim Aufrufen von „Bind“ mit 2 Argument(en): „The Url property on the ExchangeService object must be set.“
    In C:\_install\Exchange Monitor_2.1\Exchange Monitor 2.1\Scripts\Get-ExchangeTestMail.ps1:8 Zeichen:1
    + $inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,[Microsoft. …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ServiceLocalException

    Kann mir hier evtl. noch wer einen Tipp geben.
    Danke
    Ronny

    Antworten
  24. Ich warte schon sehnsüchtig auf den Exchange Monitor für Exchange 2016. Gibt es eine grobe Roadmap, wann dieser fertig sein könnte?

    Nun aber erst mal schönen Urlaub noch ;-)

    Viele Grüße
    Flo

    Antworten
  25. Hallo Franky

    die Zeile 200 $servicename = $ in der HTMLEngine.ps1 produziert bei mir einen Fehler:
    „Die Benennung „$“ wurde nicht als Name eines Cmdlet, einer Funktion….“
    Das fällt allerdings nur auf wenn ein Dienst nicht läuft und so ein Alarm ausgelöst wird.
    Ich kann denn Zweck dieser Zeile nicht sehen und es funktioniert auch scheinbar alles wenn man sie auskommentiert.

    Gruß
    Marcus

    Antworten
    • Ich glaube, es sollte $NULL heisse, da die Variable danach in der Schleife nicht mehr genutzt wird und andere servicevariablen auch auf NULL gesetzt werden. Wie in anderen Posts scheint es auch zu reichen die Zeile auszukommentieren.

      Antworten
  26. Hallo Franky,

    erstmal wirklich tolle Arbeit die du da machst.
    Ich habe sowohl Monitor als auch Reporter auf einem 2010 Exchange erfolgreich am laufen.

    Auf einem 2012 Windows und 2016 Exchange bekomme ich es aber nicht zum laufen.
    Fehlermeldung:
    Ausnahme beim Aufrufen von „AutodiscoverUrl“ mit 2 Argument(en): „The Autodiscover service couldn’t be located.“

    Läuft es mit EX2016 generell nicht oder mache ich etwas falsch?

    Gruß
    Stefan

    Antworten
  27. Hallo Frank,

    seit langem mail wieder auf den Monitor geschaut und festgestellt das der Mailflow immer noch rot ist.
    Wie kann ich das denn am besten Untersuchen? Also wo es genau hakt?

    Die Mails an die TU gehen nämlich raus und rein…

    Grüße und schönes Wochenende,
    Ben

    Antworten
  28. Hallo Franky,

    ich erhalte folgende Fehlermeldung:

    Starte Exchange Monitor
    Lade Funktionen aus Include-Functions.ps1: Fertig
    Lade Einstellungen aus settings.ini: Fertig
    Lade Exchange WebServices API 2.2: Fertig
    Lade Exchange Snapin:get-itemproperty : Der Pfad „HKLM:\SOFTWARE\Microsoft\ExchangeServer\Setup“ kann nicht gefunden werden, da er nicht vorhanden ist.
    In C:\Exchange Monitor\Scripts\Include-ExchangeSnapins.ps1:63 Zeichen:16
    + $repspath = (get-itemproperty HKLM:\SOFTWARE\Microsoft\ExchangeServer\$version …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (HKLM:\SOFTWARE\…ngeServer\Setup:String) [Get-ItemProperty], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyCommand

    Fehler

    PS C:\Exchange Monitor>

    Muss ich das Script auf dem Exchange Server selbst laufen lassen?

    Antworten
  29. Hallo Frank,
    nicht nur deine Anleitungen zur Migration von Exchange sind genial, sondern auch dein Monitor.
    Also MS nehmt euch mal ein Beispiel.
    Weiter so. :-)

    Danke Frank

    VG
    Lars

    Antworten
  30. Hallo,
    Der Performace Monitor bei Exchange 2010 scheint in Deutsch nicht zu passen:
    #Outstanding RPC
    $RPCReq = (get-counter „\\$Servername\MSExchangeIS\RPC-Anforderungen“).countersamples.CookedValue

    Bringt Fehler und mit Perfom nicht zu finden. Liegt wohl mal wieder an der „eindeutschung“ der Counter.

    Antworten
    • Selber Fehler auch unter Exchange 2016 (mit Windows Server 2016 als OS)
      lodctr /R hat leider nichts gebracht…

      Fehler:

      get-counter : Das angegebene Objekt wurde nicht auf dem Computer gefunden.
      In C:\ExchangeMonitor\Scripts\Get-ExchangePerfData.ps1:27 Zeichen:15
      + … $RPCReq = (get-counter „\\$Servername\MSExchangeIS\RPC-Anforderungen …
      + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      + CategoryInfo : InvalidResult: (:) [Get-Counter], Exception
      + FullyQualifiedErrorId : CounterApiError,Microsoft.PowerShell.Commands.GetCounterCommand

      Antworten
  31. Hi Leute,
    ich hab mal das Tool ausprobiert und bekomme bei „Get-ExchangeTestMail“ immer diese Fehlermeldung:
    “ Sende Testmails…Ausnahme beim Aufrufen von „AutodiscoverUrl“ mit 1 Argument(en): „A valid SMTP address must be specified.“
    In C:\ExchangeMonitor\Scripts\Get-ExchangeTestMail.ps1:7 Zeichen:1
    + $service.AutodiscoverUrl($testmailbox)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ServiceValidationException

    Ausnahme beim Aufrufen von „Bind“ mit 2 Argument(en): „The Url property on the ExchangeService object must be set.“
    In C:\ExchangeMonitor\Scripts\Get-ExchangeTestMail.ps1:8 Zeichen:1
    + $inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,[Microsoft. …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ServiceLocalException“

    Ich hab auch schon die Methode von Ben ausprobiert, aber da bekomme ich die Fehlermeldung mit dem SSL/TLS, obwohl ein Zertifikat installiert ist.
    Außerdem funktioniert der SMS Versand nicht.
    Kann mir da jemand weiter helfen?

    Vielen Dank

    Antworten
  32. Hallo Frank,

    bei mir verschwanden immer wieder im Exchange Monitor 2.1 aus der Rubrik ‚Warteschlangen‘ Server, weil in der HTMLEngine.ps1 nur Server mit Warteschlangen kleiner 7 oder größer 15 eingetragen (Zeile 223 ff) werden.
    Ich habe deshalb noch ein Stufe ‚Warning‘ dazwischen eingefügt, war wahrscheinlich von Dir auch mal so geplant -> nächste Version?

    Vielen Dank für die beiden Super Scripte!

    Antworten
  33. Hallo Frank,
    danke für deine Antwort. Zur Verständnis, warum wird hier ein Zertifikat benötigt, wenn der Befehl direkt auf dem Exchange ausgeführt wird?
    Selbstsegnierte – Zertifikate haben wir lediglich für die Clients ausgestellt.
    Danke und Gruß
    Björn

    Antworten
  34. Hallo Ben, Hallo Frank,
    ich habe auch Probleme mit dem Autodiscover und habe die Lösung von Ben einmal probiert. Problem ist bei mir, dass ich nach der Zeile $inbox … eine Fehlermeldung erhalte. Diese lautet: „Für den gschützten SSL/TLS-Kanal konnte keine Vertrauensstellung hergestellt werden..“

    Frage ist wie kann ich die Vertrauensstellung herstellen?

    Schon einmal Danke im Voraus!
    Gruß
    Björn

    Antworten
    • Hi Björn,
      das Zertifikat wird nicht akzeptiert, sollte sich beheben lassen, wenn das Zertifikat importiert wird, bzw. ein gültiges Zertifikat am Exchange zugewiesen wird.
      Gruß, Frank

      Antworten
  35. Hallo Frank,

    ich habe das Autodiscover Problem mittlerweile Lösen können.
    Ich habe dazu im Get-ExchangeTestmail.ps1 die oberen Lines etwas bearbeitet:

    $service.Credentials = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials(„$testuser“,“$testuserpass“,“$testuserdomain“)
    $service.Url = New-Object URI(„https://myserver.mydomain.local/EWS/exchange.asmx“)

    $inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)

    Wo es bei mir allerdings noch Fehlschlägt ist beim Mailflow… Dazu muss ich sagen ich setze derzeit zwei Exchange Server ein, 1×2010 1×2013.
    Ich sehe aber nur eine Exchange Testmail raus / reingehen… Irgendeine idee? Sonst ignoriere ich das bis zur fertigstellung der migration.

    Ben

    Antworten
  36. Eins noch, gibt es die möglichkeit im HTML Datum + Uhrzeit vom letzten Check anzeigen zu lassen?
    Und evtl. noch andere Infos direkt auf der Hauptseite, anstatt durch klick auf der zweiten Seite?

    Antworten
  37. Hallo Frank,

    vielen dank für dieses Skript! Genial!
    Leider schlägt bei mir auch der Autodiscover fehl, und ich weiß ehrlich gesagt nicht wo ich anfangen muss zu suchen:
    Sende Testmails…Exception calling „AutodiscoverUrl“ with „1“ argument(s): „The Autodiscover service returned an error
    .“
    At C:\Tools\ExchangeMonitor\Scripts\Get-ExchangeTestMail.ps1:7 char:1
    + $service.AutodiscoverUrl($testmailbox)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : AutodiscoverRemoteException

    Alles weitere funktioniert.
    Autodiscover auf meinen Clients läuft problemlos…

    Kann es sein das du die Autodiscover URL via get-AutodiscoverVirtualDirectory abfrägst?
    Die Autodiscover URL liegt doch eigentlich hier: get-clientaccesserver | FL autodiscverserviceinternaluri
    bei letztem steht bei mir auch die korrekte URL drin…

    Grüße
    Ben

    Antworten
    • Hi Ben,

      die Autodiscover URL wird per DNS ermittelt und nicht aus der Exchange Konfiguration gelesen. Du kannst das Script aber auch etwas abwandeln und den Exchange Server ohne Autodiscover ansprechen.
      Gruß, Frank

      Antworten
  38. Hallo Franky

    der Aufruf per Task geht jetzt. Es war der Parameter „InstallPath“ notwendig. Allerdings läuft das Skript dann dauerhaft im Hintergrund und die Häufigkeit, wie oft hier getestet wird und Mails verschickt werden ist mir fas etwas zu hoch.
    Gibt es eine Möglichkeit das anzupassen? So dass z.B. nur einmal in der Stunde geprüft wird oder alle 2 Stunden?

    Grüße
    Sebastian

    Antworten
  39. Hallo Franky

    ich kriege den Monitor per Task nicht zum laufen. Es kommt aber auch kein Fehler. Das Skript läuft wenn man es manuell ausführt ohne Probleme. Ich habe es mit folgendem Aufruf per Task versucht
    Programm: powershell.exe
    Arguments: -command „“
    oder
    Arguments: -command „c:\Exchange Tools\Exchange Monitor\Start-ExchangeMonitor.ps1“

    Wenn ich den Task manuell starte öffnet sich nur kurz das PS Fenster und geht wieder zu. Keine Fehlermeldung.

    Über eine Hilfe wäre ich sehr dankbar ;-)

    Antworten
  40. Dazu noch ein kleiner Vorschlag:

    Die Datenbank-Partitionen sind bei meinen Exchange-Servern nicht über Laufwerksbuchstaben, sondern über NTFS-gemountete Ordner bereitgestellt. Wäre echt schick, wenn das Reporting auch hier die Größe und den verfügbaren Speicherplatz ausgeben könnte.

    Viele Grüße,
    Benjamin

    Antworten
  41. Hallo Frank,

    danke für das sehr hilfreiche Skript. Ich habe jedoch folgende Fehlermeldungen:

    addsinfo.ps1
    Der RPC-Server ist nicht verfügbar
    oabreport.ps1
    Ausnahme beim Aufrufen von „DataBindXY“ mit 2 Argument(en): „Der Wert darf nicht NULL sein.
    Parametername: yValues“

    Hast Du eine Idee, wo der Fehler liegt?

    Danke und Gruß,
    Benjamin

    Antworten
  42. Hi Frank

    Super Sache dieses Script – kannst du mir einen Hinwies geben, wo der Schwellenwert für den Diskspace angepasst werden könnte (nehme an im HTML-Engine unter #Space – aber ist das nun % oder was genau?)?
    Grüsse
    Reto

    Antworten
  43. Nachtrag:
    Wenn man den OAB-Check ausschaltet, dann ist die Tabelle „Postfächer mit Um- oder Weiterleitungen“ unvollständig.

    Antworten
  44. Hallo Frank,

    schon mal vielen Dank für Deine Arbeit!

    Ich hätte darüber hinaus die folgenden Verbesserungsvorschläge:
    1. Kannst Du die aktuelle Uhrzeit und Datum anzeigen? Dann kann man sicher sein, dass die dargestellten Daten aktuell sind. Ich lasse das Skript beim Systemstart über die Aufgabenplanung starten. Wenn das mal nicht klappen sollte, sieht alles grün aus, obwohl es das möglicherweise nicht ist.
    2. Kann man den Punkt SMTP-Gateway ausblenden, wenn dieser in der Konfiguration nicht gesetzt ist?

    Antworten
  45. Hallo,

    ich bekomme beim Ausführen des Scriptes die Meldung das Dienste nicht laufen (laufen aber alle und stehen auch als „Running“ in den csv´s) und noch Meldungen beim import-csv.

    Aktualisiere Website… Fertig

    Verschicke Alarm per SMS:
    – Dienst läuft nicht
    Split : Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen.
    Bei D:\ExchangeMonitor\Scripts\HTMLEngine.ps1:548 Zeichen:32
    + $Dataname = $csvpath.Split <<<< ("\")[4]
    + CategoryInfo : InvalidOperation: (Split:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    import-csv : Das Argument kann nicht an den Parameter "Path" gebunden werden, da es NULL ist.
    Bei D:\ExchangeMonitor\Scripts\HTMLEngine.ps1:559 Zeichen:28
    + $CSVStats = import-csv <<<< $CSVPath -delimiter ";" | sort checkpoint
    + CategoryInfo : InvalidData: (:) [Import-Csv], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ImportCsvCommand

    Split : Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen.
    Bei D:\ExchangeMonitor\Scripts\HTMLEngine.ps1:627 Zeichen:32
    + $Dataname = $csvpath.Split <<<< ("\")[4]
    + CategoryInfo : InvalidOperation: (Split:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    import-csv : Das Argument kann nicht an den Parameter "Path" gebunden werden, da es NULL ist.
    Bei D:\ExchangeMonitor\Scripts\HTMLEngine.ps1:638 Zeichen:28
    + $CSVStats = import-csv <<<< $CSVPath -delimiter ";" | sort checkpoint
    + CategoryInfo : InvalidData: (:) [Import-Csv], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ImportCsvCommand

    Antworten
  46. Hallo,
    ich versuche es auf einem 2008 R2 Server mit installierten Exchange Management Tools zum Laufen zu bringen.
    allerdings erhalte ich beim Laden der Einstellungen aus Settings.ini: „Fehler“.

    An was liegt es?

    Antworten
  47. Nachtrag: logisch, dass es nicht klappt. Ich führe es auf einem Nicht-Exchange-Server aus und muss ja daher erst eine PSSession erstellen, damit ich die EXCH-Powershell-Befehle zur Verfügung habe.
    Das wäre doch auch noch ein cooles Feature, wenn man in der INI-Datei die Namen seiner Exchange-Server angeben könnte und bei Erstausführung wird eine PSSession dorthin etabliert.
    Jetzt scheint es tipptopp zu funktionieren, abgesehen von der SMS-Config, die ich noch anpassen muss.

    Antworten
    • Hallo Paul,
      vielen Dank für dein Feedback. Ich werde eine Routine einbauen die den korrekten EWS Pfad ermittelt. Auf einem „Nicht-Exchange“ Server kannst du auch die Management Tools installieren. Dann funktioniert es auch ohne Remote PS Session. Aber die Idee optional die Exchange Server einzutragen, ist nicht schlecht. Ich denke das werde ich auch umsetzen. Danke noch einmal.

      Gruss, Frank

      Antworten
  48. Hallo Frank

    Ich habe den ExchangeMonitor auf einem Windows Server 2008 R2 mit den erforderlichen SW-Voraussetzungen ausprobiert und bekomme es nicht richtig zum Laufen!

    Folgende zwei Hürden konnte ich überwinden:
    1. Die Meldung, die Jürgen Selz am 17.02.2015 23:06 berichtete, habe ich bei der Ausführung auch bekommen. Der Grund lag darin, dass ich unter -InstallPath schlicht den falschen Pfad angegeben hatte. Ich war drum im Glauben, dass ich einen Zielpfad für zu installierende Dateien angeben muss, dabei ist mit InstallPath offenbar der Pfad zu den Installationsdateien gemeint. Kaum gibt man den richtigen Pfad ein, funktioniert’s aber. ;-)
    2. Beim Ausführen kommt in der Position „Sende Testmails…“ die Powershell-Fehlermeldung „Add-Type : Der Parameter „Path“ kann nicht an das Ziel gebunden werden. Ausnahme beim Festlegen von „Path“: „Der Pfad „C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll“ kann nicht gefunden werden, da er nicht vorhanden ist.“ (–> Get-ExchangeTestMail.ps1 Zeile 3)
    Der Grund dafür ist, dass sich das EWS in den Ordner 2.2 installiert hat, nicht 2.0. Vielleicht sollte man die Existenz des EWS-Install-Ordners im Code ermitteln.

    Nun läuft es zwar prinzipiell, doch die einzigen Daten, die ich zurückbekomme, sind die SMTP-Gateways; bei allen anderen Punkten (wo in dem Beispielscreenshot FWEX1 und FWEX2 stehen) steht bei mir nichts. Enable-psremoting auf beiden Exchange-Servern (Server 2012 mit EXCH2013CU5) ausgeführt.

    Haben Sie eine Idee?

    Vielen Dank und freundliche Grüsse,
    Paul Hahn

    Antworten
  49. Hallo Frank,
    Ein Supertool und nach einigen Anläufen auch schnell einsatzfähig. Danke.
    Hier noch ein paar Anregungen, falls nicht zu spät.
    – Ich erhalte solange das Script läuft Mails mit Zahlen darin. Vieleicht kann man das noch mit Inhalt und Betreff ausfüllen.
    – Interessant als Info sind auch die Anzahl der Postfächer, und welche davon die Größe bald überschreiten.

    Antworten
    • Danke für das Lob, die Mails mit den Zahlen im Betreff dienen dazu den Mailfluss zu testen: Mail mit Betreff 12345678 an echo@tu-berlin.de schicken, beantworten lassen und prüfen ob eine Mail mit „Re: 12345678“ wieder im Postfach landet. Ich verwende für die Mails ein Dienst Postfach und habe eine Policy an dem Postfach, welches alle Elemente die älter als 1 Tag sind löscht. Ich denke in der nächsten Version werde ich aber einbauen, dass die Mails selbst durch das Script gelöscht werden.
      Exchange Reporter liefert eine Übersicht über die Postfächer die nahe dem Sendelimit sind, ich denke mal das sind Werte die man nicht zwingend alle paar Minuten abfragen muss :-)

      Gruß,
      Frank

      Antworten
  50. Hallo Frank,

    versuche den Reporter zu installieren, Server Windows 2012 R2 (kein Exchange Server) + EWS API 2.2.
    Bekomme folgende Fehlermeldung:

    Starte Exchange Monitor
    Lade Funktionen aus Include-Functions.ps1: Fehler

    Viele Grüße

    Juergen

    Antworten
  51. Hallo zusammen,

    sorry ich hatte noch keine Zeit den Tip von Frank zu prüfen, gestern aber :-). Nach Enable-PSRemoting auf den restlichen Exchange Servern funktioniert das Auslesen jetzt. Allerdings habe ich das selbe Problem wie Frank Kabierschke. Auch unser Mailrelay hat ein Problem mit dem Telnet Sequenz. Es sieht so aus also ob nach dem Befehl „data“ so eine Bestätigung fehlt oder möglicherweise einfach eine Pause. Denn sofort nach data folgt die Eingabe des Textes, was unser Mailrelay auch nicht mag.

    Viele Grüße
    André

    Antworten
  52. Hallo Frank,
    dein ExchangeMonitor ist wirklich ein tolle Sache.
    Danke!

    Ich hätte da noch einen Wunsch. Könntest du den Status der Mailboxkopien auf prüfen:
    ob der Status Healthy oder Mounted ist, sowie die CopyQueueLenght < 10 ist
    Get-MailboxServer | Get-MailboxDatabaseCopyStatus

    @ André Winkler: ich hatte das gleiche Problem wie du es beschrieben hast. Prüfe welche Version von Powershell bei dir installiert ist. Das Script benötigt Version 4 der Powershell damit alles richtig funktioniert.

    Ich habe auf einem eigenen Server die Exchange Management Tools installiert, dotNet 4.5 und Powershell 4.0 sowie die EWS API 2.2. Somit läuft das Script auf einem eigenen Server und ich musste auf meinen Produktionsservern nichts Ändern.

    Antworten
  53. Hallo Frank,

    ich erhalte beim Ausführen des Skripts noch Fehlermeldungen und die Ordnerstruktur unter ../exmon/Daten bleibt bis auf den Folder „SMTP“ leer.
    Beim Skript „Get-ExchangeTestMail.ps1“ scheint etwas schief zu laufen:

    >Sende Testmails…Ausnahme beim Aufrufen von „AutodiscoverUrl“ mit 1 Argument(en): „The >Autodiscover service couldn’t be located.“
    >n D:\exmon\Scripts\Get-ExchangeTestMail.ps1:7 Zeichen:1
    >+ $service.AutodiscoverUrl($testmailbox)
    >+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    > + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    > + FullyQualifiedErrorId : AutodiscoverLocalException
    >
    >Ausnahme beim Aufrufen von „Bind“ mit 2 Argument(en): „The Url property on the >ExchangeService object must be set.“
    >In D:\exmon\Scripts\Get-ExchangeTestMail.ps1:8 Zeichen:1
    >+ $inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,[Microsoft. …
    >+ >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>~~~~~~~~~~
    > + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    > + FullyQualifiedErrorId : ServiceLocalException

    Ich komme nur nicht dahinter, wo der Ansatz zu suchen ist.

    Ebenso wird meine AntiSpamRelay immer mit Fehler angezeigt, hier scheint die SMTP-Sequenz nicht zu stimmen (?): Das Relay nimmt aber sehr wohl eMails an (sonst hätte ich hier schon längst einen Riesenärger ;).

    >220 This is checkmate.precon.de. May I take your order, please?
    >500 5.5.4 Need sender domain
    >503 5.5.1 Bad sequence of commands
    >503 5.5.1 Bad sequence of commands
    >503 5.5.1 Bad sequence of commands
    >502 5.5.1 Command not implemented
    >502 5.5.1 Command not implemented
    >502 5.5.1 Command not implemented
    >221 2.0.0 Service closing transmission channel

    Ich würde mich über ein paar Ideen zur Lösungsfindung sehr freuen.

    Merci – viele Grüße
    Frank

    Antworten
    • Hallo Frank,

      beim ersten Problem, kann Autodiscover nicht aufgelöst werden, fehlen da vielleicht entsprechende DNS-Einträge?
      Das zweite Problem schaue ich mir noch einmal an, ich habe da schon eine Idee.
      Gruß, Frank

      Antworten
      • Hallo Frank,

        das Thema ist ja schon etwas älter. Ich versuche es aber auch gerade zu implementieren und bekomme die selbe Fehlermeldung. Autodiscover ist korrekt konfiguriert und die URL’s werde auch ausgeliefert.

        Gibt es hierzu eigentlich eine Lösung ?

        Weiterhin ist in der Default Konfig Datei ja ein Echo Eintrag. TU-Berlin hat diesen Dienst in 2018 eingestellt. Nach Recherchen habe ich jetzt mal „echo@univie.ac.at“ eingetragen, das scheint zu funktionieren.

        Gruß Stefan

        Antworten
  54. Hallo Frank,

    das Script ist, wie der Reporter auch, super. Bei meiner Testumgebung funktioniert es auch wunderbar, da habe ich nur 1 einzelnen Exchange 2013 auf 2012R2. In einer anderen Umgebung mit 3 Exchange 2010 Servern unter 2008R2 läuft das Script zwar auch, allerdings werden mir von den einzelnen Servern keine Daten angezeigt. Beim Aufruf der entsprechenden HTML-Dateien erscheint lediglich Exchange Dienst nicht gestartet.

    Liegt das daran das ich mehrere Exchange Server verwende?

    Antworten
    • Hallo André,
      ich habe das Script ebenfalls immer mit mehreren Exchange Servern getestet (bis zu 8). Schau mal nach ob du auf allen Servern „enable-psremoting“ ausgeführt hast.

      Gruss, Frank

      Antworten
  55. Hi, ist es auch möglich, das Skript von einem Server 2008 R2 aus zu starten?
    hab einen Exchange 2010 auf 2008 R2. Leider findet er den Pfad für die Exchange.webservices.dll nicht. Gibt’s den auf dem 2008 nicht?

    Antworten
  56. Ich bekomms nicht zum Laufen, ebenso den Exchange Reporter nicht… bekomme aber keine Fehlermeldung. Gibt es noch irgendwelche Stolperfallen? Ich teste das Ganze an einem Server 2008 R2 mit Exchange 2013. Mir ist aufgefallen, dass die Anordnung der Anführungszeichen (einfach/zweifach) im Optionsstring für den Task Scheduler in den Anleitungen der beiden Programme unterschiedlich ist, obwohl der Optionsstring in etwa gleich aufgebaut ist – ist das korrekt?

    Antworten

Schreibe einen Kommentar