Microsoft releases the new (re-branded) Exchange 2013 Server Role Requirements Calculator!

Just moments ago, Microsoft unleashed the all-new (or should I say re-branded) Exchange 2013 Server Role Requirements Calculator to the world.
Along with it’s release, Microsoft also made clear that multi-role deployments are still the way forward:

“Like with Exchange 2010, the recommendation in Exchange 2013 is to deploy multi-role servers”

Re-branding doesn’t mean that it changed completely. At least not the interface.
So don’t worry, the tool itself still looks very familiar and works very much in the same way as previous builds of the tool did.
Most of the changes were made under the hood. The tool now also provides sizing information for the Client Access Server role and takes into account the changes introduced by Exchange 2013′s new architecture.

Alongside a series of other improvements, a lot of changes were made in the area of High Availability calculations, including:

You can now specify the Witness Server location, either primary, secondary, or tertiary datacenter.
- The calculator allows you to simulate WAN failures, so that you can see how the databases are distributed during the worst failure mode.
- The calculator allows you to name servers and define a database prefix which are then used in the deployment scripts.
- The distribution algorithm supports single datacenter HA deployments, Active/Passive deployments, and Active/Active deployments.
- The calculator includes a PowerShell script to automate DAG creation.

In the event you are deploying your high availability architecture with direct attached storage, you can now specify the maximum number of database volumes each server will support. For example, if you are deploying a server architecture that can support 24 disks, you can specify a maximum support of 20 database volumes (leaving 2 disks for system, 1 disk for Restore Volume, and 1 disks as a spare for AutoReseed).

To download the Calculator and have a look at the full article for the Exchange team, have a look here: http://blogs.technet.com/b/exchange/archive/2013/05/14/released-exchange-2013-server-role-requirements-calculator.aspx

Enjoy!

Michael

Finally! First Exchange 2013 Sizing Information released.

Yesterday, Microsoft’s CXP team (Customer Experience Team) released a lengthy blog post containing practical information towards sizing of Exchange 2013. A moment we all have been waiting for since the product was released in October of last year.

With this new information, it will finally become possible to create a decenter design and migration approach.

Unfortunately, there’s still no trace of the Mailbox Server Role Requirements Calculator which is – let’s face it – the reference tool when properly sizing an Exchange Server environment. The only mention in the article states that it’s coming somewhere later this quarter. Looks like we’re going to have to be a little more patient, don’t we?

Nonetheless, with the information from the article, you should be set on your way as it contains all the information you need to properly size a new Exchange 2013 Server environment. Please do keep in mind that this is Microsoft’s first guidance on this topic and is likely to change over time as customers and also Microsoft gain more experience with the product in more real-life deployments.

Over the course of the next weeks, I hope to provide you with some comparative figures between Exchange 2010 and Exchange 2013, but for now it looks like Exchange 2013 is quite hungry on Memory and CPU. However, from an architecture point-of-view, it’s not all that surprising. After all, memory and CPU are relatively cheap these days.

Stay tuned for more info!

To read the original article containing the different calculations, have a look at the following article:

http://blogs.technet.com/b/exchange/archive/2013/05/06/ask-the-perf-guy-sizing-exchange-2013-deployments.aspx

MEC 2014: March 31st–April 2nd in Austin, Texas!

Just a few moments ago, Microsoft announced the official dates and location for the next version of the Microsoft Exchange Conference or short MEC.

This time, MEC will be held in Austin, Texas from March 31st to April 2nd. More information will probably be made available through www.iammec.com over the course of the next weeks and months.

While 2014 might seem very far away, it doesn’t hurt to start planning ahead of time. So, don’t hesitate! Go up to your boss and ask permission to go! I, for one, will definitely be there!

Hope to see you all there,

Michael


image courtesy: the internet

[updated] Script: putting Exchange Server 2013 into Maintenance Mode

Update

v1.4: update the script to include some additional error checks. First it will check whether the person who is executing the script has local admin rights. If not, the script will throw a warning and exit. Secondly it will also check whether the TargetServer name can be resolved. If it’s not an FQDN, it will resolve it to an FQDN. If it cannot be resolved, an error will be thrown.

v1.3: after some feedback from Brian Reid (thanks Brian!), I’ve finally updated the script to include the “Redirect-Message” cmdlet. This will ensure that the queues will drain more quickly on the server by moving messages from one server to another. Have a look at Brian’s blog if you need more info: http://blog.c7solutions.com/2012/10/placing-exchange-2013-into-maintenance.html

v1.2: Maarten Piederiet emailed me pointing out that he had encountered some issues while using the script. Apparently, while draining the message queues, the script ran forever because it waits for every queue to become empty; including Poison- & Shadow Redundancy queues. To avoid this from happening, he made a minor change to the script to now excluded both queues. Thanks for the tip!

Introduction

In Exchange 2010 one had the option to put a Mailbox server which was part of a DAG into “maintenance mode” by running the “StartDagServerMaintenance.ps1” script that was included with the product. Likewise StopDagServerMaintenance.ps1 was used to pull a server out of this so-called maintenance state. In fact, this script would move any active mailbox databases to another node in the DAG and mark this server as temporarily unavailable to the other servers. That way, if a failover would occur during the server was in ‘maintenance mode’ you wouldn’t risk that it ended up as a valid failover target.

Exchange 2013 now has the ability to go beyond what was possible before and extend this functionality. You now have the possibility to put an entire server into maintenance mode, meaning that also components like e.g. Transport Service or the Unified Messaging Call Router are temporarily put on hold why you do some work on your server.

There might be various reasons to put a server into maintenance mode. For instance when you need to install software or you want to do some troubleshooting without affecting users that might have a mailbox in an active mailbox database on that server. To facilitate the process, I created two scripts which will automatically put an Exchange 2013 Server in or take it back out of Maintenance Mode.

The manual process

The process for putting an Exchange 2013 server into maintenance mode is relatively straightforward. To enable the Maintenance Mode, you must run the commands below.

If the server is a Mailbox server and before you can disable the transport service, all active queues need to be drained first. To help clearing out the queues, existing messages on the server will be moved to another server. Please note that the targetserver value has to be a FQDN:

Set-ServerComponentState  -Component HubTransport -State Draining -Requester Maintenance
Redirect-Message -Server  -Target <server_fqdn>

If the server is part of a DAG, you must also run these commands:

Suspend-ClusterNode
Set-MailboxServer  -DatabaseCopyActivationDisabledAndMoveNow $true
Set-MailboxServer  -DatabaseCopyAutoActivationPolicy Blocked

Once all queues are empty, you can disable all components:

Set-ServerComponentState  -Component ServerWideOffline -State Inactive -Requester Maintenance

Taking the server out of Maintenance Mode is a matter of simply reversing the actions we took to put it into Maintenance Mode.

First, we reactive all components:

Set-ServerComponentState  -Component ServerWideOffline -State Active -Requester Maintenance

If the server is part of a DAG, you need to reactive it in the cluster (by resuming the cluster node):

Resume-ClusterNode
Set-MailboxServer  -DatabaseCopyActivationDisabledAndMoveNow $false
Set-MailboxServer  -DatabaseCopyAutoActivationPolicy Unrestricted

If the server is a Mailbox Server, the transport queues need to be resumed as well:

Set-ServerComponentState –Identity  -Component HubTransport -State Active -Requester Maintenance

Using the scripts

Sometimes it can take a while before active queues are drained. Because I didn’t always want to wait before the screen and periodically check the queues myself, I created two little script that fully automate the process explained above.

The first script, Start-ExchangeServerMaintenanceMode.ps1 will put a server into Maintenance Mode, whereas Stop-ExchangeServerMaintenanceMode.ps1 can be used to take a server out of the maintenance state.

Please note that the scripts rely on built-in Exchange functions and therefore need to be run from the Exchange Management Shell.

To make sure that these scripts can be re-used easily, I created cmdlets for both actions. This means that examples and help are provided within the script. Also, if you dot-source the script in your PowerShell profile you will be able to call both functions/cmdlets at any time (without having to call the script again).

To dot-source a script in your profile, simple add the following code into your PS profile:

. .//Start-ExchangeServerMaintenanceMode.ps1
. .//Stop-ExchangeServerMaintenanceMode.ps1

Once that is done, you can call these cmdlets by simply running the following command from within the Exchange Management Shell:

Start-ExchangeServerMaintenanceMode –Server
Stop-ExchangeServerMaintenanceMode –Server 

Additional information

I’ve added a loop in the Start-ExchangeServerMaintenanceMode script that will check the transport queues every minute until they’re empty. Only when the queues are empty, it will continue and mark a server as being in maintenance mode. This is done via a separate function in the script:

function evaluatequeues(){
    $MessageCount = Get-Queue -Server $Server| ?{$_.Identity -notlike "*\Poison" -and $_.Identity -notlike"*\Shadow\*"} | Select MessageCount
    $count = 0
    Foreach($message in $MessageCount){
        $count += $message.messageCount
    }
    if($count -ne 0){
        Write-Host "Sleeping for 60 seconds before checking the transport queues again..." -ForegroundColor Yellow
        Start-Sleep -s 60
        evaluatequeues
    }
    else{
        Write-Host "Transport queues are empty." -ForegroundColor Green
        Write-Host "Putting the entire server into maintenance mode..." -ForegroundColor Green
        Set-ServerComponentState $Server -Component ServerWideOffline -State Inactive -Requester Maintenance
        Write-Host ""
        Write-Host "Done! Server $Server is put succesfully into maintenance mode!"
    }

}

The scripts

Below you find links to my SkyDrive from where you can download the scripts. Enjoy!

Start-ExchangeServerMaintenanceMode (v1.4)

Stop-ExchangeServerMaintenanceMode (v1.3)

Disclaimer: these scripts are provided “as-is” and are to be used on your own responsibility. I do not and cannot take any reliability for the use of these scripts in your environment. Please use with caution and always test them before use.

If you have suggestions, comments or think things can be better: please let me know! Your feedback is greatly appreciated!

A summary of Exchange 2013 RTM Cumulative Update 1

A few hours ago, Microsoft (finally) released Cumulative Update 1 (CU1) for Exchange 2013 RTM. Many of us have been waiting for this update as it was the last prerequisite standing in the way of upgrading to Exchange 2013 when you already had Exchange running prior.

I’m pretty sure that over the course of the next few weeks, we will be seeing lots of interesting new information coming out. For now, we’ll have to settle with Microsoft’s promise to publish the release notes + updated documentation anytime soon. As Bharat Suneja already mentioned, it’s scheduled to be release on the 3rd of April:

image

Where to get it?

First things, first. The newer bits are available from the following link:

http://www.microsoft.com/en-us/download/details.aspx?id=38176

Yes, you’re not dreaming. It’s 1.3GB. How is that possible? Simple. Cumulative Updates are quite different from Update Rollups. They are entire new builds of the product that don’t require a prior version to be installed. Hence the size. For more information on this new “update strategy”, have a look here.

What’s new?

The CU is “huge”. And I don’t mean that literally (although it’s literally huge as well). Next to a lot of fixes (that should’ve made it in RTM to be honest), will definitely make your life running Exchange 2013 a lot easier.

Next to that, there are some things that have changed and have been added. To name a few:

The curious health problems of the Office Web Apps Server

As I described a while back, the Office Web Apps Server (formerly known as WAC) is required by both Lync 2013 and Exchange 2013 in order to make some of the functionalities work. Admitted, Exchange 2013 doesn’t actually require Office Web Apps, but if you want to take advantage of the preview-capabilities in Outlook Web App, you’ll have to deploy it anyway.

Installing and configuring the Office Web Apps Server isn’t all that difficult. If you followed my article correctly, you should end up with a working setup.

Curiously enough, it was a customer that pointed this out to me, if you run Get-OfficeWebAppsMachine on one of your servers, you’ll see that the health state of the Office Web Apps server is “Unhealthy”; even if it’s working as expected:

SNAGHTMLb0cea0a

In the meanwhile, I have been digging into the issue but haven’t found the reason why it is reporting "Unhealthy” or even how to do anything about it. TechNet is really lacking on documentation as there’s not much info about it out there…

It seems that Office Web Apps is regularly polling for the state of several components and – based on the results – defines the health state. Given that some of these polls are failing (I have no idea why), I suspect the HealthStatus being set to Unhealthy.

If it were pure aesthetically, you could go to the following path and alter the topology.xml file, because it’s that file from where the Get-OfficeWebAppsMachine reads it state:

image

image

Anyway, as long as there’s no confirmation from Microsoft you should probably stay away from editing this file. Additionally, it will get overwritten when the server get polled for it’s health again.

Either way, I’m looking to get to the bottom of this. As soon as I’ve found something useful, I’ll get back to you. One thing is clear though: along the way of trying to get this solved, I did find some other interesting stuff I’d like to share with you soon.

In the meanwhile, if you have more information or if you see the same (weird) behavior, feel free to leave a message!

Create a function to connect to and disconnect from Exchange Online

[Update 26/03/2013] I wanted to share a quick update to the script with you. Over the past few weeks, I have hitting an issue at some customers that used an outbound authenticating proxy which prevented me from connecting to Exchange Online using the functions from my profile. As such, I have tweaked the script a bit to now include a switch (-ProxyEnabled) that, when used, will trigger PowerShell to authenticate the session against the proxy.

The new script now looks like this:

function Connect-ExchangeOnline{
    [CmdLetBinding()]
    param(
        [Parameter(Position=0,Mandatory=$false)]
        [Switch]
        $ProxyEnabled
    )

	if($ProxyEnabled){
	    $Session = New-Pssession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential (Get-Credential) -Authentication Basic -AllowRedirection -sessionOption (New-PsSessionOption -ProxyAccessType IEConfig -ProxyAuthentication basic)
	}
	else{
	    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Authentication Basic -AllowRedirection -Credential (get-credential)
	}

	Import-PSSession $session
}

function Disconnect-ExchangeOnline {
	Get-PSSession | ?{$_.ComputerName -like "*outlook.com"} | Remove-PSSession
}

[Original Post]

Office 365 allows you to connect remotely to Exchange online using PowerShell. However, if you had to type in the commands to connect every time, you would be losing quite some time:

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri <a href="https://ps.outlook.com/PowerShell">https://ps.outlook.com/PowerShell</a> -Authentication Basic -Credential (Get-Credential) -AllowRedirection

Import-PSSession $session

Equally, to disconnect, you’d have to type in the following command each time

Get-PSSession  | ?{$_.ComputerName -like "*.outlook.com"} | Remove-PSSession

However, it is relatively easy to add both commands into a function which you can afterwards add them into your profile:

Function Connect-ExchangeOnline{
   $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri <a href="https://ps.outlook.com/powershell">https://ps.outlook.com/powershell</a> -Authentication Basic -AllowRedirection -Credential (Get-Credential)
   Import-PSSession $session
}

Function Disconnect-ExchangeOnline{
   Get-PSSession  | ?{$_.ComputerName -like "*.outlook.com"} | Remove-PSSession
}

To add these functions to your PowerShell profile, simply copy-past them into your profile. To find out where your profile-file is located, type the following:

PS C:\> $profile
C:\Users\Michael\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

To start using the functions, all you have to do is to call them from the PowerShell prompt:

PS C:\> Connect-ExchangeOnline

cmdlet Get-Credential at command pipeline position 1
Supply values for the following parameters:
Credential

WARNING: Your connection has been redirected to the following URI:
https://pod51014psh.outlook.com/PowerShell-LiveID?PSVersion=3.0

PS C:\> Disconnect-ExchangeOnline

Note   there is no output for the Disconnect-ExchangeOnline function

Follow

Get every new post delivered to your Inbox.

Join 40 other followers