Ein Nutzer kann in Exchange mehrere E-Mail-Adressen haben. Nur eine davon ist allerdings seine primäre Mail-Adresse. Wie geht man vor, wenn man eine der weiteren Adressen zur primären E-Mail Adresse ändern möchte?
Index
Mehrere E-Mail-Adressen in Exchange
Die E-Mail-Adressen eines Nutzers werden in Exchange aufgelistet. Dabei wird die Standardantwortadresse fett formatiert angezeigt.
Synchronisierung der E-Mail-Adressen im AD
Diese Adressen werden von Exchange auch ins Active Directory synchronisiert. Der Wert im Attribut „mail“ ist dabei die primäre Adresse. Praktikabel ist auch, dass eine ähnliche Ansicht mit allen Adressen wie im Exchange über das Attribut „proxyAdresses“ verfügbar ist:
Primäre E-Mail-Adresse in Exchange ändern
Über die Exchange Admin-Oberfläche lässt sich die primäre Mailadresse einfach ändern. Mit Powershell ist es ein wenig umständlicher, allerdings auch möglich.
Wichtig ist hierbei zu wissen, wie Exchange intern feststellt, welche E-Mail-Adresse die primäre ist. Leider wird dies nicht so klar geregelt, wie im ActiveDirectory. Intern speichert Exchange alle E-Mail-Adressen im selben Attribut ab, zusammen mit einem Protokoll-Präfix, dass auch in der Verwaltungsoberfläche im Exchange sichtbar ist. In der Regel ist dies „smtp:“. Die primäre E-Mail-Adresse weist dabei einen kleinen, aber wichtigen Unterschied auf: Das „SMTP:“ vor der Adresse ist großgeschrieben.
Wollen wir also eine der Proxy-Adressen als primäre festlegen, müssen wir das SMTP-Präfix dieser groß schreiben und die Präfixe aller anderen Adressen klein.
Remote Zugriff auf Exchange mit PowerShell
Wir wollen in diesem Beispiel Remote auf den Exchange zugreifen, d.h. nicht direkt auf der Exchange-Management Konsole arbeiten. Dazu brauchen wir eine PS-Session. Wir importieren uns die Exchange-Session des Servers über die URL, die sich folgendermaßen zusammensetzt:
https://<Name oder IP des Server>/PowerShell
Get-Mailbox und Set-Mailbox importieren
Zudem werden wir uns nicht die gesamte Session importieren, sondern nur die CmdLets „Get-Mailbox“ und „Set-Mailbox“, da wir andere nicht benötigen. Der Session-Import sieht folgendermaßen aus:
1 2 3 4 |
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri “https://exc16/PowerShell” -Authentication Kerberos Import-PSSession $session -CommandName Get-Mailbox, Set-Mailbox |
Zuerst brauchen wir jetzt einen Identifier für den Nutzer (seinen Login-Name, seine primäre E-Mail-Adresse oder seine objectGUID), dessen Mailbox wir bearbeiten möchten. So suchen wir uns seine Mailbox heraus:
1 |
$mb = Get-Mailbox steve.koenig |
Zusätzlich initialisieren wir noch eine leere Array-Liste, in der wir unsere E-Mail-Adressen speichern werden.
1 |
$list = New-Object System.Collections.ArrayList<br /><br /> |
NewPrimaryMail festlegen
Außerdem legen wir noch fest, welche Mail-Adresse die neue, primäre Adresse sein soll. Dieses sollte dem Postfach bereits zugeordnet sein.
1 |
$newPrimaryMail = "koenig.steve@demofa.net" |
Im nächsten Schritt iterieren wir über die E-Mail-Adressen der Mail. Da diese mit dem Präfix eingetragen sind, splitten wir sie einfach am Doppelpunkt auf und merken uns sowohl das Präfix, als auch die Adresse selbst.
1 2 3 4 |
foreach($address in $mb.EmailAddresses) { $prefix = $address.Split(":")[0] $mail = $address.Split(":")[1] } |
Jetzt kommt der Schritt zur eigentlichen Änderung der primären Mail-Adresse: Wir vergleichen die Adresse mit unserer $newPrimaryMail. Sind diese gleich, fügen wir sie mit dem großgeschriebenen Präfix „SMTP:“ zu unserer Liste hinzu. Wenn nicht, dann ist es eine weitere Adresse, die wir mit dem bereits eingetragenen Präfix, allerdings kleingeschrieben, der Liste hinzufügen.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
foreach($address in $mb.EmailAddresses) { $prefix = $address.Split(":")[0] $mail = $address.Split(":")[1] if ($mail.ToLower() -eq $newPrimaryMail.ToLower()) { $address = "SMTP:" + $mail } else { $address = $prefix.ToLower() + ":" + $mail } $list.Add($address) } |
In unserer Liste sollte also nun unsere neue, primäre Adresse mit einem großem „SMTP“ als Präfix und alles anderen mit einem kleingeschriebenen Präfix stehen.
Liste an Mailbox übergeben
Letztlich müssen wir einfach nur noch die Liste an die Mailbox übergeben und die alte damit überschreiben (und nicht vergessen, die PS-Session wieder zu schließen):
1 2 |
Set-Mailbox steve.koenig -EmailAddresses $list Remove-PSSession $session |
Die Änderungen sind in der Exchange-Verwaltung sofort ersichtlich und synchronisieren sich vom Exchange anschließend auch ins AD.
Das komplette Skript: Ändern der primären E-Mail-Adresse mit PowerShell
Zum Abschluss hier noch einmal das gesamte Skript:
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 |
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri “https://exc16/PowerShell” -Authentication Kerberos Import-PSSession $session -CommandName Get-Mailbox, Set-Mailbox $mb = Get-Mailbox steve.koenig $newPrimaryMail = "koenig.steve@demofa.net" $list = New-Object System.Collections.ArrayList foreach($address in $mb.EmailAddresses) { $prefix = $address.Split(":")[0] $mail = $address.Split(":")[1] if ($mail.ToLower() -eq $newPrimaryMail.ToLower()) { $address = "SMTP:" + $mail } else { $address = $prefix.ToLower() + ":" + $mail } $list.Add($address) } Set-Mailbox steve.koenig -EmailAddresses $list Remove-PSSession $session |
1 Comment
Leave your reply.