?
Solved

Import CSV Bulk Users Powershell

Posted on 2012-04-04
15
Medium Priority
?
1,537 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
Easily Design & Build Your Next Website

Squarespace’s all-in-one platform gives you everything you need to express yourself creatively online, whether it is with a domain, website, or online store. Get started with your free trial today, and when ready, take 10% off your first purchase with offer code 'EXPERTS'.

 

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
 

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 19

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

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

What is Archiving? Archiving in Exchange Online (called In-Place Archiving) provides users with additional mailbox storage space.
Lotus Notes is the most prominent choice of all users due to its advance email management. It provides email features along with contact management, appointments, task, calendar etc. Many users rely on its service to carry out electronic communicati…
Attackers love to prey on accounts that have privileges. Reducing privileged accounts and protecting privileged accounts therefore is paramount. Users, groups, and service accounts need to be protected to help protect the entire Active Directory …
Sometimes it takes a new vantage point, apart from our everyday security practices, to truly see our Active Directory (AD) vulnerabilities. We get used to implementing the same techniques and checking the same areas for a breach. This pattern can re…

589 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