A little while ago we decided to reorganize our mailbox databases. This new scheme no longer classifies users into department or employee type. We decided to move towards a balanced database structure to help keep all our edb files about the same size.

We are now using the following script to create a new mailbox within the smallest database with the most whitespace where the DB names are as follows.

If the DB name also ends with ‘ (Unlimited)’ than we will choose that for mailboxes that do not have limits.

# new-mailbox.ps1 -Identity [string] -Alias [string] -DisplayName [string] -Unlimited


# get mailbox database statistics.
$dbs = Get-MailboxDatabase -Status | Select-Object @{E={$_.Identity};L="Name"},@{E={(Get-Item ("\\" + $_.MountedOnServer + "\" + ($_.EdbFilePath -replace ":","$"))).Length / 1048576};L="EdbFileSizeMB"},@{E={$_.AvailableNewMailboxSpace.ToMB()};L="EdbWhiteSpaceMB"} | Sort-Object -Property @{E="EdbFileSizeMB";D=$false},@{E="EdbWhiteSpaceMB";D=$true}

switch ($Unlimited) { 
	$true { $filter = "(Unlimited)" }
	default { $filter = "DB[0-9]{1,4}$" } 

# get the smallest database with the most whitespace
$db = ($dbs | ?{$_.Name -match $filter})[0].Name.Name

Enable-Mailbox -Identity "DOMAIN\$identity" -Alias $alias -Database $db -DisplayName $displayname

Set-Mailbox -EmailAddresses @{add=($identity + "")}