Ich hatte bisher noch keine Gelegenheit mir das Move-Mailbox cmdlet in Exchange 2007 SP1 genauer anzusehen. Wie viele andere habe ich mich bei Migratinen ein gefühltes Jahrhundert mit Exmerge herumgeschlagen und Stunden damit verbracht an den Berechtigungen auf dem Store zu drehen (denys rauszunehmen …) oder Probleme mit der Sprache gehabt. Einmal musste ich einen inplace Upgrade eines Servers machen und hatte dabei übersehen,
dass die Mailbox des Obercontrollers knappe 4Gb hatte. Nun, Exmerge hat natürlich nur die Hälfte ausgespuckt und so hatte ich am Montag Morgen nach der Migration den ein oder anderen allzu verständnisvollen und freundlichen Wortwechsel. Dieser nette Kunde war einer von der Sorte, an denen unser Siegmund seine helle Freud(e) gehabt hätte. (Ich möchte an dieser Stelle nicht unerwähnt lassen, dass sein Userpasswort den Vornamen seiner Mutter beinhaltete).
Nun, die Geschichte ging trotzdem gut aus, die Jungs hatten glücklicherweise ein Brick-Level Backup und so bekam mein neuer Freund seine Mails zurück und war nicht mehr ganz so böse auf mich.
Heute ist das ganz anders: Move-Mailbox ist eine tolle Sache. Ich bereite gerade für einen Kunden ein Skript vor, dass per Move-Mailbox aus einem fremden Forest (fremde ORG) Mailboxen herzaubert. Das geht tatsächlich so problemlos, dass man in Verzückung geraten könnte – denkt man an die vielen Nerven, die man früher gelassen hatte. Mein Skript liest die Usernamen aus einer CSV und moved diese dann multithreaded. Das Problem ist ja, man kann nicht einfach eine Batch bauen, die ungefähr so aussieht:
move-mailbox userA …..
move-mailbox userB …..
In diesem Fall würde userA gemoved und wenn die Mailbox im neuen System ist, wird die Mailbox von userB gemoved – was keiner, der darauf warten muss gut finden kann. Um es also “multithreaded” zu machen, geht man so vor:
$users = $csvFile | foreach {$_.user} | get-mailbox -domaincontroller $sourceGC -credential $sc
in $csvFile haben wir zuvor unser CSV file importiert (imort-csv). Im CSV steht in der Überschrift “User”. Darunter alle usernamen, die gemoved werden sollen. Weil die Überschrift “User” heisst, müssen wir in der foreach-Schleife darauf verweisen ($_.user). So, jetzt brauchen wir noch die Mailbox-Objekte. Es hat eine Weile gedauert, bis ich herausfand, dass man get-mailbox auch für eine fremde ORG verwenden kann wenn man DC und Credentials dafür angibt.
Tja, und nun kann der multithreaded move losgehen:
$users | get-mailbox
(Hinter get-mailbox muss noch der source forest, target forest und die entsprechenden credentials angegeben werden.)
Übrigens, move-mailbox setzt sogar die x500 Adresse im Zielsystem und verhindert so z.B., dass Replys auf alte Mails – nach der Migration nicht ankommen.
0 Kommentare:
Kommentar veröffentlichen