Exchange 2007: Mehrere E-Mail-Kontakte per Script anlegen
14. Februar 2008, 00:13 Uhr
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..."
Maik
4. Juni 2009, 14:04 Uhr
Sehr gutes Script.
Die zusätzlichen Attribute für Strasse, Ort usw. Lassen sich auf diesem Weg nicht intergrieren? Wie wäre es dann möglich? innerhalb der Konsole ist eine Eintragung möglich, die Attribute existieren ja trotzdem.
LGm
4. Juni 2009, 14:28 Uhr
Also ich verwenden in dem Script den Befehl “New-MailContact” und der unterstützt diese Attribute leider nicht:
http://technet.microsoft.com/de-de/library/bb124519.aspx
Philipp
22. Juli 2009, 14:54 Uhr
Wenn man danach mit einem Set-Contact darüber geht kann man diese Werte nachtragen.
http://technet.microsoft.com/de-de/library/bb124535.aspx
Ich arbeite grade an einem Script bzw an einer Erweiterung von diesem Script.
michael
8. Mai 2010, 00:16 Uhr
Bist du schon weitergekommen mit dem Script ?
Ich muss ansonsten nächste Woche 800 Kontakte von Hand einfügen !?
Vorlagen sind von .vcf dateien !
Oder hast du da auch schon was geschrieben ?
Besten Dank für die Info !
OJ
5. Oktober 2010, 18:44 Uhr
Hallo,
leider funktioniert das Skript bei mir nicht ?!. Was mach ich falsch?
#########################################
Get-MailContact : Der Parameter “Identity” kann nicht gebunden werden. Der Wert
“” kann nicht in den Typ “Microsoft.Exchange.Configuration.Tasks.MailContactId
Parameter” konvertiert werden. Fehler: “Der Parameterwert dieses Typs Microsoft
.Exchange.Configuration.Tasks.MailContactIdParameter darf nicht leer sein.
Parametername: identity”
Bei D:tempEMailKontakteAnlegen.ps1:24 Zeichen:46
+ $oMailContact = Get-MailContact -Identity <<<< "$sName" -ea SilentlyCont
inue
+ CategoryInfo : InvalidArgument: (:) [Get-MailContact], Paramete
rBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.Exchang
e.Management.RecipientTasks.GetMailContact
New-MailContact : Das Argument kann nicht an den Parameter "Name" gebunden werd
en, da es sich um eine leere Zeichenfolge handelt.
Bei D:tempEMailKontakteAnlegen.ps1:27 Zeichen:28
+ New-MailContact -Name <<<< "$sName" -ExternalEMailAddress "$sEmail" -P
rimarySmtpAddress "$sEmail" -FirstName "$sFirstName" -LastName "$sLastName" -Al
ias "$sAlias" -DisplayName "$sDisplayName" -OrganizationalUnit "$sOrganizationa
lUnit"
+ CategoryInfo : InvalidData: (:) [New-MailContact], ParameterBin
dingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAl
lowed,Microsoft.Exchange.Management.RecipientTasks.NewMailContact
######################################
Vielen Dank für Eure Hilfe.
Gruß OJ
LGm
6. Oktober 2010, 12:01 Uhr
Enthält deine CSV-Datei denn auch die Spaltenüberschriften? Anhand der Überschriften weiß das Script nämlich, woher es die Werte holen soll:
Name,Vorname,Nachname,Alias,EmailOJ
7. Oktober 2010, 16:54 Uhr
Hey,
danke für deine Hilfe. Ja die CSV-Datei ist so aufgebaut.
In der 1. Zeile steht Name,Vorname,Nachname,Alias,Email
Ich habe diese mal mit einem Texteditor geöffnet:
########################################
Name;Vorname;Nachname;Alias;Email
fsaf;Hans;Dampf;DampfHans;hans.dampf@test.de
########################################
Gruß OJ
LGm
7. Oktober 2010, 18:48 Uhr
Hast du auch mal “,” anstatt “;” probiert? Ich habe gerade Powershell zur Verfügung um zu probieren, ob der Befehl
Import-Csvwirklich mit dem Semikolon umgehen kann.