Creating bulk multiple user accounts on Active Directory Users and Computers mmc console is very boring and tough task also it is most of the time consuming and error prone tend to be lots of mistakes. If same task is done using automation it will be interesting and happen in less time. Active directory Powershell is best way to automate the task of importing users from excel file.
Download script and csv file sample
My CSV file contains below AD user properties, I tried to cover and take all properties as much as possible. If you would like to add more properties follow Microsoft official link. You will have add the same in script and header column in CSV. Below is example of one user.
Name | Patrick Heninghem | |
DisplayName | Patrick Heninghem | |
GivenName | Patrick | |
Surname | Heninghem | |
SamAccountName | PH6558 | |
UserPrincipalName | [email protected] | |
EmployeeID | 6558 | |
AccountPassword | PaTo@6558 | |
Description | Employee | |
EmailAddress | [email protected] | |
Enabled | $True | |
MobilePhone | 184.192.5.227 | |
Company | vcloud-lab.com | |
Office | Development Center | |
Department | Testing | |
Division | Software | |
Organization | Cider | |
OfficePhone | 339692762 | |
StreetAddress | 2392 Cameron Road | |
City | HIGH BRIDGE | |
State | Wisconsin | |
Country | US | |
PostalCode | 54846 | |
Path | ou=New,dc=vcloud-lab,dc=com | |
ProfilePath | \\vcloud-lab.com\Profiles\%username% |
To execute ps1 scripts follow this blog Different ways to bypass Powershell execution policy :.ps1 cannot be loaded because running scripts is disabled. Next I have kept my both the script in C:\temp folder location, change the location to folder using cd c:\temp command. I am running script and only providing csv file path.
.\New-AdUserAccount.ps1 -Path C:\temp\employees.csv
In next example if you are connecting to remote domain, I am giving explicit domain name and credential.
.\New-AdUserAccount.ps1 -Path C:\temp\employees.csv -Domain vCloud-lab.com -Credential
This code and CSV is available on Github.
#requires -version 3 <# .SYNOPSIS Create new user account in Active Directory. .DESCRIPTION The New-AdUserAccount cmdlet creates new user accounts on active directory domain controller from CSV file. It asks for parameter valid CSV file path, Optional Active directory domain name and Credential. This cmdlet uses .PARAMETER Path Prompts you for CSV file path. There are 2 alias CSV and File, This is mandetory parameter and require valid path. .PARAMETER Domain This is active directory domain name where you want to connect. .PARAMETER Credential Popups for active directory username password, supply domain admin user account for authentication. .INPUTS [String] [Switch] .OUTPUTS Output is on console directly. .NOTES Version: 1.0 Author: Kunal Udapi Creation Date: 12 June 2017 Purpose/Change: Bulk user account creation in Microsoft Active Directory domain from Excel/csv. Useful URLs: http://vcloud-lab.com/entries/active-directory/powershell-installing-and-configuring-active-directory-and-dns-server .EXAMPLE PS C:\>New-AdUserAccount -Path C:\temp\employees.csv This command create bulk users account in logged in domain from CSV file, It uses default logged in Credentials. .Example PS C:\>New-AdUserAccount -Path C:\temp\employees.csv -Domain vCloud-lab.com -Credential Here I have used all the parameters Path with user information, Domain name and Credentials. .EXAMPLE PS C:\>New-AdUserAccount -Path C:\temp\employees.csv -Domain vCloud-lab.com #> [CmdletBinding(SupportsShouldProcess=$True, ConfirmImpact='Medium', HelpURI='http://vcloud-lab.com', DefaultParameterSetName='File')] Param ( [parameter(ParameterSetName = 'File', Position=0, Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [parameter(ParameterSetName = 'Credential', Position=0, Mandatory=$true)] [alias('CSV', 'File')] [ValidateScript({ If(Test-Path $_){$true}else{throw "Invalid path given: $_"} })] [String]$Path, [Parameter(ParameterSetName='Credential', Position=1, Mandatory=$True)] [alias('ADServer', 'DomainName')] [String]$Domain, [Parameter(ParameterSetName='Credential')] [Switch]$Credential ) #$Path = 'C:\temp\employees.csv' if ($Credential.IsPresent -eq $True) { $Cred = Get-Credential -Message 'Type domain credentials to connect remote AD' -UserName (WhoAmI) } Import-Csv -Path $Path | foreach -Begin { try { Import-Module ActiveDirectory -ErrorAction Stop } catch { Write-host "Missing....Install ActiveDirectory Powershell feature -- RSAT (Remote Server Administration). Cannot Create Accounts" -BackgroundColor DarkRed Break } } -Process { $UserProp = @{ Name = $_.Name SamAccountName = $_.SamAccountName UserPrincipalName = $_.UserPrincipalName GivenName = $_.GivenName DisplayName = $_.DisplayName Surname = $_.Surname AccountPassword = (ConvertTo-SecureString -AsPlainText $_.AccountPassword -Force) Description = $_.Description EmployeeID = $_.EmployeeID EmailAddress = $_.EmailAddress Path = $_.Path MobilePhone = $_.MobilePhone Company = $_.Company Office = $_.Office Department = $_.Department Division = $_.Division Organization = $_.Organization OfficePhone = $_.OfficePhone StreetAddress = $_.StreetAddress City = $_.City State = $_.State Country = $_.Country PostalCode = $_.PostalCode ProfilePath = $_.ProfilePath ErrorAction = 'Stop' } try { $Name = $_.Name Write-Host "Processing account $Name" -NoNewline -BackgroundColor Gray switch ($PsCmdlet.ParameterSetName) { 'Credential' { if ($Credential.IsPresent -eq $false) { New-ADUser @UserProp -Server $Domain } else { New-ADUser @UserProp -Server $Domain -Credential $Cred } Break } 'File' { New-ADUser @UserProp; break } } Enable-ADAccount -Identity $_.SamAccountName -ErrorAction Stop Set-ADUser -Identity $_.SamAccountName -ChangePasswordAtLogon $True Write-Host "....Account $Name successfully created" -BackgroundColor DarkGreen } catch { Write-Host "....Processing $Name failed" -BackgroundColor DarkRed } } -End {}
Useful articles
POWERSHELL: INSTALLING AND CONFIGURING ACTIVE DIRECTORY
POWERSHELL ACTIVE DIRECTORY: ADD OR UPDATE (CHANGE) MANAGER NAME IN ORGANIZATION TAB OF USER
POWERSHELL ACTIVE DIRECTORY: ADD OR UPDATE PROXYADDRESSES IN USER PROPERTIES ATTRIBUTE EDITOR
Powershell one liner: Create multiple user accounts