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.