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: