Möchten Sie einen neuen Nutzer angelegen? Dann sollten Sie prüfen, ob die gewünschte E-Mail-Adresse schon vergeben ist. Erfahren Sie in diesem Artikel, wie Sie eine E-Mail-Adresse mit PowerShell prüfen können.
Index
E-Mail-Adressen im Active Directory und Exchange
Wie schon im Artikel „Primäre E-Mail-Adresse ändern mit PowerShell“ beschrieben, werden alle E-Mail-Adressen eines Nutzers in Exchange aufgelistet:
Die Synchronisation der E-Mail-Adressen von Exchange erfolgt in die Active Directory-Attribute „mail und „proxyAddresses“:
Wenn Sie nun ein neues Postfach mit der E-Mail-Adresse „m.muster@demofa.net“ anlegen möchten, sollten Sie zunächst überprüfen, ob Sie diese schon als primäre oder sekundäre Adresse verwenden.
Somit vermeiden Sie Fehler bei der Postfach-Anlage. Wenn nun die gewünschte E-Mail-Adresse schon vergeben ist, können Sie sich eine neue überlegen. Allerdings sollten Sie diese ebenfalls überprüfen.
Es gibt nun zwei Möglichkeiten mit PowerShell zu überprüfen, ob eine E-Mail-Adresse schon existiert. Wobei Sie die direkte Abfrage von Exchange bevorzugen wird.
Abfrage mit Hilfe des Active Directory
Zunächst nehmen wir die E-Mail-Adresse, die wir überprüfen möchten.
1 |
$mail="m.muster@demofa.net" |
Bei dem CmdLet Get-ADUser (Modul ActiveDirctory, Import des Moduls in PowerShell mit Import-Module ActiveDirectory) ist die Angabe der SearchBase optional. Wir benötigen das Attribut proxyAddresses und den Filter, der in dem Attribut proxyAddresses nach der E-Mail-Adresse sucht.
Die Groß- und Kleinschreibung im Filter und der E-Mail-Adresse ist dabei nicht relevant.
1 2 3 |
Get-ADUser -SearchBase "CN=Users,DC=demofa,DC=net" -Filter "proxyAddresses -eq 'smtp:$mail'" -Properties proxyAddresses |
CmdLet gibt uns nun alle AD-User zurück, welche die E-Mail-Adresse in proxyAddresses als Wert stehen haben. Dann kann mit einem einfachen If-Statement nun die Fallunterscheidung vorgenommen werden.
1 2 3 4 5 6 7 |
if($users -eq $null){ Write-Host("Die E-Mail-Adresse ist noch nicht vergeben.") # Do something }else{ Write-Host("Die E-Mail-Adresse ist vergeben.") # Generate new mail address } |
Hier nun noch einmal das gesamte Skript:
1 2 3 4 5 6 7 8 9 10 11 12 |
$mail="m.muster@demofa.net" $users= Get-ADUser -SearchBase "CN=Users,DC=demofa,DC=net" -Filter "proxyAddresses -eq 'smtp:$mail'" -Properties proxyAddresses if($users -eq $null){ Write-Host("Die E-Mail-Adresse ist noch nicht vergeben.") # Do something }else{ Write-Host("Die E-Mail-Adresse ist vergeben.") # Generate new mail address } |
PS-Konsolenausgabe:
Alternativ fragen Sie direkt Exchange ab, ob eine E-Mail-Adresse schon verwendet wird. Hier ist die Aktualität der Attributswerte nicht von der Synchronisation zum Active Directory abhängig.
Abfrage mit Hilfe von Exchange
Um Remote auf den Exchange zugreifen zu können, benötigen wir eine PS-Session. Den Server erreichen wir über folgende URL: https://<Name oder IP des Servers>/PowerShell
1 |
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://exc16/PowerShell/ -Authentication Kerberos |
Um nicht die komplette PS-Session importieren zu müssen, geben wir das benötigte CmdLet „Get-Recipient“ explizit an:
1 |
Import-PSSession -Session $session -CommandName Get-Recipient |
Danach können wir ähnlich wie bei Get-ADUser die Abfrage nach der E-Mail-Adresse an Exchange stellen:
1 2 3 |
$mail="m.muster@demofa.net" $recipients = Get-Recipient -ResultSize unlimited | where {$_.EmailAddresses -eq "smtp:" + $mail} |
Get-Recipient gibt alle E-Mail-aktivierten Objekte zurück (z. B. Postfächer, E-Mail-Benutzer, E-Mail-Kontakte und Verteilergruppen). Will man nur die Postfachobjekte nach der E-Mail-Adresse durchsuchen, kann man das CmdLet Get-Mailbox verwenden:
1 |
$recipients = Get-MailBox -ResultSize unlimited | where {$_.EmailAddresses -eq "smtp:" + $mail} |
Der Parameter ResultSize gibt die maximale Anzahl der zurückzugebenden Ergebnisse an. Der Standardwert ist 1000 und unlimited gibt alle Ergebnisse zurück.
Wie schon zuvor kann mit einem einfachen If-Statement die Fallunterscheidung vorgenommen werden:
1 2 3 4 5 6 7 |
if($recipients -eq $null){ Write-Host("Die E-Mail-Adresse ist noch nicht vergeben.") # Do something }else{ Write-Host("Die E-Mail-Adresse ist vergeben.") # Generate new mail address } |
Zuletzt schließen wir die PS-Session wieder:
1 |
Remove-PSSession $session > $null |
Zum Schluss hier nun noch einmal das komplette Skript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://exc16/PowerShell/ -Authentication Kerberos Import-PSSession -Session $session -CommandName Get-Recipient $mail="m.muster@demofa.net" $recipients = Get-Recipient -ResultSize unlimited | where {$_.EmailAddresses -eq "smtp:" + $mail} if($recipients -eq $null){ Write-Host("Die E-Mail-Adresse ist noch nicht vergeben.") # Do something }else{ Write-Host("Die E-Mail-Adresse ist vergeben.") # Generate new mail address } Remove-PSSession $session > $null |
Neuer Nutzer mit IDM-Portal – automatische Prüfung
Mit IDM-Portal, können Sie schnell und einfach Nutzer anlegen und die Mail-Adresse prüfen.
Mit einen Klick legen Sie einen neuen Benutzer an und erhalten Sie automatisch eine Fehler-Benachrichtigung, wenn die E-Mail-Adresse schon vergeben ist.
Dank die Delegationsrollen können auch andere Abteilungen (z.B: Personalabteilung) solche Aufgaben übernehmen. Somit können alle Anwender Anforderungen schnell erledigt werden.
Fazit
Fehler in der Postfach-Anlage, wie z.B. doppelte E-Mail-Adressen, lassen sich leicht vermeiden. Mit einer PowerShell-Abfrage gegen Ihren Exchange-Server finden Sie schnell heraus, ob die gewünschte E-Mail-Adresse schon existiert und können diesen Fall entsprechend behandeln. Mit dem IDM-Portal wird dieses Skript auch in den Anlage-Prozess integriert.
Unterstützung benötigt?
Gerne stellen wir Ihnen unsere Leistungen und Lösungen in einem persönlichen Gespräch vor und würden uns über Ihre Kontaktaufnahme sehr freuen!
Leave a Reply
<p>Danke für Ihre Anregungen, Fragen und Hinweise.<br/>Infos zum <a href="https://www.active-directory-faq.dekontakt/">Datenschutz</a></p>