Solved

Import CSV Bulk Users Powershell

Posted on 2012-04-04
15
1,481 Views
Last Modified: 2012-08-14
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
0
Comment
Question by:falconcurt
  • 10
  • 4
15 Comments
 
LVL 5

Expert Comment

by:2Cs
ID: 37806515
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
0
 

Author Comment

by:falconcurt
ID: 37806524
I will also need to Add-Mailbox.
0
 
LVL 5

Expert Comment

by:2Cs
ID: 37806569
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
0
VMware Disaster Recovery and Data Protection

In this expert guide, you’ll learn about the components of a Modern Data Center. You will use cases for the value-added capabilities of Veeam®, including combining backup and replication for VMware disaster recovery and using replication for data center migration.

 

Author Comment

by:falconcurt
ID: 37806666
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.
0
 
LVL 5

Expert Comment

by:2Cs
ID: 37806737
0
 

Author Comment

by:falconcurt
ID: 37806760
I know the parameters of powershell but there are none for certain attributes like title and homeDirectory. There inlies my problem.
0
 
LVL 5

Expert Comment

by:2Cs
ID: 37807047
Can't you use DSADD to create the user accounts with the parameters you need and a VBscript to create the mailboxes?
0
 

Author Comment

by:falconcurt
ID: 37807509
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.
0
 
LVL 18

Expert Comment

by:suriyaehnop
ID: 37809852
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
0
 

Author Comment

by:falconcurt
ID: 37812033
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.
0
 

Author Comment

by:falconcurt
ID: 37812110
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?
0
 

Author Comment

by:falconcurt
ID: 37827196
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
}
0
 

Author Comment

by:falconcurt
ID: 37828096
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
0
 

Accepted Solution

by:
falconcurt earned 0 total points
ID: 37828251
I have figured it out. Shows you what good research will do. The correct syntax is
New-Mailbox -Name (User.sn + ", " + User.givenName)
0
 

Author Closing Comment

by:falconcurt
ID: 37847983
I had to research all my answers myself.
0

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

While rebooting windows server 2003 server , it's showing "active directory rebuilding indices please wait" at startup. It took a little while for this process to complete and once we logged on not all the services were started so another reboot is …
This article lists the top 5 free OST to PST Converter Tools. These tools save a lot of time for users when they want to convert OST to PST after their exchange server is no longer available or some other critical issue with exchange server or impor…
In this video we show how to create an email address policy in Exchange 2013. We show this process by using the Exchange Admin Center. Log into Exchange Admin Center.:  First we need to log into the Exchange Admin Center. Navigate to the Mail Flow…
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.

810 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question