Import Contact AD

Hello everyone,

I want to import contacts that I have received a CSV file in our AD.
So I made a script and edit the CSV file that any corersponde.

Here is the script:

Import-Module ActiveDirectory 
$Users = Import-Csv -Path "D:\userslist.csv"  
foreach ($User in $Users)  
    $OU = "OU=TestGPO,DC=coditel,DC=be"  
    $FirstName = $User.givenName 
    $LastName = $
    $DisplayName = $LastName + " " +$FirstName
    $Company = $
    $Department = $User.department
    $EMail = $User.mail
    $TelephoneNumber = $User.telephoneNumber
    $Mobile = $
    New-ADObject -type Contact -Path $OU -Name $DisplayName -DisplayName $DisplayName -GivenName $user.givenName -OtherAttributes @{'sn'=$LastName; 'company'=$company; 'department'=$departement; 'mail'=$EMail; 'telephoneNumber'=$telephoneNumber; 'mobile'=$mobile}

Looks like this Excel file:

sn givenName mail Company department telephoneNumber mobile
PANTA Sandra R SERVICE CLIENT SA RD Aix - Groupe 7 +33 4 00 00 00 00 +33 6 00 00 02 00

I started the script from my PC (not the AD because I have not Excel installed on it) and he created me a user / but nothing else!

Should I start the script from the server? Should I install excel on the server? Script wrong?

Thank you!

Are you not better off creating this through exchange if it is a contact ? something like the below

you do not need excel to read the csv file

 $Contacts = "D:\userslist.csv"

 Import-Csv $contacts | ForEach-Object { New-MailContact -Name $_."Name" -ExternalEmailAddress $_."Email-Address" -FirstName $_."firstname" -LastName $_."lastname" -OrganizationalUnit "OU=Contacts,OU=Users,DC=Domain,DC=Name,DC=com" -Alias $_."Alias" }

csv just needs the appropriate headers in the top row

Name, Email-Address, Firstname etc…

That change if I put them in the Exchange?
Just execute the script from the PowerShell console of the Exchange then?

I know add fields in the Exchange department, company, phone number, etc.? In your example not so I ask myself …

The Excel should look like then? :

Lastname Firstname Email-Address Company(??) Department(??) telephoneNumber(??) mobile(??)
PANTA Sandra R SERVICE CLIENT SA RD Aix – Groupe 7 +33 4 00 00 00 00 +33 6 00 00 02 00

Thanks for help in advance!

PS : Alias is use for what ? I dont need a alias … I dont have that column in my CSV …

from memory i do not think the new-mailcontact supports the telephone etc…, try adding using the set command at the end

 $Contacts = "D:\userslist.csv"

 Import-Csv $contacts | ForEach-Object { New-MailContact -Name $_."Name" -ExternalEmailAddress $_."Email-Address" -FirstName $_."firstname" -LastName $_."lastname" -OrganizationalUnit "OU=Contacts,OU=Users,DC=Domain,DC=Name,DC=com" -Alias $_."Alias" | Set-Contact -MobilePhone $_."mobile" -Department $_."Department" -Phone $_."phone" -Company $_."company"}

not tested as i do not have laptop with me today, the


I’ll try that in a moment, but suddenly, you may realize why I wanted to go through the AD rather than by the Exchange?

See :

Picture of error

looking at the error you havnt changed OU to suite your environtment,

error looks to start at charector 71 “Externalmailaddress” have you updated CSV to read correctly / have correct column headings?

i.e added alias & renamed values?

if alias is not needed just remove

-Alias $_.“Alias”
from the line

Hi Florian,
There are a couple of code issues, but what do you mean “he created me a user / but nothing else!”. When you use New-ADObject to create a contact, it just creates an AD Contact. If your AD Object is in fact being created, then you look at the Object class Attribute, it should be “Contact”. This does not; however, mean you will be able to see it as a contact in an Exchange environment. To do that, you must enable it as a MailContact. The easiest way to do that is to use the Enable-MailContact Exchange cmdlet.

Script issues:

  1. You have an extra “e” in the department variable on the new-adobject cmdlet. IE $departement should be $department.
  2. GivenName is not a valid Parameter for Get-ADObject. You will need to set this value in the OtherAttributes hashtable.

Really sorry, a bit rotten morning I did not concentrate, I did not blunder!
I will withdraw Alias. email Level I put CECEI for the column: Email-Address


When i run the script from the Exchange :

Cannot bind argument to parameter ‘Name’ because it is an empty string.
+ CategoryInfo : InvalidData: (:slight_smile: [New-MailContact], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,New-MailContact

Script :

 $Contacts = "\\coditel-12\Engineering\6-IT\userslist.csv"

 Import-Csv $contacts | ForEach-Object { New-MailContact -Name $_."Name" -ExternalEmailAddress $_."Email-Address" -FirstName $_."firstname" -LastName $_."lastname" -OrganizationalUnit "OU=TestGPO,DC=Domain,DC=Coditel,DC=be" | Set-Contact -MobilePhone $_."mobile" -Department $_."Department" -Phone $_."phone" -Company $_."company"}

Excel :

Name lastname firstname Email-Address company Department phone mobile
PANTA Sandra PANTA Sandra SERVICE CLIENT SA RD Aix - Groupe 7 +33 4 00 00 90 00 +33 6 00 00 02 78

Someone can help me ? Thank you!

Hi Curtis,

I change what you tell me but … No success …
How i can execute this script ? Copy/Past on a powershell console doesn’t work ?

Edit :
Error when i start on AD :
New-ADObject : Cannot bind parameter ‘OtherAttributes’ to the target. Exception
setting “OtherAttributes”: “Object reference not set to an instance of an obje
At D:\Extract2.ps1:14 char:103

  • New-ADObject -type Contact -Path $OU -Name $DisplayName -DisplayName $Dis

playName -OtherAttributes <<<< @{'sn'=$LastName; 'givenName'=$FirstName; 'comp
any'=$company; 'department'=$department; 'mail'=$EMail; 'telephoneNumber'=$tele
phoneNumber; 'mobile'=$mobile}
+ CategoryInfo : WriteError: (:slight_smile: [New-ADObject], ParameterBinding
+ FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.ActiveDirectory

Ty !

Hi Florian

the script works fine, you may want to check csv file, heres a pic of the script the file and the produced contact


Hi Mark,

Here the script :

 $Contacts = "\\coditel-12\Engineering\6-IT\userslist.csv"

 Import-Csv $contacts | ForEach-Object { New-MailContact -Name $_."Name" -ExternalEmailAddress $_."Email-Address" -FirstName $_."firstname" -LastName $_."lastname" -OrganizationalUnit "OU=TestGPO,DC=Domain,DC=Coditel,DC=be" | Set-Contact -MobilePhone $_."mobile" -Department $_."Department" -Phone $_."phone" -Company $_."company"}

Here the file excel :

I dont know where i’m bad …

Here my test :

Hi Florian

looking at

There is no “name” field in $contacts, however it looks like the excel file has it. Perhaps $contacts was an old varible? or maybe pointing to an old file ?


See :

I don’t understand … :frowning:

sorry florian i cant see whats wrong with that, from pics shown this should be working, i can see the name column is there and populated

The name is a fusion of two column on my excel, but i convert it on csv, so i don’t think the problem can from my Excel ?
I really want import this user soon, i don’t know why don’t work, is really strange !

And why my command don’t show the same that you for user ??

Ok I found the problem.
My Excel is semicolon delimited.
I just added -Delimiter “;” and it works!