Solved

Import CSV Bulk Users Powershell

Posted on 2012-04-04
15
1,492 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Free NetCrunch network monitor licenses!

Only on Experts-Exchange: Sign-up for a free-trial and we'll send you your permanent license!

Here is what you get: 30 Nodes | Unlimited Sensors | No Time Restrictions | Absolutely FREE!

Act now. This offer ends July 14, 2017.

 

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: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Uncontrolled local administrators groups within any organization pose a huge security risk. Because these groups are locally managed it becomes difficult to audit and maintain them.
Unified and professional email signatures help maintain a consistent company brand image to the outside world. This article shows how to create an email signature in Exchange Server 2010 using a transport rule and how to overcome native limitations …
The basic steps you have just learned will be implemented in this video. The basic steps are shown to configure an Exchange DAG in a live working Exchange Server Environment and manage the same (Exchange Server 2010 Software is used in a Windows Ser…
This Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …

691 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