Monday, August 8, 2011

v17.2 of the Exchange 2010 Mailbox Server Role Requirements Calculator Released


We’ve released the latest version of the Mailbox Role Requirements Calculator which corrects (among other things) the OS locale issue many of you stumbled upon with the first release of the database copy distribution function. 

You can download the new version of the calculator and let us know what you think. Alternatively, you can check out what else has changed by reviewing the Updates Tracking page.
Ross Smith IV


View article...

Introduction of a New CAS Server Causes Certificate Prompts

An increasing issue appears to be a certificate prompt being seen by Outlook 2007 and higher clients following the introduction of additional CAS servers, or new multiple role servers holding the CAS role. 

While this has been an issue for some time and well known to those running a multiple server environment, the increasing number of postings on forums about this problem has probably occurred as single Exchange 2007 servers start to get to end of life and people migrate to Exchange 2010. 
The cause of this is usually autodiscover. 

What is Happening
CAS Servers have a value called "AutoDiscoverServiceInternalUri". This is published in to the domain as a Service Connection Point (SCP) and is queried by Outlook 2007 and higher as part of the internal autodiscover process. It tells the client where to connect to for the account information. 
If you have multiple CAS servers then they will all be publishing this information to the domain, in effect overwriting each other. 

This command will show you the name and the value set on all Client Access Servers in the org:

Get-ClientAccessServer |select name,AutoDiscoverServiceInternalUri

The Resolution
There are two resolutions to this issue, depending on your setup, and future plans.  
  1. The simple fix is to bring forward the introduction of the trusted SSL certificate and get it installed on to the new server. The value for "AutoDiscoverServiceInternalUri" should match one of the host names on the SSL certificate. Remember that most SSL providers will not allow multiple certificates with the same names on them to be issued, so you may have to get a new certificate issued to cover all servers with the CAS role. 
  2. Set the value for AutoDiscoverServiceInternalUri to be the same on all CAS Servers. If this is a specific server name, rather than a generic name, then you will need to change that value on all servers if you remove that server from production. Alternatively you could ensure that autodiscover.example.com resolves internally on your network to the IP address of a CAS server, then set all CAS servers to use that value. Then when the servers are changed, all you need to do is update the DNS. If you have clients on your internal network which are not members of the domain, then you may well have already configured this. 
Multiple AD Sites
If you have your CAS servers in multiple AD sites, then you may well have to consider using site scope to control which server the clients will connect to. There are other things to consider if this is the best thing to do or not and this Technet article explains how to use Site Scope: http://technet.microsoft.com/en-us/library/aa997633(EXCHG.80).aspx

CAS Array
This is not related to the Exchange 2010 CAS Array function, and you shouldn't use the CAS array host name for this. The CAS array doesn't use HTTPS and also shouldn't be resolvable from outside. 

WHITE SPACE EXCHANGE 2010, Where did 1221 Go?

One of important Exchange Server application task & process always been the white space and how we deal with it as Exchange administrator. White space always been one of the most asked, case & specific area in Exchange Server. If you remember in previous versions of Exchange event log 1221 would be logged on the application logs and we would sum these up to find out the total white space in Exchange databases.

Now, as far as basic goes , dealing with Exchange white space always been simple. We don’t take database "off line" and try to run defrag on it, we simply create new DB and move Mail Boxes into newly created DB. Once we are done moving all mail boxes, we would delete the DB has the white space.

The big reason we would do this would be backup considerations, as we would not want to backup white space , otherwise Exchange always been smart enough to find the white space each night after online maintenance and mark the white space as "re-usable" area for the related DB.

Now in Exchange 2010 there are no more 1221 event logs, because Exchange 2010 is dealing with white space in bit more advance approach. Background database maintenance and 24/7 online defragmentation process is explained in details as fallows.

If you like to see the available space on the database you can run fallowing


Get-MailboxDatabase Database1 -Status | FL AvailableNewMailboxSpace

Database White Space
The database size on the physical disk isn't just the number of users multiplied by the mailbox storage quota. When the majority of users aren't approaching their mailbox storage quota, the databases consume less space and white space isn't a capacity concern. The database itself will always have free pages, or white space, spread throughout. During background database maintenance, items marked for removal from the database are removed, which frees these pages. The percentage of white space is constantly changing due to the efforts of the 24x7 online defragmentation process.

You can estimate the amount of white space in the database by knowing the amount of mail sent and received by the users with mailboxes in the database. For example, if you have 100 2-GB mailboxes (total of 200 GB) in a database where users send and receive an average of 10 MB of mail per day, the amount of white space is approximately 1 GB (100 mailboxes × 10 MB per mailbox). The amount of white space can exceed this approximation if background database maintenance isn't able to complete a full pass.

Click here to read more

Managed Folders Deleted Item 180 Days Retention Policy Exchange 2007

Task: Create mailbox retention policy to purge anything over 180 days old out of everyone's deleted items folders only!!!!! Apply this policy to everyone
Fallow the Easy steps below to get the task done.

Open EMC, Org & Configuration, click on Mailbox

image

Select ONLY!!!!!! where you want the policy to apply in this case we will pick deleted items

image

image
image

image
image

image

The task has been completed
• How to Create Managed Content Settings
• How Retention Periods Are Calculated for Items in Managed Folders
• Understanding Messaging Records Management

PST Capture Tool Exchange 2010

Administrators have been asked for this for a long time. Finally the toll will be available according to MS Exchange Team announcement. Compact smaller fast Exchange database made most of deployments to success and PST files kept on the network always been headache and challenge for many of us. Once again having such tool will make our job easy… looking forward to get a hold of the tool (-:


image
“This new tool, PST Capture, will be downloadable and free, and will enable you to discover .pst files on your network and then import them into both Exchange Online (in Office 365) and Exchange Server 2010 on-premises”

As we like to say here on EHLO, we’re always listening for feedback on what we're doing well and what we could be doing better for you. As more and more of you evaluate and deploy the email archiving, retention and discovery capabilities of Exchange Server 2010 and Exchange Online, we understand that Personal Folders (.pst files) remain a challenge for you. You have told us that having the ability to search your network to discover and then import .pst files across your environment is critical, and that you need an admin-driven and straightforward tool for doing these things.

Move Public Folders All replica to Exchange 2010 Server PS Script

If you are in the middle of migration and it is time to move all PF folder replicas from Exchange 2007 to Exchange 2010 server PS is your friend.

Lets say your Existing Exchange 2007 Server name is EXC07 and you want to move all PF replicas to newly build Exchange 2010 Server called EXC210 , you can use fallowing PS commands…..

Connect to your Exchange Server , open EMS
image
Navigate fallowing directory from PS command line
[PS] E:\Program Files\Microsoft\Exchange Server\V14\Scripts>
  • AddReplicaToPFRecursive.ps1
  • RemoveReplicaFromPFRecursive.ps1
  • ReplaceReplicaOnPFRecursive.ps1
  • MoveAllReplicas.ps1
image
Now we are ready to execute existing scripts sits on this directory. All PF replicas sits on the server called “EXC07” and I like to add Exchange 2010 Server called “EXC210 into PF replica  folders as second server.


.\AddReplicaToPFRecursive.ps1 –Server EXC210 –TopPublicFolder \ –ServerToAdd “EXC07”

image
Remove Replica  ( pay attention  Exchange  server must have all of its public folder replicas removed before it can be decommissioned…. )

.\RemoveReplicaToPFRecursive.ps1 –Server EXC210 –TopPublicFolder \ –ServerToRemove “EXC07”

  • Now System folders

.\AddReplicaToPFRecursive.ps1 -TopPublicFolder "\NON_IPM_Subtree" ServerToAdd
"EXC210"

image
  • To view a list of the replicas in the public folder hierarchy

Get-PublicFolder -recurse |fl name,replicas

  • Move all replicas from EXCH07 to EXC210

MoveAllReplicas.ps1 –Server EXC07 –NewServer EXC210

  • For System Folders

Get-PublicFolder -recurse \non_ipm_subtree |fl name, replicas

  • To compare content replicated between the source and destination servers

Get-PublicFolderStatistics | FL

  • Also

Get-PublicFolderStatistics –Server ServerA

  • Compare Output to ServerB

Get-PublicFolderStatistics –Server ServerA


 Resources:

Wednesday, July 20, 2011

How to Export Exchange Message Tracking Logs to Excel

imageFrom time to time you may have a user request to find out what messages they should have received - perhaps they have marked them as Junk Email in Outlook, or deleted them accidentally. Whatever the reason, you might find it useful to be able to quickly pull the information for the user out of the message tracking logs and into a file quickly so they can have a look for themselves.

What this script does is searches for messages delivered to a particular user across all Hub Transport servers, sorts the information by the date and time and saves it to a convenient CSV file ready to open in Microsoft Excel.

How to use the script
Export-MessageTrackingLogsForRecipient.ps1 -Recipient steve -OutputCSV .\output.csv
Whilst the script is in use, you'll see progress of each log search:

image
After completion you should find your resulting CSV file similar to this:
image

Script Code
<#
    .SYNOPSIS
    Generates a CSV file containing sender, data, recipients and subjects of messages received by a particular recipient.
 
    Steve Goodman
    .DESCRIPTION
    Searches all Hub Transport servers using the Get-MessageTrackingLog command to find all available logs for received messages to a particular recipient
 
    .PARAMETER Recipient
    Username, Mailbox or Email Address of the Recipient
 
    .PARAMETER OutputCSVFile
    File to write CSV output to
 
    .EXAMPLE
    Exports message logs for one recipient
    Export-MessageTrackingLogsForRecipient.ps1 -Recipient steve -OutputCSV .\output.csv
   
    Example CSV file:
    "Sender","Timestamp","Recipients","MessageSubject"
    "phil@rootuk.net","05/04/2011 15:50:12","steve@goodman.net","Hello, how are you!"
 
    #>

param(
    [parameter(Position=0,Mandatory=$true,ValueFromPipeline=$false,HelpMessage="Recipient")]$Recipient,
    [parameter(Position=1,Mandatory=$true,ValueFromPipeline=$false,HelpMessage="Output CSV File Name")][string]$OutputCSVFile
    )

# Check EMS
if (!(Get-Command Get-ExchangeServer -ErrorAction SilentlyContinue))
{
    throw "Please launch the Exchange Management Shell"
}

# Ensure input is correct format
$Recipient = Get-Recipient $Recipient
if (!$Recipient)
{
    throw "Recipient not found"
}
$Recipient = $Recipient.PrimarySMTPAddress

# Check file doesn't exist
if (Test-Path $OutputCSVFile)
{
    throw "File may already exist"
}

# Get Hub Transport Servers
$HubTransports = Get-ExchangeServer | Where {$_.ServerRole -like "*Hub*"}

# Get all logs with "Deliver" event
foreach ($HubTransport in $HubTransports)
{
    $logs += Get-MessageTrackingLog -Server $HubTransport -Recipients $Recipient -EventId DELIVER -ResultSize Unlimited  
}

# Output logs to file after sorting
$logs | Sort-Object -Unique -Property Timestamp -Descending | select Sender,Timestamp,@{Name='Recipients';Expression={[string]::join(";", ($_.Recipients))}},MessageSubject | Export-Csv $OutputCSVFile -NoTypeInformation

Script Download
Download Export-MessageTrackingLogsForRecipient.zip