# Update to the Create-LabUsers tool

•
•
•
•
•
•

While working on my last mini-series, I utilized my Create-LabUsers tool to automate the creation of a few thousand objects.  When I was synchronizing my AD users to another directory, I noticed that I didn’t have mailNickname populated and had to add a quick script to fill that value in.  I decided to populate it as a default value using sAMAccountName (which is what Exchange does anyway when you mailbox-enable someone).  This will be helpful if you’re trying to emulate users and groups with more messaging values filled out.

I also fixed the CreateGroups parameter. It erroneously checked for an Exchange server session during AD group creation.

And, it wouldn’t be an update if I didn’t add a new parameter:

THEWHOLESHEBANG

Yes, it’s just like it sounds.  Use this parameter with -ExchangeServer and you’ll automatically create 10,000 user mailboxes, oodles of resource mailboxes, configure all the nested security memberships you can shake a USB stick at, assign manager / direct report relationships, and inflate mailboxes like a boss (NSFW). The only thing it really doesn’t do is send some faxes.

From a user comment in the gallery where I host the tool, I received a request to allow user input so you can supply your own list of names.

IT IS NOW SO.  Just use the UserList parameter, and submit a CSV with Firstname,MiddleName,LastName columns so labelled.  If you enter a value for Count that exceeds the number of users in the UserList, the script will fill in the difference with the already included seed data.

WOOT.

I also added a method of detecting an Exchange server:

function LocateExchange
{
If (!$ExchangeServer) { Write-Log -ConsoleOutput -LogFile$Logfile -LogLevel WARN -Message "No Exchange sever specified. Attempting to locate Exchange Servers registered in configuration container."
[array]$ExchangeServers = (Get-ADObject -Filter { objectCategory -eq "msExchExchangeServer" } -SearchBase (Get-ADRootDSE).configurationNamingContext).Name If ($ExchangeServers)
{
$SuccessfulTest = @() Write-Log -ConsoleOutput -LogFile$Logfile -LogLevel INFO -Message "Found $($ExchangeServers.Count) Exchange servers registered in configuration partition. Selecting a server."
ForEach ($obj in$ExchangeServers)
{
$Result = Try { Test-NetConnection$obj -ea stop -wa silentlycontinue -Port 443 }
catch { $Result = "FAIL" } If ($Result.TcpTestSucceeded -eq $True) {$SuccessfulTest += $obj } } If ($SuccessfulTest -ge 1)
{
$ExchangeSever = (Get-Random$SuccessfulTest)
Write-Log -Logfile $Logfile -LogLevel SUCCESS -Message "Selected Exchange Server$($ExchangeServer)." } Else { Write-Log -LogFile$Logfile -LogLevel ERROR -Message "Cannot locate or connect to an Exchange server. ExchangeServer parameter must be specified if CreateMailboxes parameter is used. Error Code: EXERR01" -ConsoleOutput
Break
}
}
}
Else
{
Write-Log -ConsoleOutput -LogFile \$LogFile -LogLevel ERROR -Message "Cannot locate or connect to an Exchange Server.  ExchangeServer parameter must be specified if CreateMailboxes parameter is used. Error Code: EXERR02"
Break
}
}

You can get the updated version at http://aka.ms/createlabusers.