Multiple updates released including SP3 for Exchange 2010

Service Pack 3 for Exchange 2010

Microsoft has released a number of updates. The big news here is the release of Service Pack 3 for Exchange 2010 with the two following major features:

Coexistence with Exchange 2013
Support for Windows Server 2012

Great new for all of you wanting to implement Exchange 2013 in your existing environments. But coexistence also requires an update of Exchange 2013.  CU1 for Exchange 2013 is scheduled for release in Q1 so it should be released soon. That said, installing Exchange 2013 in a existing Exchange 2010 Service Pack 3 environment WILL work all tough it is not supported. But it enables you to start running tests in your lab and prepare for the release of CU1.

More information on SP3 for Exchange 2010 can be found here.
If you want to go straight to the download you can find it here.

More updates…

But wait, there is more… Microsoft has also released Update Rollup 6 for Exchange Server 2010 SP2 and Update Rollup 10 for Exchange 2007 SP3. Both are considered security releases so they will be available on Windows Update.

More information on these can be found here.
Update Rollup 6 for Exchange Server 2010 SP2 can be found here.
Update Rollup 10 for Exchange 2007 SP3 can be found here.

One-liner to export mailbox size, quotas and more to a CSV file

I got a question form a friend if I could help and sort out a command that exported mailbox size and quotas to a CSV file  for him. This should work for both Exchange Server 2007 and 2010, here is how we did it:

First run a get mailbox command:

Get-Mailbox -ResultSize Unlimited

Then we add a pipe and a number of attributes we want to get:

Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName, IssueWarningQuota, ProhibitSendQuota

We continue with adding two that performs Get-MailboxStatistics to receive attributes from the mailbox that the Get-Mailbox Cmdlet does not give us:

@{label=”TotalItemSize(MB)”;expression={(Get-MailboxStatistics $_).TotalItemSize.Value.ToMB()}} and @{label=”ItemCount”;expression={(Get-MailboxStatistics $_).ItemCount}}

Then we add another attribute that Get-Mailbox gives us:

Database

And to finish it off we export the results to a CSV file after another pipe:

| Export-Csv “UserMailboxSizes.csv” –NoTypeInformation

And the complete command again with all parts combined together:

Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName, IssueWarningQuota, ProhibitSendQuota, @{label="TotalItemSize(MB)";expression={(Get-MailboxStatistics $_).TotalItemSize.Value.ToMB()}}, @{label="ItemCount";expression={(Get-MailboxStatistics $_).ItemCount}}, Database | Export-Csv "C:\Scripts\UserMailboxSizes.csv" -NoTypeInformation

This command can of course be modified and you can add other attributes or functions. In the following example I use where to get only the mailboxes that does not use the database default quota.

Where {$_.UseDatabaseQuotaDefaults -eq $false

And the complete command:

Get-Mailbox -ResultSize Unlimited | Where {$_.UseDatabaseQuotaDefaults -eq $false} | Select-Object DisplayName, IssueWarningQuota, ProhibitSendQuota, @{label="TotalItemSize(MB)";expression={(Get-MailboxStatistics $_).TotalItemSize.Value.ToMB()}}, @{label="ItemCount";expression={(Get-MailboxStatistics $_).ItemCount}}, Database | Export-Csv "C:\Scripts\UserMailboxSizes.csv" -NoTypeInformation

There you go, enjoy and do not hesitate to let me know if you have any questions!

Exchange Server Version Numbers

A list of all versions of Exchange server released so far including version numbers.

Friendly name Version number
Microsoft Exchange Server  4.0 4.0.837
Microsoft Exchange Server  4.0 (a) 4.0.993
Microsoft Exchange Server  4.0 SP1 4.0.838
Microsoft Exchange Server  4.0 SP2 4.0.993
Microsoft Exchange Server 4.0 SP3 4.0.994
Microsoft Exchange Server 4.0 SP4 4.0.995
Microsoft Exchange Server 4.0 SP5 4.0.996
   
Microsoft Exchange Server 5.0 5.0.1457
Microsoft Exchange Server 5.0 SP1 5.0.1458
Microsoft Exchange Server 5.0 SP2 5.0.1460
   
Microsoft Exchange Server 5.5 5.5.1960
Microsoft Exchange Server 5.5 SP1 5.5.2232
Microsoft Exchange Server 5.5 SP2 5.5.2448
Microsoft Exchange Server 5.5 SP3 5.5.2650
Microsoft Exchange Server 5.5 SP4 5.5.2653
   
Microsoft Exchange 2000 Server 6.0.4417
Microsoft Exchange 2000 Server (a) 6.0.4417
Microsoft Exchange 2000 Server SP1 6.0.4712
Microsoft Exchange 2000 Server SP2 6.0.5762
Microsoft Exchange 2000 Server SP3 6.0.6249
Microsoft Exchange 2000 Server post-SP3 6.0.6487
Microsoft Exchange 2000 Server post-SP3 6.0.6556
Microsoft Exchange 2000 Server post-SP3 6.0.6603
Microsoft Exchange 2000 Server post-SP3 6.0.6620.5
Microsoft Exchange 2000 Server post-SP3 6.0.6620.7
   
Microsoft Exchange Server 2003 6.5.6944
Microsoft Exchange Server 2003 SP1 6.5.7226
Microsoft Exchange Server 2003 SP2 6.5.7638
Microsoft Exchange Server 2003 post-SP2 6.5.7653.33
Microsoft Exchange Server 2003 post-SP2 6.5.7654.4
   
Microsoft Exchange Server 2007 8.0.685.24 or 8.0.685.25
Microsoft Exchange Server 2007 SP1 8.1.0240.006
Microsoft Exchange Server 2007 SP2 8.2.0176.002
Microsoft Exchange Server 2007 SP3 8.3.0083.006
   
Microsoft Exchange Server 2010 14.00.0639.021
Microsoft Exchange Server 2010 SP1 14.01.0218.015

Multiple Update Rollups released

Microsoft has release a number of rollups for Exchange Server 2007 and 2010. If you want to go directly to the downloads use the following links:

Change a resource mailbox booking window in Exchange 2007

Here is a quick tip on how to change the Booking Windows for a resource mailbox in Exchange Server 2007. This value is set to 180 days by default and many organizations find this a bit low.

To change this value use the following command:
Set-MailboxCalendarSettings "<ResourceMailboxName>" -BookingWindowInDays <NumberOfDays>

Example:
Set-MailboxCalendarSettings "test3" -BookingWindowInDays 365

If you want to set this for all room mailboxes at once use the following command:
Get-Mailbox | Where {$_.RecipientTypeDetails -eq "RoomMailbox"} | Set-MailboxCalendarSettings -BookingWindowInDays 365

Thanks for reading, let me know if you have any questions!

My post on the same topic for Exchange 2010 can be found here!

Exchange Server 2007 Service Pack 3 available for download!

Yesterday Microsoft released SP3 for Exchange Server 2007. One of the major updates is added support for Windows Server 2008 R2. It’ is very nice too see that Microsoft listens to its customers, this update is a direct result of that.

You can find the update here:
http://www.microsoft.com/downloads/details.aspx?FamilyID=1687160b-634a-43cb-a65a-f355cff0afa6&displaylang=en

And more information here:
http://technet.microsoft.com/en-us/library/ff607233(EXCHG.80).aspx
http://msexchangeteam.com/archive/2010/06/21/455145.aspx

Small script to list a users distribution group memberships in Exchange 2007 and 2010

I have created a small script to list the current group membership for a specific user. Save the code to a ps1 file and execute.

$User = read-host -Prompt "Enter Username"
"User " + $User + " is a member of the following groups:"

ForEach ($Group in Get-DistributionGroup)
{
   ForEach ($Member in Get-DistributionGroupMember -identity $Group | Where { $_.Name –eq $User })
   {
      $Group.name
   }
}

For example, I saved the file as c:\DGMemebrship.ps1 and executed it using the following command:
./DGMemebrship.ps1

DGMembership

Manage resource work hours in Exchange Server 2007 and 2010

In this post I will show you how to configure the way Exchange handles work hours for a resource mailbox.

Exchange 2007

To set the work hours you can use OWA or Outlook.

OWA
You can find the settings under Options and Calendar Options. Edit the Start Time and End Time of Calendar Work Week.

workhours1

For OWA client, the Working hours configuration is saved in a hide message in Calendar folder, you can use MFCMapi to check the configuration:

  1. Run MFCMapi tool and logon the user mailbox (Online Mode)
  2. Open mailbox and expand Root Container and Top of Information Store
  3. Right click the Calendar folder and click Open Associated Contents Table
  4. Click the message which subject is IPM.Configuration.WorkHours
  5. Open the property 0x7C080102 which contains the Work Hours setting.

Outlook
You can either configure the settings using the Outlook client, in Outlook 2010 the settings are in Outlook Options, Calendar and Work Time. Also, the Working hours configuration is saved in following registry key on the client:

HKCU\Software\Microsoft\Office\12.0\Outlook\Options\Calendar
CalDefEnd
CalDefStart

When the work hours are set, you will have to run the following command to make sure that the mailbox only accept bookings during work hours:
Set-MailboxCalendarSettings -Identity <mailboxidentity> -ScheduleOnlyDuringWorkHours $true

Example:
Set-MailboxCalendarSettings -Identity test3 -ScheduleOnlyDuringWorkHours $true

Exchange 2010

In Exchange Server 2010 it’s a bit different. First, this is how you configure the actual work hours:
Set-MailboxCalendarConfiguration -Identity <mailboxidentity> -WorkingHoursStartTime <start time in format 00:00:00> -WorkingHoursEndTime <end time in format 00:00:00>

Example:
Set-MailboxCalendarConfiguration -Identity test3 -WorkingHoursStartTime 08:30:00 -WorkingHoursEndTime 17:30:00

workhours2

And if you want to change the settings for all room mailboxes:
Get-Mailbox | Where {$_.RecipientTypeDetails -eq "RoomMailbox"} | Set-MailboxCalendarConfiguration -WorkingHoursStartTime 08:30:00 -WorkingHoursEndTime 17:30:00

workhours3

There are plenty more settings that you can configure, to check the current settings use the following:
Get-Set-MailboxCalendarConfiguration -Identity <mailboxidentity> | fl

resourceconfig1

When this is done you will have to set the resource mailbox to accept bookings only during work hours:
Set-CalendarProcessing -Identity <mailboxidentity> -ScheduleOnlyDuringWorkHours $true

Example:
Set-CalendarProcessing -Identity test3 -ScheduleOnlyDuringWorkHours $true

workhours4

Thanks for reading! And as usual, if you have any further questions don’t hesitate to let me know!

Exchange 2010 Client Access behavior in coexistence with Exchange 2003 and 2007

I answered a post on Technet regarding this so I thought I would post it here as well.

There is no possibility to replace a Exchange 2007 CAS server with a Exchange 2010 CAS server. Exchange 2010 CAS does not support rendering mailboxes from legacy versions of Exchange. In the scenarios below I have included both Exchange 2003 and 2007.

For OWA:

  • When the Exchange 2007 mailbox is in the same AD Site as Exchange 2010 CAS, Exchange 2010 CAS will silently redirect the session to the Exchange 2007 CAS.
  • When the Exchange 2007 mailbox is in another Internet facing AD Site, Exchange 2010 CAS will manually redirect the user to the Exchange 2007 CAS.
  • When the Exchange 2007 mailbox is in a non-Internet facing AD site, Exchange 2010 CAS will proxy the connection to the Exchange 2007 CAS.
  • When the server is running Exchange 2003, Exchange 2010 CAS will silently redirect the session to a pre-defined URL.

For ActiveSync:

  • When the Exchange 2007 mailbox is in the same AD Site as Exchange 2010 CAS and the device supports Autodiscover, Exchange 2010 CAS will notify the device to synchronize with Exchange 2007 CAS.
  • When the Exchange 2007 mailbox is in the same AD Site as Exchange 2010 CAS and the device does not support Autodiscover, Exchange 2010 CAS will proxy the connection to Exchange 2007 CAS.
  • When the Exchange 2007 mailbox is in a non-Internet facing AD site, Exchange 2010 CAS will proxy the connection to the Exchange 2007 CAS.
  • When the server is running Exchange 2003, Exchange 2010 CAS will proxy the connection.

For Outlook Anywhere:

When migrating Outlook Anywhere you move the Outlook Anywhere endpoint from the Exchange Exchange 2007 CAS to the Exchange 2010 CAS. Exchange 2010 CAS will then proxy the Outlook MAPI RPC to either the Exchange 2007 Mailbox server or the Exchange 2010 Mailbox server depending on the mailbox home server.

So in all scenarios for OWA and Activesync you would still need the Exchange 2007 CAS to handle requests for Exchange 2007 mailboxes. Thanks for reading and as usual, please let me know if you have any further questions!

Create, View and Modify Custom DSN Messages in Exchange 2007 and 2010

Following up on my post about NDRs, this post describes how to work with custom DSN messages.

First, let’s talk a bit about DSN messages or Delivery Status Notifications. DSNs are system messages intended to report the delivery status of a messages back to the sender, informing him or her if and why the message fail for any reason. Delivery status notifications comes in three different types:

  • Success (2.X.X numeric codes)
  • Persistent transient failure (4.X.X numeric codes)
  • Permanent failures (5.X.X numeric codes)

When a message can not be delivered for some reason a error is reported and the server maps this error to a DSN. The 5.X.X are described as permanent failures and are the most common messages. However, you may also see 4.X.X codes from times to times .

Delivery status notifications are addressed in RFC 1891 and 1893. More detailed information on codes can be found here:

http://support.microsoft.com/kb/256321/
http://support.microsoft.com/kb/284204

New Custom System Message

Now, on to the fun stuff! In my example, I will create a custom DSN for code 5.7.1 and enable it for external senders. I will also create a custom DSN for code 5.1.1 for internal senders. Lets start with looking at the commands…

New-SystemMessage creates a new custom system message. you will have to include the code you want to “replace” and also the message you want the DSN to include. In my example the command looks like this:

New-SystemMessage -DSNCode 5.7.1 -Text "This server does not accept relaying" -Internal $False -Language En

I also created one message for Swedish using -Language Sv.

systemmessage1

In my second example i want my custom DSN to be sent to internal senders:

New-SystemMessage -DSNCode 5.1.1 -Text "The user does not exist, please contact the helpdesk for further assistance" -Internal $True -Language En

Again, I created a second message for Swedish as well.

systemmessage2

And here are the result when I tried to send a messages to the non-excisting address test@sundis.local:

systemmessage8

View Both Custom and Original System Messages

So, the message is created, now what? Well, if you want to view your new message you can use the following command:

Get-SystemMessage

This lists all custom system messages and note that the identity is presented in a path-like way starting with the language.

systemmessage3

You can also list the original message that matches the newly created custom system message. If you run the following command you will list all system messages.

Get-SystemMessage –Original

To narrow it down, use where as in this example:

Get-SystemMessage -Original | where {$_.identity –eq ‘en\internal\5.7.1’}

systemmessage4

Change a Custom System Message

If you want to change a custom system message you can do so easily using Set-SystemMessage as in this example:

Set-SystemMessage -Identity en\External\5.7.1 -Text "This server does not accept relaying, so don’t even try it!"

systemmessage5

Remove Custom System Messages

And the last system message command that I’m going to cover is Remove-SystemMessage. In this example I will remove one of the messages I created before:

Remove-SystemMessage –Identity en\External\5.7.1

systemmessage6

To remove all custom system messages use this command:

Get-SystemMessage | Remove-SystemMessage

systemmessage9

I could have typed a to accept the removal of all messages instead of typing one y per message. But I wanted to show you that it removed all three messages in that single command.

One more thing…

Not that hard right? There is one more thing to consider though. Many email-servers have the habit of rewriting DSN messages to make it more user-friendly, including all Exchange servers. So even if you configure a neat DSN message for external senders they might not see it because their server applied a user friendly standard DSN.

In theory, if both servers run Exchange and they have the same version they should leave the custom DSN alone and present it to the user instead of rewriting it. I still haven’t seen this working in real life…

There is one thing you can do to prevent overwriting if you are running Exchange Server 2007 Service Pack 1 Update Rollup 4 or later. You can use the Set-TransportConfig -DSNConversionMode and the parameter comes with three different settings:

  • UseExchangeDSNs
  • PreserveDSNBody
  • DoNotConvert

UseExchangeDSNs is default and you can change it with the following command:

Set-TransportConfig –DSNConversionMode DoNotConvert

systemmessage7

That’s all for this time, good luck with the messages. Thanks for reading and please, don’t hesitate let me know if you run in to any problems!