Um Mitarbeiter, die nicht auf unseren lokalen Servern definiert sind, über die Globale Adressliste von Outlook zugänglich zumachen, wollte ich E-Mail-Kontakte auf dem Exchange-Server anlegen. Wie beim Anlegen der Postfächer wollte ich die vielen Einträge aber nicht per Hand hinzufügen. Also habe ich wieder Erfahrung mit der PowerShell gesammelt! ;)

Man benötigt eine CSV-Datei die folgende Spalten enthält: Name, Vorname, Nachname, Alias, Email
Die Reihenfolge ist eigentlich egal, aber es ist wichtig das die CSV-Datei die Überschriften auch enthält! Sie werden später im Script direkt angesprochen. Der Kontakt wird unter dem Wert der Spalte Name abgelegt und der Anzeigename bildet sich aus Vorname und Nachname (Nachname, Vorname) falls vorhanden. Der Alias wird vom Exchange-Server gebraucht und Email sollte eigentlich klar sein.

Den Pfad der CSV-Datei in der Datei EMailKontakteAnlegen.ps1 anpassen und danach das Script über die Exchange-Verwaltungsshell aufrufen. Über die Variable $sOrganizationalUnit im Script kann man übrigens angeben, in welcher Organisationseinheit die Kontakte im Active Directory landen sollen…

kontake.csv

Name,Vorname,Nachname,Alias,Email
LGm,Tim,Gerundt,lgm,lgm@lgmsworld.de
...

EMailKontakteAnlegen.ps1

#-------------------------------------------------------------------------------
# An die eigenen Bedürfnisse anpassen...
#-------------------------------------------------------------------------------
$sCsvPath = "C:\Temp\kontake.csv"
$sOrganizationalUnit = "Users"
#-------------------------------------------------------------------------------

$iCount = 0
$oCsv = Import-Csv "$sCsvPath"
foreach ($oRow in $oCsv) { #Für alle Kontakte...
  $sName = $oRow.Name
  if ($sName -ne "") { #Wenn Kontakt-Name vorhanden ist...
    $sFirstName = $oRow.Vorname
    $sLastName = $oRow.Nachname
    $sAlias = $oRow.Alias
    $sEmail = $oRow.Email
    if ($sFirstName -ne "" -and $sLastName -ne "") { #Wenn Vor- UND Nachname vorhanden sind...
      $sDisplayName = $sLastName + ", " + $sFirstName
    }
    else { #Wenn KEIN Vor- ODER Nachname vorhanden sind...
      $sDisplayName = $sName
    }

    $oMailContact = Get-MailContact -Identity "$sName" -ea SilentlyContinue
    if ($oMailContact -eq $null) { #Wenn Kontakt NICHT vorhanden ist...
      $Error.Clear()
      New-MailContact -Name "$sName" -ExternalEMailAddress "$sEmail" -PrimarySmtpAddress "$sEmail" -FirstName "$sFirstName" -LastName "$sLastName" -Alias "$sAlias" -DisplayName "$sDisplayName" -OrganizationalUnit "$sOrganizationalUnit"
      if ($Error.Count -eq 0) { #Wenn KEIN Fehler aufgetretten ist...
        $iCount = $iCount + 1
      }
    }
  }
}
""
"$iCount von " + $oCsv.Count + " Kontakt(e) angelegt..."