Import CSV Bulk Users Powershell

I am attempting to import users from a CSV file. I have knowledge with VB but not with Powershell. I found a script that will work but im not sure it will work with other AD attributes like title, or homeDirectory. I see the New-Mailbox command which there are no parameters that will work for title or homeDirectory. If anybody can help me plug this in. Would be awesome. Thanks!

Function ReadCSV{  
Param([string]$fileName)  
$users = Import-Csv $fileName
foreach ($user in $users){  
$ht  = @{  
'givenName'=$user.fn  
'sn'=$user.ln  
'displayName'=$user.dispname  
'alias'=$user.alias
'company'=$user.company
'description'=$user.description
'samAccountName'=$user.alias  
'userPrincipalName' = $user.upn  
'database' = $user.Database  
'organizationalUnit' = $user.ou  
'name' = ($user.fn + $user.sn)  
}  
Write-Output $ht
}  
}  
Function CreateUser{  
Param($userInfo)  
New-Mailbox  -Name $userInfo['name' ]`  
-Alias $userInfo['alias'] -UserPrincipalName $userInfo['userPrincipalName'] `  
-SamAccountName $userInfo['alias'] -Database $userInfo['Database']`
-FirstName $userInfo['givenName'] -LastName $userInfo['sn'] `  
-OrganizationalUnit $userinfo['organizationalUnit']`  
-DisplayName $userInfo['DISPLAYNAME'] -Password (ConvertTo-SecureString $_.password -AsPlainText -Force)
}  
Function CreateMailbox{  
PROCESS  
{  
CreateUser $_  
}  
}  
ReadCSV c:\Temp\UsersPS.csv | CreateMailbox
falconcurtAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

2CsCommented:
Why not use dsadd with your CSV?


dsadd user cn=USERNAME,cn=Users,dc=DOMAIN,dc=COM -upn USERNAME@DOMAIN.COM -display DISPLAYNAME -pwd PASSWORD -mustchpwd no -desc "Windows User Account"                                          

http://www.tekweb.dk/manuals/command/commands/D/DSADD.HTM
falconcurtAuthor Commented:
I will also need to Add-Mailbox.
2CsCommented:
Looks like the function within DSADD only created the address for LDAP queries and not the physical mailbox, see if this is of any help:

http://www.computerperformance.co.uk/vbscript/vbscript_user_mailbox.htm
Determine the Perfect Price for Your IT Services

Do you wonder if your IT business is truly profitable or if you should raise your prices? Learn how to calculate your overhead burden with our free interactive tool and use it to determine the right price for your IT services. Download your free eBook now!

falconcurtAuthor Commented:
I would like to stick with the Powershell method if possible. If i do not find anything after a while.... I will look into that method.
falconcurtAuthor Commented:
I know the parameters of powershell but there are none for certain attributes like title and homeDirectory. There inlies my problem.
2CsCommented:
Can't you use DSADD to create the user accounts with the parameters you need and a VBscript to create the mailboxes?
falconcurtAuthor Commented:
I believe a powershell session has to be called in order to create a mailbox within Exchange 2010. I'm not positive but believe so. I know you can create a mailbox using Vbscript withing 2003 exchange but i do not believe it is possible within 2010. Just my first thoughts doing a quick Google search.
suriyaehnopCommented:
Hi,

This powershell code will create bulk mailbox. Once it done, it will modify the user's atribute such title, company, office...
To run this code you must have Exhcnage PSSnapin Microsoft.Exchange.Management.PowerShell.Admin and Microsoft.Exchange.Management.Powershell.Support or else just on using Exchange Management PowerShell.

$Users = Import-Csv C:\PS\CreateMailboxSC.csv

#Create a bulk mailboxes
Foreach ($User in $Users){


#Create a Mail-Enabled User
New-Mailbox -Name $User.name -FirstName $User.firstname -LastName $User.lastname -Alias $User.alias `
-UserPrincipalName ($user.alias +'@contoso.com') -Database $User.Database -OrganizationalUnit $User.OU `
-Password ( ConvertTo-SecureString P@ssw0rd -AsPlainText -Force) -ResetPasswordOnNextLogon:$false `
-ErrorVariable err | Out-Null


#Check AD Latency
do
{
 $mailbox = Get-Mailbox -Identity $user.alias -ErrorAction SilentlyContinue 
}
While ($mailbox -eq $null)

#Modify attributes of User's account properties
Set-User -Identity $user.alias -Company $user.Company -Title $user.title -Department $user.department `
-Office $User.office -Manager $user.manager 
}

Open in new window



Please let verify the code.
Test.csv
falconcurtAuthor Commented:
It looks good. I haved only one question. I see you have a set password in the script. How would i implement a unique password for each user within the CSV file.
falconcurtAuthor Commented:
I actually see another problem... There are still some parameters that are missing even with the Set-User command like homeDirectory. I see some stuff related to QADUser command. Has anybody worked with this before?
falconcurtAuthor Commented:
Ok I finally got something that may work. I reworked the script. I went with Set-Qaduser commands on editing the attributes that i could not find with the other methods. Now my only problem is attempting to set the Member of attribute for each user withing the CSV. I am looking to use the -ObjectAttributes parameter but i do not know the correct usage with that part. Anybody have a clue on how to implement that part.
Here is my script.

add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010, Quest.ActiveRoles.ADManagement
$Users = Import-Csv C:\temp\UsersPS.csv

#Create a bulk mailboxes
Foreach ($User in $Users){
$Group = $User.

#Create a Mail-Enabled User
New-Mailbox -Name $User.name -FirstName $User.givenName -LastName $User.sn -Alias $User.alias `
-UserPrincipalName ($user.alias +'domain.loc') -Database $User.Database -RetentionPolicy MBSPolicy -OrganizationalUnit $User.OU `
-Password ( ConvertTo-SecureString $User.password -AsPlainText -Force) -ResetPasswordOnNextLogon:$false `
-ErrorVariable err | Out-Null
Add-MailboxPermission -Identity $user.alias -User "Mailbox Administrators" -AccessRights FullAccess -Automapping $false


#Check AD Latency
do
{
 $mailbox = Get-Mailbox -Identity $user.alias -ErrorAction SilentlyContinue
}
While ($mailbox -eq $null)

#Modify attributes of User's account properties
Set-QADUser -Identity $user.alias -Description $user.description -Memberof -Company $user.Company -Title $user.Title -HomeDirectory $user.homeDirectory `
-Office $User.office -HomeDrive $user.Homedrive -ObjectAttributes -PasswordNeverExpires:$true
Add-QADPermission -Identity $user.alias -Account SELF,Everyone -Extendedright "User-Change-Password" -Deny -ApplyTo ThisObjectOnly
}
falconcurtAuthor Commented:
Here i go again. I found what i need to add to a group. I added the Add-ADGroupmember command to the script. Now one more problem. lol.. How do i combine two fields that have the first name and last name within the CSV file. I am trying to reduce the amount of columns that are needed within the CSV file. Here is what i got. Tell me what am i missing.  

dd-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010, Quest.ActiveRoles.ADManagement
Import-Module ActiveDirectory
$Users = Import-Csv C:\temp\UsersPS1.csv

#Create a bulk mailboxes
Foreach ($User in $Users){

#Create a Mail-Enabled User
New-Mailbox -Name ("$User.sn, $User.givenName") -FirstName $User.givenName -LastName $User.sn -Alias $User.alias `
-UserPrincipalName ($user.alias +'@domain.loc) -Database $User.Database -RetentionPolicy MBSPolicy -OrganizationalUnit $User.OU `
-Password ( ConvertTo-SecureString $User.password -AsPlainText -Force) -ResetPasswordOnNextLogon:$false `
-ErrorVariable err | Out-Null
Add-MailboxPermission -Identity $user.alias -User "Mailbox Administrators" -AccessRights FullAccess -Automapping $false


#Check AD Latency
do
{
 $mailbox = Get-Mailbox -Identity $user.alias -ErrorAction SilentlyContinue
}
While ($mailbox -eq $null)

#Modify attributes of User's account properties
Set-QADUser -Identity $user.alias -Description $user.alias -Company $user.Company -Title $user.Title -HomeDirectory $user.homeDirectory `
-Office $User.office -HomeDrive G: -PasswordNeverExpires:$true
Add-QADPermission -Identity $user.alias -Account SELF,Everyone -Extendedright "User-Change-Password" -Deny -ApplyTo ThisObjectOnly
Add-ADGroupMember -Identity $user.Group -Member $user.alias
falconcurtAuthor Commented:
I have figured it out. Shows you what good research will do. The correct syntax is
New-Mailbox -Name (User.sn + ", " + User.givenName)

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
falconcurtAuthor Commented:
I had to research all my answers myself.
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Powershell

From novice to tech pro — start learning today.