Managing Exchange Server 2010 : The Exchange Management Shell (part 1) - Bulk user creation in the Exchange Management Shell

1/23/2011 11:59:01 AM
Windows Server 2008 was the first Operating System that came with PowerShell 1.0 by default, although it was available as a download as far back as Windows Server 2003. In case you don't know about it, PowerShell is a very potent command-line interface which can be used to fully manage your Windows server, and the first Microsoft application to fully utilize it was Exchange Server 2007; the Exchange Management Shell is actually a superset of commands built on top of PowerShell. Product Teams within Microsoft create their own Management Shell solutions, and Exchange Server was one of the first products building theirs. Naturally, there are other tools with Management Shells, such as the System Center products for example, and many of them are also built on top of PowerShell.

Exchange Server 2010 uses PowerShell version 2 (as does Exchange Server 2007 SP2), and in addition to the command-line interface this version also has an "Integrated Scripting Environment," which is an integrated graphical user interface that can be used to easily create PowerShell scripts. As I mentioned earlier, PowerShell 2.0 is also integrated with Windows Remote Management (WS-MAN), making it possible to use PowerShell to remotely manage your Exchange 2010 environment using the standard HTTPS protocol. All that's needed is a workstation or a server that has PowerShell version 2 installed on the workstation!

Figure 1. The PowerShell Virtual Directory in the Internet Information Snap-in.

Even the Exchange Management Console uses the Management Shell (i.e. is written on top of it), and so there are some functions which are not available in the Console but are available in the Shell, such as Attachment Filtering in the anti-spam options. As the Exchange Management Shell is the primary management tool in Exchange Server 2010 (as it was in Exchange Server 2007), this development direction may hurt a little bit if you're a diehard GUI administrator.

When the Exchange Management Shell is started, you'll basically see an empty box with just a command prompt – exactly like the Windows command prompt. You can get a list of all available commands at this stage by entering Get-Command.

For the benefit of those diehard GUI administrators, a PowerShell command consists of two parts: a Noun and a Verb. Verbs can be instructions like get, set, new, remove, enable, disable etc., and the Noun component can be any objects in Exchange Server. Just combine the Noun and the Verb like this:

  • Get-ExchangeServer – retrieve a list of all Exchange 2010 Servers in the organization.

  • Set-MailboxDatabase – set a property on a Mailbox Database.

  • New-Mailbox – create a new mailbox enabled User.

  • Remove-Mailbox – deletes a user object and its mailbox.

If you want to learn more about PowerShell commands, a quick web search will turn up scores and scores of learning resources.


Besides the Exchange Management Shell, there's also the Windows 2008 PowerShell on your server or workstation. If you start the PowerShell instead of the Exchange Management Shell, you'll see a Command Prompt with a blue background, and the Exchange Server 2010 cmdlets won't be available. If you are new to PowerShell and the Exchange Management Shell, there will be a day when you start the wrong Shell.

1. Exchange Management Shell help

If there's anything you're not sure about when you're using the EMS, you have a friend in the form of the Quick Reference Guide, located in C:\Program Files\Microsoft\ExchangeServer\v14\bin\en\ExQuick.htm. This contains the most important and most-used cmdlets, and their variables.

If you need help on the fly, it's also possible to use the Shell's built-in help function. To get a list of all available help items, just type help *. If you need help about a specific cmdlet, just type help and the name of the cmdlet. To get help about mail-enabling an existing user, for example, just type help enable-mailbox.

2. Pipelining

Another great feature in PowerShell and the Exchange Management Shell is the pipelining function, which uses the output of one cmdlet as the input for a second command. This can drastically reduce the amount of work you need to put in to accomplish relatively complex tasks, and is more or less just limited by your own ingenuity.

For example, if you want to move all mailboxes in a mailbox database called "Mailbox Database 1988197524" to another mailbox database called "Mailbox Database 0823751426", you can use the following command:

This is what happens:

Get-Mailbox –Database "Mailbox Database 1988197524" retrieves a list of all mailboxes in this particular database. The output of this cmdlet is used as the input of the second cmdlet, the request to online move mailboxes to the other database. It's also possible to use more specific queries. For example, to get a list of all mailboxes whose name starts with "Chris" you would use the following command:

You can then use this as the input for a request to move all these mailboxes to another database:

3. Bulk user creation in the Exchange Management Shell

This can be very useful, particularly when you need to create a lot of mailboxes in a hurry. Suppose you have an Organizational Unit named "Sales" in Active Directory, where 100 user objects reside. This command will create a mailbox for each user in this Organizational Unit:

When there are multiple Organizational Units called "Sales" you have to specify the complete path of the Organizational Unit:

It's also possible to filter the output of the Get-User command with the –Filter parameter. For example, to Mailbox-Enable all users whose company attribute is set to "Inframan," enter the following command:

If you want to be even more specific, for example to Mailbox-Enable all users whose company attribute is set to "Inframan" and whose department attribute is set to "Intern," enter the following command:

The following operations are available for the –Filter option:

  • -and

  • -or

  • -not

  • -eq (equals)

  • -ne (does not equal)

  • -lt (less than)

  • -gt (greater than)

  • -like (string comparison)

  • -notlike (string comparison).

In some cases, you'll find it useful to import a list of users from a .CSV file. This list can be exported from another Active Directory or even from an HR (Human Resources) application. It is actually relatively easy to import a .CSV file using PowerShell; the only thing that you need to be mindful of is that the –Password option doesn't accept clear text input. The input to this field has to be converted to a secure string:

On the first three lines, three parameters are set that are used during the actual creation of the user and the mailbox. The file is read in a ForEach loop, and the actual users and the mailboxes are created as this loop progresses.

The SecurePassword function reads the password from the output .CSV file and converts it into a secure string which is used, in turn, as the password input during the creation of the users. The .CSV file itself is formatted like this:

To make this script usable, save the script file as "create.ps1" in a directory like c:\scripts. You'll also need to save the .CSV output file as users.csv in the same directory. To actually use the script, open a PowerShell command prompt, navigate to the c:\scripts directory and enter the following command:

PS4 game trailer XBox One game trailer
WiiU game trailer 3ds game trailer
Top 10 Video Game
-   SkyScrappers [PS4/XOne] Alpha Gameplay Trailer
-   Smite [XOne/PC] Open Beta Trailer
-   Tom Clancy’s Ghost Recon Phantoms [PC] v2.0 Update Trailer
-   The Escapists: The Walking Dead [XOne/PC] Trailer
-   Persona 4: Dancing All Night [Vita] Rise Kujikawa Trailer
-   The Peanuts Movie: Snoopy's Grand Adventure [3DS/WiiU/X360/XOne/PS4] Debut Trailer
-   Minecraft: Think's Lab Short - Minion
-   The Bard's Tale IV [PC] Big Push Trailer
-   LEGO Dimensions [WiiU/PS3/Ps4/X360/XOne] Doctor Who Trailer
-   Quern: Undying Thoughts [PC] Kickstarter Trailer
-   EA Sports Rory McIlroy PGA Tour [PS4/XOne] Quick Rounds Gameplay Trailer
-   DiRT Rally [PC] World RX Trailer
-   Company of Heroes 2: The British Forces [PC] Trailer
-   SDCC 2015: Plants vs. Zombies Garden Warfare 2 | Seeds of Time Map Gameplay Reveal
-   Microsoft HoloLens: Partner Spotlight with Case Western Reserve University
Game of War | Kate Upton Commercial