Skip to main content

Scripts to Create users at Active directory from CSV file and create their Mailboxes on Exchange server 2010

 When you are deploying a new infrastructure and the company request to create about 300 users it's very difficult and time consuming to create all of them by using GUI but now we are learing you how to create any number of users with a few commands and a sheets that you already prepare them before visiting the site for deployment process.

It's very simple to do, Just write down the required users on a file like below:


Copy the below stream onto a txt file and rename the extension onto .CSV as "LabUsers.csv"
Code:
GivenName,Surname,samAccountName,DisplayName,Password
Mohamed,Fouad,Mohamed.Fouad,Mohamed Fouad,EgyEng.comPassword1
Mohamed,Taha,Mohamed.Taha,Mohamed Taha,EgyEng.comPassword1
Mohamed,Hassan,Mohamed.Hassan,Mohamed Hassan,EgyEng.comPassword1
Mohamed,Ahmed,Mohamed.Ahmed,Mohamed Ahmed,EgyEng.comPassword1
Mohamed,Ali,Mohamed.Ali,Mohamed Ali,EgyEng.comPassword1
Mohamed,Emad,Mohamed.Emad,Mohamed Emad,EgyEng.comPassword1
after completing the users list then you need the script to run for creating the users.
You can create a new Organization Unit (OU) which named ExchangeUsers
and after running the script you can move the users easily to desired OUs.


Just copy the below stream onto a txt file and rename the extension to .ps1

Code:
# Powershell Script which creates users from a sample CSV File into Active Directory
# Version 1.0
# Author: Mohamed Fouad
# http://www.EgyEng.com
# 
# Compatible with:
# Powershell 1.0 and 2.0
# Windows 2003
# Windows 2008
# Windows 2008 R2
#

function Select-FileDialog 
{
    param([string]$Title,[string]$Directory,[string]$Filter="CSV Files (*.csv)|*.csv")
    [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
    $objForm = New-Object System.Windows.Forms.OpenFileDialog
    $objForm.InitialDirectory = $Directory
    $objForm.Filter = $Filter
    $objForm.Title = $Title
    $objForm.ShowHelp = $true
    
    $Show = $objForm.ShowDialog()
    
    If ($Show -eq "OK")
    {
        Return $objForm.FileName
    }
    Else
    {
        Exit
    }
}

$FileName = Select-FileDialog -Title "Import an CSV file" -Directory "c:\"

$ExchangeUsersOU = "OU=ExchangeUsers"

$domain = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()
$DomainDN = (([System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()).Domains | ? {$_.Name -eq $domain}).GetDirectoryEntry().distinguishedName
$final = "LDAP://$DomainDN"
$DomainPath = [ADSI]"$final"
$cOU = $DomainPath.Create("OrganizationalUnit",$ExchangeUsersOU)
$cOU.SetInfo()

$UserInformation = Import-Csv $FileName

$OUPath = "LDAP://$ExchangeUsersOU,$DomainDN"
$UserPath = [ADSI]"$OUPath"
Write-Host "---------------------------------------------------------------"
Write-Host "Creating LAB Users"
Write-Host ""
Write-Host "---------------------------------------------------------------"

Foreach ($User in $UserInformation){
    
    $CN = $User.samAccountName
    $SN = $User.Surname
    $Given = $User.givenName
    $samAccountName = $User.samAccountName
    $Display = $User.DisplayName
    
    $LABUser = $UserPath.Create("User","CN=$CN")
    Write-Host "Creating User: $User.samAccountName"
    $LABUser.Put("samAccountName",$samAccountName)
    $LABUser.Put("sn",$SN)
    $LABUser.Put("givenName",$Given)
    $LABUser.Put("displayName",$Display)
    $LABUser.Put("mail","$samAccountName@$domain")
    $LABUser.Put("description", "Lab User - created via Script From Egypt Engineers-EgyEng.com")
    $LABUser.Put("userPrincipalName","$samAccountName@$domain")
    $LABUser.SetInfo()
    
    $Pwrd = $User.Password
    
    $LABUser.psbase.invoke("setPassword",$Pwrd)
    $LABUser.psbase.invokeSet("AccountDisabled",$False)
    $LABUser.psbase.CommitChanges()

}
Write-Host "Script Completed"
Now open the windows powershell and point to the location for the ps1 file and open it, it will ask you to open the "LabUsers.csv".
Open it and give it a time to complete in a minute.

Check the OU and you will find the created users in place.

Now, you want to create the mailboxes for these users in Exchange 2010.
So it's a very simple command to be run at your exchange Management shell after elevation.

One step remaining before doing your command is to create a new database on the exchange server with a name as example "EgyEng.comDB"

THEN you are ready for the command as below:

Code:
[PS] C:\Documents and Settings\EgyEngadmin>Get-User -OrganizationalUnit ExchangeUsers | Where-Object {$_.RecipientType -eq "user"} | Enable-Mailbox -Dat
abase "EgyEng.comDB"
Great, now you create domain users and their exchange mailboxes in two minutes!.

Note: This applies to Windows 2003,2008 , Exchange 2007, 2010.

have a nice Day!
Egypt Engineers
EgyEng.com.

Comments

Popular posts from this blog

Integration with vCloud Director failing after NSXT upgrade to 4.1.2.0 certificate expired

  Issue Clarification: after upgrade from 3.1.3 to 4.1.2.0 observed certificate to be expired related to various internal services.   Issue Verification: after Upgrade from 3.1.3 to 4.1.2.0 observed certificate to be expired related to various internal services.   Root Cause Identification: >>we confirmed the issue to be related to the below KB NSX alarms indicating certificates have expired or are expiring (94898)   Root Cause Justification:   There are two main factors that can contribute to this behaviour: NSX Managers have many certificates for internal services. In version NSX 3.2.1, Cluster Boot Manager (CBM) service certificates were incorrectly given a validity period of 825 days instead of 100 years. This was corrected to 100 years in NSX 3.2.3. However any environment originally installed on NSX 3.2.1 will have the internal CBM Corfu certs expire after 825 regardless of upgrade to the fixed version or not. On NSX-T 3.2.x interna...

Calculate how much data can be transferred in 24 hours based on link speed in data center

  In case you are planning for migration via DIA or IPVPN link and as example you have 200Mb stable speed so you could calculate using the below formula. (( 200Mb /8)x60x60x24) /1024/1024 = 2TB /per day In case you have different speed you could replace the 200Mb by any rate to calculate as example below. (( 5 00Mb /8)x60x60x24) /1024/1024 =  5.15TB  /per day So approximate each 100Mb would allow around 1TB per day.

Device expanded/shrank messages are reported in the VMkernel log for VMFS-5

    Symptoms A VMFS-5 datastore is no longer visible in vSphere 5 datastores view. A VMFS-5 datastore is no longer mounted in the vSphere 5 datastores view. In the  /var/log/vmkernel.log  file, you see an entry similar to: .. cpu1:44722)WARNING: LVM: 2884: [naa.6006048c7bc7febbf4db26ae0c3263cb:1] Device shrank (actual size 18424453 blocks, stored size 18424507 blocks) A VMFS-5 datastore is mounted in the vSphere 5 datastores view, but in the  /var/log/vmkernel.log  file you see an entry similar to: .. cpu0:44828)LVM: 2891: [naa.6006048c7bc7febbf4db26ae0c3263cb:1] Device expanded (actual size 18424506 blocks, stored size 18422953 blocks)   Purpose This article provides steps to correct the VMFS-5 partition table entry using  partedUtil . For more information see  Using the partedUtil command line utility on ESX and ESXi (1036609) .   Cause The device size discrepancy is caused by an incorrect ending sector for the VMFS-5 partition on the ...