Exchange – Zusammenführen von zwei Postfächern

 in Microsoft Windows

Es sollten zwei Postfächer (Mailboxen) zusammengeführt/zusammengelegt werden. Historisch bedingt hatte mein Kunde vor der großen Zusammenführung von zwei Unternehmen bereits einigen Anwendern einen Windows Account auf der Zielumgebung angelegt.

Mit der Anlage dieser User, wurde gleichzeitig eine Mailbox erstellt, die dann auch nach den EmailAddressPolicys die „Vorname.Nachname@Domain.de“ bekam.



Irgendwann kam der große Zusammenschluss und somit auch die neue Struktur im Active Directory, die gleichzeitig neue Accountnamen für jeden Mitarbeiter mit sich brachte. Jeder neue Account bekam ebenfalls ein Postfach. Die Mailadresse mit „Vorname.Nachname@Domain.de“ war allerdings bereits an den bestehenden Account vergeben, so dass das neue Postfach einfach die „Vorname.Nachname2@Domain.de“ als primäre E-Mailadresse bekam.

Der Anwender selbst hat also nun zwei Accounts und versendet mit seinem primären nun aber als „Vorname.Nachname2@Domain.de“. Das ist auf Dauer unschön! Anders hat man es jedoch nicht lösen können, da es einige Abhängigkeiten gab.

Herausgekommen ist ein kleines Script, das beide Mailboxen zusammenlegt. Es wird aus dem ersten Account ein Export als PST gemacht und diese PST Datei zentral gespeichert. Hierbei wartet das Script auch auf den Status „Complete“ von dem Exchange.

Die PST wird in den Zielaccount importiert. Gleichzeitig wird die, man nannte sie bei dem Kunden immer, die schöne E-Mailadresse „Vorname.Nachname@Domain.de“, also ohne eine 2, auf den finalen Account übernommen und für den bestehenden Account wird eine Zufallsadresse (Random) vergeben. Nach der Übernahme der X500 Adresse (LegacyExchangeDN) wird das Postfach von dem alten Account deaktiviert.

Das Ergebnis ist ein E-Mailpostfach, das nun eine 1:1 Kopie in einem Unterordner bereitliegt und der finale Account nun auch die Mailaliase primär „Vorname.Nachname@Domain.de“ und die „Vorname.Nachname2@Domain.de“ als sekundäre besitzt. Somit gehen keine E-Mails verloren, denn schließlich wurden schon unter der nicht schönen :) E-Mailadresse Mails an externe Kunden versandt.

Für die Massenzusammenführung reicht eine CSV Datei mit den Titeln „Sam1“ und „Sam2“. Wobei Sam1, der finale Account ist und Sam2 der, dessen Mails übernommen werden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
###########################################################
##    		 Exchange Mailbox Zusammenführen	 ##
##            (c) 2019 by Patrick Boschert               ##
###########################################################
 
#Import CSV mit Identifies "Samaccountname"
$Users = Import-Csv C:\TEMP\Users.csv -Delimiter ";"
 
 
$Users | foreach {
 
#Vergabe einer Random Adresse
$RandomNum = Get-Random -Minimum 100 -Maximum 999
 
#Auslesen der Daten für den zu migrierenden Account
$Mailbox2 = Get-Mailbox -Identity $_.Sam2
$Mailbox2SMTP = $Mailbox2.DistinguishedName
$Mailbox2Primary = $Mailbox2.PrimarySmtpAddress.Address
$Mailbox2X500 = $Mailbox2.legacyExchangeDN
$X500Address = "X500:" + $Mailbox2X500
$RandomX500 = $Mailbox2X500 + $RandomNum
$SAMAcc = $Mailbox2.SamAccountName
 
#Auslesen der Daten für den finalen Account
$Mailbox1 = Get-Mailbox -Identity $_.Sam1
$Mailbox1SMTP = $Mailbox1.DistinguishedName
 
#Setzen von Ordnername für PST-Import
$TargetFolderPST = "OLD-Mails"
#Angabe der Maildomain
$DomVar = "@domain.de"
 
#Vegrabe des Pfads zum speichern der PST
$FilePathPST = "\\Dateipfad\C$\PST\" + $Mailbox2Primary + ".pst"
 
###########################################################################################
 
#Export der E-Mails aus dem Mailbox als PST und warte bis fertig
New-MailboxExportRequest -Mailbox $Mailbox2SMTP -FilePath $FilePathPST
$Request = Get-MailboxExportRequest -Mailbox $Mailbox2SMTP
 
while ($Request.Status -eq "Queued" -or $Request.Status -eq "InProgress") {
$Request=Get-MailboxExportRequest -Mailbox $Mailbox2SMTP
sleep -Seconds 5
$Request.Status
}
 
if ($Request.Status -eq "Completed") {
    Write-Host "Mailbox export completed for $Mailbox2SMTP"
    Remove-MailboxExportRequest -Identity $Mailbox2Primary -Confirm:$false
        } else {
        $SysInfo="Error"
        $Info="Error on PST"
        }
 
if ($Request.Status -eq "Failed") {
    Write-Error 'The mailbox export failed' -ErrorAction Stop
        } else {
        $SysInfo="Error"
        $Info="Error on PST"
        }
 
#Import der E-Mails in den finalen Account als PST in den Unterordner "OLD-Mails"
New-MailboxImportRequest -FilePath $FilePathPST -Mailbox $Mailbox1SMTP -TargetRootFolder $TargetFolderPST
$Request = Get-MailboxImportRequest -Mailbox $Mailbox1SMTP
 
while ($Request.Status -eq "Queued" -or $Request.Status -eq "InProgress") {
$Request=Get-MailboxImportRequest -Mailbox $Mailbox1SMTP
sleep -Seconds 5
$Request.Status
}
 
if ($Request.Status -eq "Completed") {
    Write-Host "Mailbox import completed for $Mailbox1SMTP"
    Remove-MailboxImportRequest -Identity $Mailbox1SMTP -Confirm:$false
        } else {
        $SysInfo="Error"
        $Info="Error on PST"
        }
 
if ($Request.Status -eq "Failed") {
    Write-Error 'The mailbox import failed' -ErrorAction Stop
        } else {
        $SysInfo="Error"
        $Info="Error on PST"
        }
 
#Setze Random-Mailadresse bei zu migrierendem Account und deaktiviere Mailadresspolicy
$NewEAAdress = "Random-" + $RandomNum + $DomVar
Set-Mailbox -Identity $Mailbox2SMTP -PrimarySmtpAddress $NewEAAdress -EmailAddressPolicyEnabled $false
Sleep -Seconds 2
 
#Primary E-Mailadresse Vorname.Nachname bei migrierendem Account Account löschen
Set-Mailbox -Identity $Mailbox2SMTP -EmailAddresses @{remove=$Mailbox2Primary}
 
#Primary E-Mailadresse Vorname.Nachname@ bei finalem Account setzen und deaktiviere Mailadresspolicy
Set-Mailbox -Identity $Mailbox1SMTP -PrimarySmtpAddress $Mailbox2Primary -EmailAddressPolicyEnabled $false
 
#Entferne die x500 Adresse bei dem migrierendem Account und setze einen neuen Random
Set-Mailbox -Identity $Mailbox2SMTP -EmailAddresses @{remove = $X500Address}
Set-ADUser -Identity $Mailbox2SMTP -Replace @{legacyExchangeDN=$RandomX500}
 
#Deaktiviere zu migrierendem Account Account
Disable-Mailbox $Mailbox2
Sleep -Seconds 2
 
#Setze X500 (ExchangeLegacyDN) auf finalen Account
Set-Mailbox -Identity $Mailbox1SMTP -EmailAddresses @{Add = $X500Address}
}

Beginnen Sie mit der Eingabe und drücken Sie Enter, um zu suchen