Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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.