Die Idee
Wichtig sind an dieser Stelle folgende Informationen:
- Das Logging ist nicht standardmäßig aktiv
- Das Logging muss pro Mailbox aktiviert werden.
- Ein aktiviertes Logging wird sehr viele Logdaten pro Mailbox sammeln.
- Daher wird ein aktiviertes Logging vom Exchange Server nach 72 Stunden automatisch deaktiviert.
- Das Logfile liegt als Fließtext vor und kann über die PowerShell abgefragt werden.
So schaut es im Normalfall aus. Das Logging ist deaktiviert:
Mit der PowerShell kann das Logging aktiviert werden. Der Zustand wird in meinem Exchange Server aber nicht korrekt dargestellt:
Nach der Aktivierung kann dann das Problemgerät erneut synchronisiert werden. Das Ergebnis kann mit der PowerShell abgefragt werden. Bei der Abfrage wird der Schalter -GetMailboxLog benötigt. Damit wird die zusätzliche EigenschaftMailboxLogReport ausgelesen:
Das MailboxLog ist ein Fließtext. Hier habe ich den Text mal zur Analyse extrahiert. Die einzelnen Verbindungen zwischen dem Device und dem Exchange Server sind als Log Entry aufgezeichnet. In jedem Log Entry gibt es dann mehrere Attribute mit Werten. Die Attribute habe ich mal farblich markiert:
Durch diese Darstellung wird deutlich, wie ActiveSync funktioniert:
- Der Clients schickt einen Request (RequestBody) zum Server. Darin ist auch eine Authentifizierung (im RequestHeader) enthalten.
- Der Server prüft die Authentifizierung (AccessState, AccessStateReason) und senden eine Antwort (ResponseHeader, ResponseBody) zum Client.
Dazu kann ein Mailboxbenutzer durchaus mehrere ActiveSync-Devices mit seiner Mailbox verbunden haben. Die Logfiles werden pro Device gespeichert. Ohne Angabe des Devices werden also die Logdaten mehrerer Devices miteinander vermischt. Vorab muss also das ggf. passende Device gesucht werden.
Der Text im Logfile folgt einer gewissen Struktur. Meine PowerShell-Funktion parst diese Struktur und erstellt daraus ein PowerShell-Object. Dieses lässt sich wie gewohnt filtern, sortieren bzw. weiterverarbeiten. Dazu habe ich verschiedene Ausgabeoptionen, wie eine optimierte Tabellenausgabe und eine GridView-Ausgabe integriert. Und eine Suche für das ActiveSync-Device ist natürlich auch dabei.
Wie gewohnt sind im oberen Teil des Scriptes die Arbeitsfunktionen enthalten. Meine Funktion “verbinde-MX” stellt die Verbindung zum Exchange Server her. Im unteren Teil habe ich einige Beispielaufrufe abgelegt. Und natürlich ist auch die Aktivierung des Loggings mit dabei:
Anwendung des Scriptes
- Findet meine Funktion kein Device, wird einfach eine Fehlermeldung zurückgegeben.
- Wird nur ein Device gefunden, dann wird für dieses Device direkt die Ausgabe des Logfiles angezeigt.
- Sind mehrere Devices registriert, dann wird über ein GridView die Device-Abfrage gestartet. Es sind hier ein oder mehrere Devices möglich. Die Informationen zum Auffinden des richtigen Devices werden natürlich mit angezeigt:
Danach wird das geparste Logfile im Listenformat ausgegeben. Man erkennt sehr schön die einzelnen Bestandteile aus dem Logfile. Links sind die Attribute und rechts deren Werte notiert. Je Log-Entry wird ein Object ausgegeben:
Die Daten können z.B. mit Where-Object oder Export-CSV über die Pipeline einfach weiterverarbeitet werden.
Achtung: Diese Ausgabeform kann nicht mehr mit der Pipeline weiterverarbeitet werden!
Hier könnt ihr euch die Funktion in einem PowerShell-Script herunterladen: ActiveSyncDebugLogging.zip. Und wie gewohnt stelle ich diesen Artikel auch wieder als PDF-Datei bereit: ActiveSyncDebugLogging.pdf
Stay tuned!