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 undneuen 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