Add-TargetMailbox

Zu dieser Seite sind TargetAddress, und Schattenpostfachmigration thematisch verwandt.

Vielleicht haben Sie schon die Beschreibung Schattenpostfachmigration gelesen, welche eine Migration aus einem Quellsystem nach Exchange beschreibt, wobei in Exchange von Anfang an echte Postfächer genutzt werden, die mit Hilfe der TargetAddress in das Zielpostfach weiter geleitet werden. Das PowerShell-Skript "Add-TargetMailbox" unterstützt nun bei der Anlage dieser Postfächer, indem es eine Liste (CSV-Datei) über die Pipe akzeptiert und die Postfächer entsprechend anlegt.

Funktionsweise

Für die Migration werden Postfächer im Ziel benötigt, die direkt eine Weiterleitung in das alte System erlauben. Damit die funktioniert, müssen drei Dinge erfüllt sein:

  • Eingehendes Routing
    Mails an die bereits migrierten Benutzer müssen auch in Exchange landen. Das kann man über Weiterleitungen des Altsystems an Exchange oder über einen generelle Posteingang über Exchange erreichen
  • Ausgehendes Routing
    Exchange muss externe Mails korrekt in das Internet als auch Mails an nicht migrierte Benutzer an das Altsystem senden können. Entsprechend ist das Routing über Send-Connectoren/SMTP-Connectoren einzurichten.
  • Weiterleitung des Postfachs
    Es muss im Active Directory einen Benutzer mit Exchange Postfach gehen, der neben den üblichen Inhalten in den Feldern ProxyAddresses, Mail etc. auch noch die richtige TargetAddress hat.

Das Skript hilft nun dabei, indem es aus einer Liste die Empfänger erhält und für all die Objekte, für die es in Exchange noch keinen Empfänger gibt, die erforderlichen Maßnahmen ergreift. Dabei muss das Skript natürlich Rücksicht auf die Umgebung nehmen. So muss es zuverlässig erkennen, wenn das Postfach schon irgendwo existiert, es vielleicht schon einen Kontakt mit der gleichen Adresse gibt oder nur ein bestehendes Active Directory Konto um die Postfacheigenschaften zu erweitern ist. fehlende Objekte muss das Skript entsprechend anlegen.

Flussdiagramm

Das Skript wurde von mir bei Kunden eingesetzt und hat nach einigen Anpassungen klaglos seinen Dienst verrichtet. Allerdings lohnt sich der Aufwand nur, wenn sehr viele Mailboxen anzulegen sind. Erweiterungen auf mehrere Domains und Datenbanken sind in sehr großen Umgebungen noch erforderlich. für "kleine Firmen" ist es unterm Strich einfacher, einfach die Postfächer manuell einzurichten und auf eine lange Koexistenz zu verzichten.

Anpassungen

Achtung:
Das Skript ist kein Download, weil es umfangreiche Anpassungen an die ZielUmgebung benötigt.

Die Anpassungen fangen mit den Konstanten an:

	[string]$TargetDC="E2007"
	[string]$domain = "dc=e2k7,dc=msxfaq,dc=net"
	[string]$TargetOU = "ou=add-targetaddress,$domain"  # new objects
	[string]$TargetDB = "E2007\First Storage Group\Mailbox Database"  # default mailboxdb
	[string]$defaultPassword = "StartPassword!"

Das Skript sollte immer genau einen DC ansprechen, damit alle Änderungen der verschiedenen Schritte immer auf dem Server erfolgen. Auch muss man eine TargetOU für neu anzulegenden Platzhalterbenutzer und eine Default Datenbank für neue Postfächer vorgeben. Neue Benutzer müssen "aktiv" sein, damit Exchange diese aktivieren kann. Das Startkennwort muss entsprechend vorgegeben werden.

Aber das ist nur der einfache Teil. Im Code selbst gibt es zwei Bereiche die zu ändern sind:

  • Programmlogik
    Per Default nutzt das Programm den vorderen Teil der Mailadresse, um daraus den SamAccountName, den CN und den Namen abzuleiten und auch danach zu suchen. Das passt sicher nicht in allen Umgebungen und muss daher abgewandelt werden. Zudem können die Felder in dem übergebenen Objekt komplett anders heißen.
  • Feldzuweisungen
    In der Quelle befinden sich vielleicht noch Zusatzinformationen wie Telefonnummer, Faxnummer, Abteilung etc, die in dem Zuge mit importiert werden können.

Dabei handelt es sich aber immer um das gleiche Active Directory, welches die Benutzer vielleicht schon zur Anmeldung nutzen. Es wäre sicher nicht gut, wenn durch einen Fehler deren Kennwort zurückgesetzt wird, ein zweiter Benutzer angelegt wird oder eine bestehende Mailbox bereits migrierter Benutzer wieder auf "Weiterleitung" gestellt würde. Daher ist mir einfach zu gefährlich, dieses Skript zum freien Download bereit zu stellen und hinterher beschimpft zu werden.

Inbetriebnahme

Schrittweises Vorgehen:
Bitte starten Sie das Skript nicht ohne die einzelnen Voraussetzungen umgesetzt und geprüft zu haben.

Bei falscher Anwendung kann das Skript mehr Schaden anrichten als nützlich sein. Ich habe mir dazu folgende Checkliste angelegt:

Prüfpunkt erledigt
  • Exchange ausgehendes Routing anpassen
    Es muss möglich sein, dass man aus Exchange heraus sowohl in das Internet als auch an die später verwendeten Zieladressen (TargetAddress) einer Mail senden kann. Es darf keine Schleifen geben

 

  • Skript anpassen
    Passen Sie das Skript an, dass die Zielparameter korrekt sind. Legen Sie eine eventuell erforderliche TargetOU oder Datenbank an.

 

  • Testbenutzer einrichten
    Legen Sie auf dem Quellsystem ein Testpostfach1 an, welches einen aktiven Quellbenutzer abbilden soll.
    Legen Sie auf dem Quellsystem ein Testpostfach2 an, welches einen aktiven Quellbenutzer abbilden soll und zu dem es schon ein Konto im Active Directory gibt.

 

  • erster Durchlauf
    Generieren Sie die Liste der Anwender, die auch die Testbenutzer enthalten soll und entfernen Sie alle anderen Benutzer aus der Liste. Starten Sie dann Add-TargetMailbox mit dieser reduzierten Listen.
    Erwartet wird dass der Testbenutzer1 "neu" angelegt wird und der Testbenutzer2 ein Postfach addiert bekommt. Andere Benutzer dürfen nicht angepasst werden.

 

  • Migration und Routingtests
    Sie können nun testen, ob sie Inhalte in die leere vorbereitete Mailbox kopieren können. Diese dürfen nicht weiter geleitet werden.
    Eine Testmail an die Exchange Mailboxen muss aber in das alte System weiter geleitet werden.
    Damit ist die prinzipielle Funktionsweise bewiesen.

 

  • Alle User anlegen
    Lassen Sie nun das Skript alle Benutzer anlegen. Damit tauchen alle Empfänger in der GAL auf und müssen die passenden Adressen haben. Mails an diese Benutzer müssen an das Quellsystem übertragen werden.

 

  • Verteiler
    Wenn Sie im bisherigen System mit Verteilern gearbeitet haben, dann ist es nun an der Zeit auch im neuen System diese Verteiler anzulegen. Nutzen Sie als Empfänger einfach die nun existierenden Postfächer.

 

  • Eingehendes Routing
    Wenn Sie sicher sind, dass alle Postfächer und Mailadressen in Exchange angelegt und mit einer Weiterleitung versehen sind. dann ist es nun an der Zeit das eingehende Routing umzustellen. Exchange "kennt" ja nun alle Empfänger.

 

  • Migration
    Nun kann Postfach für Postfach nach Exchange umgestellt werden, indem man in Exchange die Weiterleitung entfernt (TargetAddress löschen) und dann in der Quelle eine Weiterleitung an Exchange einrichtet und die Inhalte migriert.
    Denkbar ist auch, dass man in einem ersten Durchlauf erst ältere Mails migriert um am Stichtag dann alle Postfächer auf einmal umzustellen und dann die letzten Änderungen nachmigriert.

 

  • Abschluss
    Am Ende sollte es keine Postfächer mehr mit einer "TargetAddress" geben und sie können das Altsystem deinstallieren.

 

Das Skript ist wirklich nur für einen einmaligen Durchlauf vorgesehen. Vermeiden Sie daher, dass Sie nach der Durchführung in der Quelle noch neue Postfächer anlegen. Es ist zwar problemlos möglich, durch weitere Durchläufe auch diese neu angelegten Postfächer zu übertragen, aber sinnvoller ist hier die direkte Anlage neuer Anwender in Exchange.

Fehler und deren Auswirkungen

Das Skript hat eigentlich keine umfangreiche Fehlerbehandlung, sondern Sie müssen schon selbst die Fehler nachkontrollieren. Passieren kann:

  • Deaktivierte Konten
    Wenn es bereits ein passendes Zielkonto gibt, dann versucht das Skript diese mit "Enable-Mailbox" mit einem Postfach zu versehen. Leider funktioniert das nicht, wenn das Konto deaktiviert ist. Einfach aktivieren und noch mal ausführen.
  • Ungültige Feldinhalte
    Wenn Sie an das Skript Informationen wie Telefonnummer etc. übergeben, und dieses Feld "leer" ist, dann versucht das Skript eben "nichts" zu schreiben, was ADSI natürlich nicht mag und einen Fehler wirft. Das gilt auch, wenn die SMTP-Adresse natürlich von der Form her nicht gültig ist.
  • SMTP-Konflikt
    Das Skript prüft, ob die SMTP-Adresse schon bei einem Objekt vorhanden ist (ProxyAddresses und TargetAddress). Konflikte werden natürlich ermittelt und gemeldet. Wenn es kein Postfach ist, dann wird der Eintrag übersprungen, aber sie müssen überlegen, wie sie "Platz" für das Postfach schaffen. Ein Postfach wird hingegen dann ohne Warnung übersprungen.

Das Skript ist eigentlich für den "einmaligen" Durchlauf gedacht, auch wenn man es sicher auch automatisiert periodisch starten kann. Allerdings ist umsicht und viel Verständnis für die Funktion erforderlich.

Weitere Links