Sometimes you just need to have a decent amount of sample data. Recently I created an active directory to do some development using SharePoint 2010. In order to have a realistic baseline I needed to have a decent amount of fictive users.
So instead of creating a ton of users like User1 to User150 I thought of something more elaborate. Why not create random user-accounts?
After some google-research I found a blogpost with a list of first- and lastnames as CSV-files. Fantastic! This looks like a promising starting point. To spice everything up a notch I also created list of departments and functions. So this will give me quite a batch of user-data.
To mix everything quite good, I created a little piece of powershell:
# Import list of Last names from Simple Text file
$lastname=import-csv '.\lastname.csv'
# Import list of First names Simple Text file
$firstname=import-csv '.\firstname.csv'
# Import list of roles, prefixes and departments
$roles=import-csv '.\role.csv'
$prefixs=import-csv '.\prefix.csv'
$departments=import-csv '.\department.csv'
# How many names to generate
$totalnames=150
# the Header for our new CSV file
$firstline='Firstname,Lastname,Position,Department,Phone'
# Create a file called “DomainUsers.csv”
Set-content -path 'DomainUsers.csv' -value $firstline
$firstnamecount=$firstname.Count
$lastnamecount=$lastname.Count
$rolecount=$roles.Count-1
$prefixcount=$prefixs.Count-1
$departmentcount=$departments.Count-1
# Go through and Generate some names
foreach ( $namecounter in 1..$totalnames )
{
# Pick a random first and Last name
$lastnamenumber=(get-random -min 0 -max ($lastnamecount-1))
$firstnamenumber=(get-random -min 0 -max ($firstnamecount-1))
$rolenumber=(get-random -min 0 -max ($rolecount))
$prefixnumber=(get-random -min 0 -max ($prefixcount))
$departmentnumber=(get-random -min 0 -max ($departmentcount))
$FakeName=($firstname[$firstnamenumber].Firstname+','+$lastname[$lastnamenumber].Lastname)+','+
($prefixs[$prefixnumber].Prefix+' '+$departments[$departmentnumber].Department+' '+$roles[$rolenumber].Role).Trim()+','+
$departments[$departmentnumber].Department+','+
'555-'+(get-random -min 100 -max 999)+'-'+(get-random -min 1000 -max 9999)
# Echo the New name to the Screen
write-host $fakename
# and write to the File
add-content -path 'DomainUsers.csv' -value $fakename
}
I think the script doesn’t need any further explanation. The result will be a CSV-file with a bunch of random user account data.
The Import into active directory is done in a second powershell-script (just because I had that already).
param([string]$FileName, [string]$adpath)
Import-Module ActiveDirectory
function Import-Users([string]$UserFile)
{
Import-Csv $UserFile | foreach-object {
$accountName = $_.Lastname+$_.Firstname.Substring(0,2)
$displayName=$_.Firstname+" "+$_.LastName
New-AdUser $accountName -samAccountName $accountName -Company "Acme Corp." -Department $_.Department -DisplayName $displayName -GivenName $_.Firstname -Surname $_.Lastname -OfficePhone $_.Phone -Title $_.Position -CannotChangePassword $true -PasswordNeverExpires $true -Enabled $true -AccountPassword (ConvertTo-SecureString -AsPlainText "demo" -Force) -Path $spou
}
}
$spou = "OU=Acme,$adpath"
Import-Users $FileName
This is rather boring. To start the script you have to supply the name of the CSV containing the user-data and you have to supply the path to your domain in the form of “dc=acme,dc=local”. This snipplet assumes that there is an OU called Acme, where all the user accounts should be placed.
These are the files I used to generate the sample accounts: