Get-Unusedrecipients

Die Funktion, dass ein Empfänger in Exchange mehrere Mailadressen haben kann, ist ganz nützlich. Schließlich gibt es schon mal die ein oder andere NamensÄnderung durch Heirat und Scheidung oder der Firmenname ändert sich auf einen Schlag. Über die ProxyAddresses können so mehrere Adressen dem gleichen Empfänger zugewiesen werden. Nur beim Versand nutzt Exchange natürlich die "primäre" Adresse der Person.

Normalerweise "kosten" dieses zusätzlichen Einträge auch nicht viel. Der Speicherbedarf dafür ist pro Benutzer eher in Bytes denn in Kilobytes zu bemessen und solange sich nicht viel ändert, wird auch nicht viel repliziert. Einzig das Offline Addressbuch wird natürlich etwas größer.

Aber wäre es nicht doch interessant einmal zu wissen, welche Mailadressen wann zuletzt genutzt wurden? Gerade nach einer Migration ist dies nach einiger Zeit ein gutes Kriterium all die Absender zu finden, die immer noch die "alte" Adresse verwenden, seien es automatisierte Sender, Mailinglisten oder andere Systeme. Der normale Mitarbeiter bemerkt so eine Falschadressierung mit einer alten Adresse oft gar nicht, da die Mails ja doch ankommen.

Altlasten und Leichen erkennen

Viel interessanter sind natürlich Postfächer, die schon lange keine Mail mehr bekommen oder noch länger keine Mail selbst versendet haben. Das sind dann doch Kandidaten, die man genauer betrachtet werden sollten. Nicht dass dort Mails "unbeantwortet" liegen oder Lizenzen und Ressourcen belegt werden, die schon lange überfällig sind. Aus diesem Grund ist das Skript "Get-UnusedRecipient" entstanden, welches das Messagetracking als Maßstab nimmt, und jede empfangene und gesendete Mail daraufhin überprüft, ob der Empfänger intern oder der Sender intern ist.

Damit das sauber funktioniert, liest das Skript zuerst alle Empfänger mit "Get-Recipient" aus und sammelt so alle "internen" Mailadressen ein und ordnet dies einer Identität zu.

CSV Auswertung

Die Ausgabe des Skripts ist einer CSV-Datei in der jeder Empfänger eine Zeile darstellt und in der die Spalten folgende Inhalte haben:

  1. smtp
    Dies ist die primäre SMTP-Adresse des internen Objekts und dienst als primärer Schlüssel
  2. type
    Dieses Feld kennzeichnet den Typ des Objekts und kann z.B. UserMailbox, MailUniversalSecurityGroup etc. sein. Es entspricht der "RecipientType"-Ausgabe von Get-Recipient
  3. send
    Hier steht der Zeitstempel der aktuellsten Mail, die von diesem Objekt versendet wurde. Dies ist ein guter Indikator, ob und wann dieses Konto überhaupt noch aktiv war. Allerdings sollten Sie genau den Absender kontrollieren, das es durchaus Empfänger gibt, die nie was senden. Hier sollten Sie nicht vorschnell ein Objekt löschen.
  4. receive
    Dies ist der Zeitpunkt, wann das letzte Mal eine Mail an diesen Empfänger zugestellt wurde. Sie können damit zumindest die Konten erkennen, die schon länger nichts mehr lesen mussten. Allerdings ist dies keine Garantie, dass dieses Postfach nicht doch irgendwann wieder benötigt wird.

Sollte ein Objekt in dem Auswertezeitraum keine Mail sendet oder empfangen haben, dann ist das Darum auf den 1.1.2000 gestellt. Stellen Sie unbedingt sicher, dass Sie "genug" Messagetracking-Logs ausgewertet haben, damit die Zahlen auch belastbar sind.

Skript-Einsatz

Das Skript nutzt die Exchange PowerShell. Sie sollten es in einem leeren Verzeichnis ablegen und als Exchange Administrator starten. Das Skript durchläuft ohne weitere Parameter folgende Stufen:

  1. Einsammeln aller Empfänger
    Die Liste der SMTP-Adressen und dazu gehörigen Empfänger wird in zwei Hashn-Tabelle gespeichert. Eine Tabelle enthält das Objekt anhand seiner primären SMTP-Adresse währen die zweite Tabelle für jede Mailadresse einen Eintrag hat, der auf die primäre Adresse verweist.
  2. Einsammeln der HubTransort-Server
    Dann sucht das Skript mit "Get-Transportserver" sich alle Hub/Transport-Server der Organisation
    Von diesen Servern wird das Messagetracking ausgewertet
  3. Parsen des Messagetracking
    Sequentiell wird jede Mail im Messagetracking durchgearbeitet und der Absender als auch die Empfänger gegen die Hashtabelle der internen Empfänger geprüft. Wurde eine Übereinstimmung gefunden, dann werden die Daten in der Hashtabelle entsprechend aktualisiert
  4. Output generieren
    Am Ende wird die Zusammenfassung als CSV-Datei herausgeschrieben. Die Datei enthält für jeden Empfänger das Datum, wann er das letzte Mal als Ziel bzw. Absender genutzt wurde.

Das Skript beschränkt sich auf das Exchange Objekt alleine und nicht auf jede einzelne Proxyaddresse.

Download und Aufruf

Das Skript benötigt keine Parameter und startet in jeder Exchange PowerShell.

get-unusedrecipient.1.0.ps1.txt

Weitere Links