Sunday, January 20, 2013

Exchange Server 2013 Help Files Updated

The Exchange 2013 Help files (.chm) have been updated on January 18.
 
Here you can download the help files for both Exchange Server 2013 Hybrid and On-Premise deployments.

E-mail Recipient Number Distribution

Have you ever wondered what the distribution of the number of recipients per e-mail in your organization is?
 
The following script will go through every e-mail received by Exchange and group the results by the number of recipients.
Get-TransportServer | Get-MessageTrackingLog -ResultSize Unlimited -EventID RECEIVE -Start "07/05/2012 16:40" | ? {$_.Source -eq "STOREDRIVER"} | Select RecipientCount | Group RecipientCount | Select @{Name="Recipients"; Expression={[Int] $_.Name}}, Count | Sort Recipients

Alternatively, you can group them in batches depending on which format you want the output.
[Int] $1 = $2 = $5 = $10 = $30 = $50 = $75 = $100 = $150 = $200 = $250 = $big = 0

Get-TransportServer | Get-MessageTrackingLog -ResultSize Unlimited -EventID RECEIVE -Start "07/05/2012" | ? {$_.Source -eq "STOREDRIVER"} | Select RecipientCount | ForEach {
    If ($_.RecipientCount -eq 1) { $1++ }
    If ($_.RecipientCount -eq 2) { $2++ }
    If ($_.RecipientCount -gt 2   -and $_.RecipientCount -le 5)    { $5++ }
    If ($_.RecipientCount -gt 5   -and $_.RecipientCount -le 10)   { $10++ }
    If ($_.RecipientCount -gt 10  -and $_.RecipientCount -le 30)   { $30++ }
    If ($_.RecipientCount -gt 30  -and $_.RecipientCount -le 50)   { $50++ }
    If ($_.RecipientCount -gt 50  -and $_.RecipientCount -le 75)   { $75++ }
    If ($_.RecipientCount -gt 75  -and $_.RecipientCount -le 100)  { $100++ }
    If ($_.RecipientCount -gt 100 -and $_.RecipientCount -le 150)  { $150++ }
    If ($_.RecipientCount -gt 150 -and $_.RecipientCount -le 200)  { $200++ }
    If ($_.RecipientCount -gt 200 -and $_.RecipientCount -le 250)  { $250++ }
    If ($_.RecipientCount -gt 250 -and $_.RecipientCount -le 300)  { $300++ }
    If ($_.RecipientCount -gt 300) { $big++ }
}

Write-Host "1,                     $1"
Write-Host "2,                     $2"
Write-Host "Between 3 and 5,       $5"
Write-Host "Between 6 and 10,      $10"
Write-Host "Between 11 and 30,     $30"
Write-Host "Between 31 and 50,     $50"
Write-Host "Between 51 and 75,     $75"
Write-Host "Between 76 and 100,    $100"
Write-Host "Between 101 and 150,   $150"
Write-Host "Between 151 and 200,   $200"
Write-Host "Between 201 and 250,   $250"
Write-Host "Between 251 and 300,   $300"
Write-Host "More than 300,         $big"

Thursday, January 17, 2013

Exchange 2013 Database Mount Limit

A change introduced in Exchange 2013 that many administrators are not aware is the fact that with the Enterprise Edition of Exchange, you can now only mount up to 50 mailbox databases per server, a reduction in 50% from the 100 with Exchange 2010! The limit of the Standard Edition remains at 5 databases.

Highly available and resilient environments might have some problems when migrating from Exchange 2010 if they have servers with more than 50 databases (in big environments with 3 or 4 copies of each database it is not that uncommon). Therefore, a complete review of the current database layout might have to happen.

But why this change?! Basically it was introduced in order to ensure a good performance from the mailbox servers. Some of the reasons behind this change are the improvements made in some areas, which mean the mailbox servers consume more memory now... For example, Exchange 2013 uses Search Foundation instead of MSSearch in order to be consistent with SharePoint and to allow discovery searches across e-mail and documents. Search Foundation uses more memory and it seems it can take between 10 to 15% of available memory on a mailbox server.
Another change is the move of protocol handling from the Client Access Server [CAS] to the Mailbox server. It helps make the CAS more stateless and not so dependent on a particular mailbox server but it also increases the memory use on the mailbox server...

Note: the limit of 16 mailbox servers per DAG remains in Exchange 2013.

Tuesday, January 8, 2013

Dynamic Distribution Groups with MultiValued Attribute

Ever wondered how to use the Multi-Valued Attributes in Exchange 2010 SP2 (or above) with Dynamic Distribution Groups? The following example shows you how to do this:

First we use 3 users and set their ExtensionCustomAttribute1 attribute to something we want to use:
Set-Mailbox User1 -ExtensionCustomAttribute1 Area1,Area2,Area3
Set-Mailbox User2 -ExtensionCustomAttribute1 Area2,Area3,Area4
Set-Mailbox User3 -ExtensionCustomAttribute1 Area3,Area4,Area5

Now we create our dynamic groups based on the information we want to “filter”:
New-DynamicDistributionGroup -Name Area1 -RecipientFilter {ExtensionCustomAttribute1 -eq “Area1”}
New-DynamicDistributionGroup -Name Area2 -RecipientFilter {ExtensionCustomAttribute1 -eq “Area2”}
New-DynamicDistributionGroup -Name Area3 -RecipientFilter {ExtensionCustomAttribute1 -eq “Area3”}

If we want to make sure they are working as expected, we can easily return each group’s members:
$Group = Get-DynamicDistributionGroup Area1
Get-Recipient -RecipientPreviewFilter $Group.RecipientFilter

In the example above the group:
• Area1 will have User1;
• Area2 will have User1 and User2;
• Area3 will have User1, User2 and User3.