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.
DB01
DB02
DB03
…
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 param{ [string]$Identity, [string]$Alias, [string]$DisplayName, [switch]$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 + "@domain.com")}