IT tutorials
 
Applications Server
 

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

12/20/2012 11:25:40 AM
- Free product key for windows 10
- Free Product Key for Microsoft office 365
- Malwarebytes Premium 3.7.1 Serial Keys (LifeTime) 2019

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.

NOTE

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:


 
Others
 
- Installing Exchange Server 2010 into an existing Exchange Server 2007 environment
- Microsoft Dynamics CRM 2010 : Editing Dashboards
- Microsoft Dynamics CRM 2010 : Creating Additional Dashboards
- Exposing Hidden Features in Microsoft Dynamics GP 2010 : Gaining the option to Process Taxes in the General Ledger
- Exposing Hidden Features in Microsoft Dynamics GP 2010 : Improving information with Tax Dates in transactions
- Exposing Hidden Features in Microsoft Dynamics GP 2010 : Controlling Posting Dates when not posting by batch, Reducing posting steps with better Printing Control
- Using Windows Azure WCF Services in SharePoint and Office : WCF Services in Windows Azure and Excel Services
- Using Windows Azure WCF Services in SharePoint and Office : Map an External Content Type to Word 2010
- Using Windows Azure WCF Services in SharePoint and Office : Create an External Content Type by Using Web Services and BCS
- Using Windows Azure WCF Services in SharePoint and Office : Create the WCF Service
 
 
Top 10
 
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Finding containers and lists in Visio (part 2) - Wireframes,Legends
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Finding containers and lists in Visio (part 1) - Swimlanes
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Formatting and sizing lists
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Adding shapes to lists
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Sizing containers
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 3) - The Other Properties of a Control
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 2) - The Data Properties of a Control
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 1) - The Format Properties of a Control
- Microsoft Access 2010 : Form Properties and Why Should You Use Them - Working with the Properties Window
- Microsoft Visio 2013 : Using the Organization Chart Wizard with new data
Technology FAQ
- Is possible to just to use a wireless router to extend wireless access to wireless access points?
- Ruby - Insert Struct to MySql
- how to find my Symantec pcAnywhere serial number
- About direct X / Open GL issue
- How to determine eclipse version?
- What SAN cert Exchange 2010 for UM, OA?
- How do I populate a SQL Express table from Excel file?
- code for express check out with Paypal.
- Problem with Templated User Control
- ShellExecute SW_HIDE
programming4us programming4us