Im letzten Blogeintrag haben wir Zufallszahlen erzeugt.
In diesem Blogeintrag schauen wir uns an, wie man im Active Directory die SMTP Hauptadresse eines Exchange Postfachs bestimmen kann.
Heute mal ein ganz anderes Thema:
Ein Kunde wollte für alle Exchange Mailboxen die SMTP Hauptadresse auslesen. Diese Adresse wird auch Primäradresse oder im Englischen SMTP Primary Address genannt.
Das ist die E-Mail Adresse, die im Mailheader als Antwortadresse eingetragen wird. Das bedeutet, es ist egal, welche E-Mail-Adresse ich in das „Von“ Feld eintrage – als Antwort Adresse wird immer die SMTP Hauptdresse genommen.
Wir schauen uns zuerst an, welche Attribute sich im Active Directory Benutzerobjekt mit der E-Mail-Adresse beschäftigen:
Get-ADuser plustig -Properties *|fl mail,EmailAddress,proxyAddresses
mail : peter.lustig@powershell-user.de
EmailAddress : peter.lustig@powershell-user.de
proxyAddresses : {SMTP:Peter.Lustig@powershell-user.de, smtp:plustig@powershell-user.de, smtp:plustig@bbtest.intern}
PS C:\> Get-ADuser plustig -Properties *|fl mail,EmailAddress,proxyAddresses mail : peter.lustig@powershell-user.de EmailAddress : peter.lustig@powershell-user.de proxyAddresses : {SMTP:Peter.Lustig@powershell-user.de, smtp:plustig@powershell-user.de, smtp:plustig@bbtest.intern}
Das einzige Attribut, welches uns sicher die richtige SMTP Hauptadresse zurückgibt ist das Attribut proxyAddresses. Die anderen beiden Attribute können manuell geändert werden oder wurden z.B. nach Migrationen nicht angepasst.
Aber wie man schon sieht, hat das Attribut proxyAddresses mehr als einen Wert. Es ist ein „multi value Attribute“. Für uns ist der Wert relevant, der mit großgeschriebenen SMTP: startet.
Wir leiten das Attribut in eine Variable um:
$mail = Get-ADUser plustig -Property proxyAddresses |select proxyAddresses
proxyAddresses
--------------
{SMTP:Peter.Lustig@powershell-user.de, smtp:plustig@powershell-user.de, smtp:plustig@b
PS C:\> $mail = Get-ADUser plustig -Property proxyAddresses |select proxyAddresses PS C:\> $mail proxyAddresses -------------- {SMTP:Peter.Lustig@powershell-user.de, smtp:plustig@powershell-user.de, smtp:plustig@b
Um ein Multi Value Attribut zu zerlegen muss man mit –expandproperty arbeiten :
$mail |select -ExpandProperty proxyAddresses
SMTP:Peter.Lustig@powershell-user.de
smtp:plustig@powershell-user.de
smtp:plustig@bbtest.intern
PS C:\> $mail |select -ExpandProperty proxyAddresses SMTP:Peter.Lustig@powershell-user.de smtp:plustig@powershell-user.de smtp:plustig@bbtest.intern
Jetzt können wir den SMTP Wert filtern. Damit der Vergleich Groß- und Kleinschreibung unterscheidet („case sensitive“) nehme ich anstatt einem –like ein –clike.
$mail |select -ExpandProperty proxyaddresses |where {$_ -clike "SMTP:*"}
SMTP:Peter.Lustig@powershell-user.de
PS C:\> $mail |select -ExpandProperty proxyaddresses |where {$_ -clike "SMTP:*"} SMTP:Peter.Lustig@powershell-user.de
Das Ergebnis wird jetzt noch mit einem split Befehl zerlegt (als Trennzeichen der Doppelpunkt) und der erste Wert von rechts genommen. Der erste Wert von rechts wird mit [-1] ausgewählt:
$mail = $mail |select -ExpandProperty proxyAddresses |where {$_ -clike "SMTP:*"}
$mail.Split(":")[-1]
Peter.Lustig@powershell-user.de
PS C:\> $mail = $mail |select -ExpandProperty proxyAddresses |where {$_ -clike "SMTP:*"} PS C:\> $mail.Split(":")[-1] Peter.Lustig@powershell-user.de
Und jetzt eine Liste aller Benutzer, die ein Exchange Postfach haben mit Namen und SMTP-Hauptadresse in der Ausgabe.
Zuerst lesen wir alle Benutzer ein, die ein gefülltes proxyAddresses Attribut haben. Danach zerlegen wir wie oben beschrieben die E-Mail-Adressen:
$mailbox |foreach {$smtp = ($_ | Select -ExpandProperty proxyAddresses |where {$_ -clike"SMTP:*"}).split(":")[-1]; Write-Host "$($_.name) - $smtp"}
PS C:\> $mailbox = Get-ADUser -Filter * -SearchBase "OU=BBTest_User,DC=bbtest,DC=intern" ` -Properties proxyAddresses |Where {$_.proxyAddresses -ne $null} PS C:\> $mailbox |foreach {$smtp = ($_ | Select -ExpandProperty proxyAddresses |where {$_ ` -clike"SMTP:*"}).split(":")[-1]; Write-Host "$($_.name) - $smtp"}
Im nächsten Blogeintrag beschäftigen wir uns damit, wie man den ping Befehl mit der PowerShell umsetzen kann.
Vielen Dank!
Das Attribut „EmailAddress“ im AD ist ein Synonym für das Attribut „Mail“.
Ich habe es so gelöst:
Bei mehreren Domänen in einem Forest:
$domains = „fourthcoffee.net“,“am.fourthcoffee.net“,“ap.fourthcoffee.net“,“emea.fourthcoffee.net“
#SMTP Address to check for
$CheckAddress = „@fourthcoffee.com“
$QueryAttribute = „extensionAttribute10“
$QueryAttributeValue = „MigrationScope“
# Get all user accounts in scope
$userlist = @()
ForEach ($domain in $domains) {
$userlist += Get-ADUser -Server $domain -Filter {($QueryAttribute -eq $QueryAttributeValue) -and (proxyAddresses -like „*“)} -Properties canonicalName,displayName,mail,proxyAddresses, | Select canonicalName,distinguishedName,samAccountName,userPrincipalName,name,displayName,mail,@{n=“primarySMTPAddress“;e={$_.proxyAddresses | Where {$_ -clike „SMTP:*“}}},proxyAddresses
}
So bekommt man ein zusätzliches Attribut „primarySMTPAddress“ vom Typ „String“ in der Abfrage.