Blog Post

Exchange Team Blog
1 MIN READ

Writing Exchange 2007 scripts does more than just save Nick time!

The_Exchange_Team's avatar
Feb 22, 2007

The Exchange 2007 scripting contest has concluded and a winner has been selected. Congratulations to Nick Smith of Colorado State University on his winning entry: "Return the smallest database"!

Description: Locates the smallest mailbox database (in terms of size) for automatic provisioning process. The script retrieves a collection of mailbox databases, finds the size of each database, sorts the list based upon length, then returns the name of the smallest database.

Script Code

(Get-MailboxDatabase | foreach { get-childitem $_.edbFilePath | select-object name,length} | sort -property length )[0]

The judges agreed that this is a great example of the versatility and power you can get by combining a variety of Exchange management shell cmdlets together with the built-in PowerShell cmdlets as a "one-liner". And the judges also agreed that next time we'll do better about announcing the winning entry in a more timely fashion – sorry for the long wait on the winning result to all who entered the scripting contest!

For his winning entry, Nick has won a trip to next Monday's "Ready for a New Day" Launch event in Seattle, WA that is highlighted by a keynote from Bill Gates: http://www.launchtour2007.com/PreReg/event.aspx?eventid=350.

Thanks to all who entered, and keep writing those PowerShell scripts and one-liners!

- Evan Dodds

Updated Jul 01, 2019
Version 2.0
  • Yes, this script does a fine job of selecting the smallest EDB, not the database with the least amount of mail and/or mailboxes.  This would work well if you do not have quotas and your whitespace is small.

    For those of you that may want to use this script, remember that a provisioning system would want to know the MB store with the most space and would not care if the EDB is large with a lot of white space.  In that scenario it would be better to do a running sum on the mailbox quota for each mailbox in the MB store and use that sum as your comparison value.  It can be simplified more if all mailboxes in a store have the same quota; then it is mailbox count times quota.
  • Brian,

    You are correct.  This script is useful if your databases contain a small amount of whitespace.  In my case, I was performing mailbox migrations so my whitespace amount was minimal.  There is also the caveat that the script must be run locally on the Exchange server hosting the mailbox databases.

    If you want to provision mailboxes based upon mailbox count in a database you can easily get the information with the following script:

    Get-Mailbox -ResultSize:Unlimited | Group-Object -Property:Database | Sort-Object -Property:Count

    This will give you a table of the count of mailboxes in each database.  If you want just the name of the database with the least mailbox count you can use:

    (Get-Mailbox -ResultSize:Unlimited | Group-Object -Property:Database | Sort-Object -Property:Count | Select-Object -Property:Name)[0]

    Please be aware that this script is not as quick as finding the smallest database in terms of size.
  • So, where can we download all the entries?  I'd love to see all the runners up!!
  • Hi guys,

    I can't seem to find where the OWA text strings are stored...  I am hoping to edit the text string on the OWA logon page that says "Principal Name" to something my users will recognize...  Any idea on where I can find that value to edit it?

    thanks!
    Wes
  • Exchange 2007 Discontinued Features The 10 most common Exchange Server issues and how to avoid them Exchange
  • Can this be used even with Exchange 2003 mailboxes?
  • Hi!!!

    I've been looking for a while the way to contact you, but I can't fint it. Well I need your help, actually I'm using PowerShell with the purpose to create directly an exchange & AD account. With the PowerShell commands work fine. But I need to implement this in an ASP .NET application, this one is executed in the PDC machine, but I receive this error:

    Event Type: Error
    Event Source: MSExchange ADAccess
    Event Category: General
    Event ID: 2152
    Date: 26/03/2007
    Time: 17:12:06
    User: N/A
    Computer: MOSS
    Description:
    Process PortalAccountCleaner.exe (PID=5816). An remote procedure call (RPC) request to the Microsoft Exchange Active Directory Topology service failed with error 1753 (Error 6d9 from HrGetServersForRole). Make sure that the Remote Procedure Call (RPC) service is running. In addition, make sure that the network ports that are used by RPC are not blocked by a firewall.

    For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

    The application uses the System.Management.Automation, the core of the PowerShell, in order to try to create de user account, please I need help...

    My name is Paúl Beltrán Naranjo
    My mail is pbeltran79@yahoo.com

    I live in Ecuador, thanks for your help.
  • Looking at this made me wonder if there is a way to build and exception handling into the move-mailbox command such as if my datastore is at 140gb user the next one