Get-RCALog
Auf der Seite CAS-Logging habe ich ausgeführt, dass Exchange 2010 mittlerweile auf jedem CAS-Server auch ein Logfile anlegt, welches Zugriffe von Clients protokolliert. Es enthält zwar nicht jede einzelne MAPI-Aktion aber Anmeldungen, Zugriffe auf Stellvertreter und ein paar andere Aktionen sind schon erkennbar. für mich hat dieses Log noch eine andere positive Eigenschaft: Es protokolliert auch die Version des Outlook Clients und erlaubt mir so auch ohne Softwareverteilung und Inventarisierung einen Überblick, welcher Client welche Outlook-Version einsetzt. Das ist insbesondere vor Updates z.B. nach Exchange 2013 oder auch Exchange 2010 SP3 wichtig. Besonders ältere Versionen haben bekannte Probleme und die lassen sich so zuverlässig erkennen.
Leider liefern die RCALogs per Default keine Information über den PC selbst (PC-Name, IP-Adresse, MAC-Adresse o.ä.) sondern man sieht nur den LegacyExchangeDN des Users. Damit bleibt eine Unschärfe, dass …
- Anwender, die auf zwei
Geräten arbeiten, mehrfach
auftreten
Hier wird nur der letzte Eintrag protokolliert. Ein eventuell älteres oder neueres Zeitgerät, das länger nicht genutzt wurde, bleibt unentdeckt. - Outlooks die gerade
aktualisiert wurden, mit dem
alten und neuen Version
auftreten
Die früheren Versionen altern aber nach und nach heraus. - Keine Garantie auf
Vollständigkeit gegeben ist
Wenn ein PC aus ist und sich nicht meldet, wird er nicht erfasst. Es ist also nur eine „Näherung“.
Da ich aber diese Unmengen an 10 MB großen Textdateien nicht manuell durch parsen will, habe ich mit ein PowerShell-Skript entwickelt, welches die wichtigen Daten extrahiert. Da in der Datei nur der LegacyExchangeDN des Client steht, habe ich noch etwas Code addiert, um die dazu passende Mailbox und Mailadresse zu ermitteln.
Funktionsweise
Das PowerShell-Skript wird komplett per Parameter gesteuert und erwartet entweder eine Datei mit Pfadangabe oder eine Liste von CAS-Servern mit einem relativen Pfad. Das Skript liest dann die Datei oder Dateien ein. Der Dateiname enthält das Datum und über den Parameter maxdays kann ich die Suche auf die letzten angegebenen Tage beschränken. Das Skript wertet dazu den Wert „LastWriteDate“ der Datei aus. Bedenken Sie aber, dass Sie nur die Client später in der Auswertung sehen, die in der fraglichen Zeit auch zugegriffen haben.
- AD-Import
Zuerst lädt das Skript erst mal alle Benutzer aus dem Active Directory, die eine Mailadresse und einen LegacyExchangeDN haben und speichert sich dazu den SamAccountName, den DN und das Feld "Mail". - File Parsing
Dann werden alle Dateien nacheinander mit Import-CSV eingelesen. Das Skript ermittelt aus jeder Zeile den Benutzer, die Outlook-Version, CachedMode und speichert den jeweils aktuellsten Eintrag in einer Hashtable. - Export
Am Ende werden die gesammelten Daten in einer CSV-Datei zur weiteren Auswertung ausgegeben
Das Skript ist relativ überschaubar und einfach. ich habe damit schon mehrere Millionen-Zeilen verarbeitet aber sie sollten bedenken, dass eine große Datenmenge durchaus auch einmal einige Stunden benötigen kann. Auch der Export der Ergebnisse in der Hashtabelle als CSV-Datei kann einige Minuten dauern.
Parameter
Das Skript nutzt per Default folgende Parameter:
$rcafiles = "\\cas1\c$\Program Files\Microsoft\Exchange Server\V14\Logging\RPC Client Access\RCA_20120203-1.LOG", $csvfile = ".\outlookversion.csv", $casserverlist = "", $caspath = "c$\Program Files\Microsoft\Exchange Server\V14\Logging\RPC Client Access\RCA*.log", $maxdays = 5
Diese müssen Sie natürlich anpassen. Sie können entweder über den Parameter "$rcafiles" direkt eine Datei Datei angeben oder sie füllen den Parameter "casserverlist" und geben optional den Pfad "$caspath" an, damit die Zugriffe über den zusammengesetzten Pfad funktionieren. Der ausführende Benutzer muss natürlich die Dateien lesen können.
CSV-Datei
Am Ende ging es eine CSV-Datei aus, die man mit Excel auswerten kann. Hier zwei exemplarische Zeilen mit Überschrift:
client-name,client-software,client-software-version,client-mode,lastseen,mail,distinguishedname,SamAccountName,dnsdomain
/o=Org/ou=Ex../cn=User1,OUTLOOK.EXE,14.0.6126.5000,Cached,01/31/2013
11:41:45,User1@msxfaq.de,"CN=User1,DC=msxfaq,DC=net",User1,msxfaq
/o=Org/ou=Ex../cn=User2,OUTLOOK.EXE,14.0.6126.5000,Cached,02/01/2013
23:45:35,User2@msxfaq.de,""CN=User1,DC=msxfaq,DC=net",User2,msxfaq
Interessanter ist natürlich die Auswertung mit Excel. Die Datei kann einfach geöffnet werden und über die Funktion "Text in Spalten" können Sie einfach die Felder am "Komma" als Trennzeichen auftrennen. Dann benötigen Sie nur noch eine Pivot-Tabelle und schon haben Sie alle Outlook Versionen und die Anzahl:
So kann ich z.B. schnell erkennen, welche Outlook Versionen im Einsatz ist. Natürlich können Sie auch nach der DNS-Domäne filtern und gruppieren, um z.B. die Version auf Ländergesellschaften zu unterscheiden etc.
Download
Dieses Skript ist aktuell noch kein öffentlich verfügbarer Download. Wenn Sie das Skript gerne ausprobieren wollen und mir Feedback geben, dann sende ich es ihnen gerne zu
Weitere Link
- Forensik
- CAS-Logging
- Get-RCALog
-
Use PowerShell to Determine what
Outlook Client Versions are
accessing your Exchange Servers
http://mikefrobbins.com/2014/09/18/use-powershell-to-determine-what-outlook-client-versions-are-accessing-your-exchange-servers/ -
Get-ConnectionByClientTypeReport
https://technet.microsoft.com/de-de/library/jj873753(v=exchg.160).aspx
In Exchange Online bleibt nur diese Option, da Sie keinen direkten Zugriff auf die RCALogs haben.