# encoding: ascii
# api: powershell
# title: Import-ADUser.ps1
# description: From Windows PowerShell Cookbook (O’Reilly) by Lee Holmes
# version: 0.1
# type: script
# author: Lee Holmes
# license: CC0
# x-poshcode-id: 5072
# x-archived: 2016-03-18T21:53:45
# x-published: 2016-04-11T18:27:00
#
#
#############################################################################
##
## Import-AdUser
##
## From Windows PowerShell Cookbook (O'Reilly)
## by Lee Holmes (http://www.leeholmes.com/guide)
##
#############################################################################
<#
.SYNOPSIS
Create users in Active Directory from the content of a CSV.
.DESCRIPTION
In the user CSV, One column must be named "CN" for the user name.
All other columns represent properties in Active Directory for that user.
For example:
CN,userPrincipalName,displayName,manager
MyerKen,Ken.Myer@fabrikam.com,Ken Myer,
DoeJane,Jane.Doe@fabrikam.com,Jane Doe,"CN=MyerKen,OU=West,OU=Sales,DC=..."
SmithRobin,Robin.Smith@fabrikam.com,Robin Smith,"CN=MyerKen,OU=West,OU=..."
.EXAMPLE
PS >$container = "LDAP://localhost:389/ou=West,ou=Sales,dc=Fabrikam,dc=COM"
PS >Import-ADUser.ps1 $container .\users.csv
#>
param(
## The container in which to import users
## For example:
## "LDAP://localhost:389/ou=West,ou=Sales,dc=Fabrikam,dc=COM)")
[Parameter(Mandatory = $true)]
$Container,
## The path to the CSV that contains the user records
[Parameter(Mandatory = $true)]
$Path
)
Set-StrictMode -Off
## Bind to the container
$userContainer = [adsi] $container
## Ensure that the container was valid
if(-not $userContainer.Name)
{
Write-Error "Could not connect to $container"
return
}
## Load the CSV
$users = @(Import-Csv $Path)
if($users.Count -eq 0)
{
return
}
## Go through each user from the CSV
foreach($user in $users)
{
## Pull out the name, and create that user
$username = $user.CN
$newUser = $userContainer.Create("User", "CN=$username")
## Go through each of the properties from the CSV, and set its value
## on the user
foreach($property in $user.PsObject.Properties)
{
## Skip the property if it was the CN property that sets the
## user name
if($property.Name -eq "CN")
{
continue
}
## Ensure they specified a value for the property
if(-not $property.Value)
{
continue
}
## Set the value of the property
$newUser.Put($property.Name, $property.Value)
}
## Finalize the information in Active Directory
$newUser.SetInfo()
}