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 https://aka.ms/createlabusers.