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


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

Comments (10)
  1. Brian.Kronberg says:

    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.

  2. Nick Smith says:

    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.

  3. Alex says:

    So, where can we download all the entries?  I’d love to see all the runners up!!

  4. pesos says:

    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

  5. Exchange says:

    pesos,

    OWA customization is something that we are working on for a future release, hopefully we will have something on it later this year. The only thing that we have now is this:

    http://msexchangeteam.com/archive/2006/08/30/428793.aspx

    But I don’t think it covers what you need.

  6. Anonymous says:

    Exchange 2007 Discontinued Features The 10 most common Exchange Server issues and how to avoid them Exchange

  7. Matt says:

    Can this be used even with Exchange 2003 mailboxes?

  8. Makron says:

    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.

  9. rDale says:

    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

Comments are closed.