Office 365

Add Skype for Business Federation Partner/Domain

Hey again!

Have you been searching and looking around to find a way to automate or use PowerShell for adding federation partners to Skype for Business Online?

Then here’s a great example for you, feel free to use the script, edit and tweak it. If you do tweak and edit/improving it. Please go ahead and share it with the community and also link to my blog post.

In my case I’m using PowerShell version 5 together with Skype for Business module, which is a requirement for connecting to the cloud service(s).

The script in itself is pretty much straight forward, type in one or more domains and they get added into the alloweddomains list.
This can be handy if you’re not using open federation and have to add a couple of new domains every now and then..

 


<#
.SYNOPSIS
Filename: Add-CsFedDomain.psm1

Jonas Andersson
Jonas.Andersson@testlabs.se

THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE
ENTIRE RISK OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS
WITH THE USER.

Version 1.0, September 25th, 2016

.DESCRIPTION
Used for adding new domain(s) for Skype for Business Online

.PREREQUISITES
Connect to Skype for Business Online using the PowerShell module

Revision History
--------------------------------------------------------------------------------
1.0     Initial release

.EXAMPLE
Add-CsFederationDomain -domainName domain1.com
Add-CsFederationDomain -domainName domain1.com,domain2.com,domain3.com

#>

function Add-CsFederationDomain (
[Parameter(Mandatory = $true)][array]$domainName
)
{
if ((Get-MsolDomain -ErrorAction 0) -eq $null)
{
Write-Host "Not connected to O365, use ConnectToO365-P*" -ForegroundColor Red
break
}

$tenant = Get-CsTenant
$domainName = $domainName.split(",")
$domainName = $domainName.split(";")
$domainName = $domainName.split(",")
$domainName = $domainName.Replace(" ","")

if ($domainName.Count -lt 2)
{
[string]$domainName = $domainName[0].ToString()
Write-Host "#########################################################################################" -ForegroundColor White
Write-Host "Domain: $domainName" -ForegroundColor DarkGreen

$x = Get-CsTenantFederationConfiguration –Tenant $tenant.TenantId
$domain = $x.AllowedDomains.AllowedDomain | ?{$_.Domain -eq $domainName}
if ($domain -eq $null)
{
$d1 = New-CsEdgeDomainPattern -Domain $domainName
$x.AllowedDomains.AllowedDomain.Add($d1)
Set-CsTenantFederationConfiguration -Tenant $tenant.tenantID  -AllowedDomains $x.AllowedDomains
Write-Host "Domain $domainName was added successfully" -ForegroundColor Green
}
else
{
Write-Host "ERROR: $domainName already in allowed list" -ForegroundColor Red
}
}

if ($domainName.Count -gt 1)
{
foreach ($newdomain in $domainName)
{
Write-Host "#########################################################################################" -ForegroundColor White
Write-Host "Domain: $newdomain" -ForegroundColor DarkGreen

$x = Get-CsTenantFederationConfiguration –Tenant $tenant.TenantId
$domain = $x.AllowedDomains.AllowedDomain | Where-Object {$_.Domain -eq $newdomain}
if ($domain -eq $null)
{
$d1 = New-CsEdgeDomainPattern -Domain $newdomain
$x.AllowedDomains.AllowedDomain.Add($d1)
Set-CsTenantFederationConfiguration -Tenant $tenant.tenantID -AllowedDomains $x.AllowedDomains
Write-Host "Domain $newdomain was added successfully" -ForegroundColor Green
}
else
{
Write-Host "ERROR: $newdomain already in allowed list" -ForegroundColor Red
}
}
}
}

Inspiration from this great blog post:

https://gotspeechguy.com/2012/06/21/setting-up-a-tenants-allowed-domains-for-federation/

Surface Hub – account creation

Background

Most of you already know what a Surface Hub is since Microsoft have pushed really hard for these devices. If you for some unknown reason doesn’t know what it is, or how it looks like. Then take a look at the following link: https://www.microsoft.com/microsoft-surface-hub/en-us

As you may know (or don’t, doesn’t matter..) I’m responsible to the technical solution of Office 365 and being a bit more specific; Skype for Business is the main one for me.

However, it took me a while to actually figure out what kind of accounts that was needed for the Surface Hub device to be honest. You can read about this at TechNet of course but they are just talking about device account (and what the heck is that? computer or user?)..

So what that said I wanted to share the knowledge I got so far from creation of the “device” accounts, which is a ROOM MAILBOX and nothing else (a customized room mailbox).

So to the steps that was taken:

Step 1:

  • Create one CSV file including the accounts we want to get created

In general the CSV file looks similar to the formatting of the text below

alias;upn;name;password
edu.surfacehub_55;edu.surfacehub_55@testlabstrial.onmicrosoft.com;Surface Hub 55;Welcome2016!!
edu.surfacehub_84;edu.surfacehub_84@testlabstrial.onmicrosoft.com;Surface Hub 84;Welcome2016!!

Note: an example of the CSV file can be found below:

Step 2:

For automating the creation of the listed accounts in the file, we can easily utilize PowerShell

Start:


$accounts = Import-Csv ".\surfacehubacct.csv" -Delimiter ";"

# Prereq's
$countrycode = (Get-CsTenant).CountryAbbreviation
$regpool = (Get-CsTenant).TenantPoolExtension
$regpool = $regpool.Substring($regpool[0].IndexOf(':') + 1)
$skuid = (Get-MsolAccountSku | Where-Object {$_.AccountSkuID.Contains("ENTERPRISEPACK"); })
$easpolicys = Get-MobileDeviceMailboxPolicy

if ($easpolicys.Count -gt 1)
{
foreach ($easpolicy in $easpolicys)
{
if (($easpolicy.PasswordEnabled -eq $False) -and ($easpolicy.AllowNonProvisionableDevices -eq $null -or $easpolicy.AllowNonProvisionableDevices -eq $True))
{
$easpolicy = $easpolicy
}

else
{
Write-Host "The policy is incompatible with the surface hub." -ForegroundColor Red
$easpolicy = $null
New-MobileDeviceMailboxPolicy -Name "SurfaceHubs" -PasswordEnabled $False -AllowNonProvisionableDevices $True
Write-Host "A new Mobile Device Mailbox Policy has been created" -ForegroundColor Green
$easpolicy = Get-MobileDeviceMailboxPolicy
}
}
}

if ($easpolicys.Count -eq $null)
{
if (($easpolicys.PasswordEnabled -eq $False) -and ($easpolicys.AllowNonProvisionableDevices -eq $null -or $easpolicys.AllowNonProvisionableDevices -eq $True))
{
$easpolicy = $easpolicys
}

else
{
Write-Host "The policy is incompatible with the surface hub." -ForegroundColor Red
$easpolicy = $null
New-MobileDeviceMailboxPolicy -Name "SurfaceHubs" -PasswordEnabled $False -AllowNonProvisionableDevices $True
Write-Host "A new Mobile Device Mailbox Policy has been created" -ForegroundColor Green
$easpolicy = "SurfaceHubs"
}
}

if (!$easpolicys)
{
Write-Host "No policy can be found." -ForegroundColor Red
$easpolicy = $null
New-MobileDeviceMailboxPolicy -Name "SurfaceHubs" -PasswordEnabled $False -AllowNonProvisionableDevices $True
Write-Host "A new Mobile Device Mailbox Policy has been created" -ForegroundColor Green
$easpolicy = Get-MobileDeviceMailboxPolicy
}

foreach ($account in $accounts)
{
New-Mailbox -MicrosoftOnlineServicesID $account.upn -Alias $account.alias -Name $account.name -Room -EnableRoomMailboxAccount $True -RoomMailboxPassword (ConvertTo-SecureString -String $account.password -AsPlainText -Force)
Set-Mailbox -Identity $account.upn -Type Regular
Set-CASMailbox -Identity $account.upn -ActiveSyncMailboxPolicy SurfaceHubs
Set-Mailbox -Identity $account.upn -Type Room
Set-Mailbox -Identity $account.upn -RoomMailboxPassword (ConvertTo-SecureString -String $account.password -AsPlainText -Force) -EnableRoomMailboxAccount $True
Set-CalendarProcessing -Identity $account.upn -AutomateProcessing AutoAccept -AddOrganizerToSubject $False –AllowConflicts $False –DeleteComments $False -DeleteSubject $False -RemovePrivateProperty $False -AddAdditionalResponse $True -AdditionalResponse "This is a Surface Hub room!"
Set-CalendarProcessing -Identity $account.upn -ProcessExternalMeetingMessages $True
Set-MsolUser -UserPrincipalName $account.upn -PasswordNeverExpires $True
Set-MsolUserLicense -UserPrincipalName $account.upn -AddLicenses $skus.AccountSkuId
Set-MsolUser -UserPrincipalName $account.upn -UsageLocation $countrycode
Enable-CsMeetingRoom -Identity $account.upn -RegistrarPool $regpool -SipAddressType UserPrincipalName
}

This post has been published mostly for remembering myself on how the accounts should be created (if possible), when having a scenario where they cannot be created in the on-premises Active Directory and being synchronized.

A follow up post will come later on regarding the accounts of Surface Hub

Great collaboration with Daniel Blunda regarding these accounts!

Address Book Policy using Exchange Online (Office 365)

The question were raised a couple of times and I couldn’t find any related articles besides the official TechNet articles, so I decided to write one myself.

Some organizations have the need of separating people from seeing each other in the global address list (GAL), this is known as GAL segmentation and have been on the surface for a long time.

However, when it comes to do a segmentation in Office 365 and Exchange Online, it can be challenging and difficult, so I decided to write this article and provide an example of how this can be done.

 

Scenario – segmentation between school (students & teachers) and others (teachers, admin personnel and managers).

In detail the teachers and the students should be able finding each other in the address lists, while the administrators shouldn’t be able finding the students in their lists. However, administrators and teachers should be able to reach out through the address lists.

 

ABP

 

RBAC

By default the global administrator DON’T have access to manage the address lists, so either add the Address List Management permissions into the Organization Management role group or create a new role group with the role Address List Management and add the appropriate user into the group.

 

Attributes

One way of making sure the segmentation is working they way it is expected is to make it possible grouping the users using the extensionAttribute/CustomAttribute values in AD/Exchange.
These should be configured in the on-premise Active Directory (AD).

In this example all students and teachers has a value of “EDU” in their extensionAttribute15/CustomAttribute15, while the others have a value of “ADM” in their extensionAttribute14/CustomAttribute14 so they can easily be filtered.

With the attribute values in place, we need to configure address lists, global address list, offline address book, address book policy and finally apply it to the mailboxes.

This is done using PowerShell for Exchange Online running the following cmdlets..

 

Configuration for students and teachers


New-AddressList -Name "AL-EDU-Users-DGs" -RecipientFilter {((RecipientTypeDetails -eq 'UserMailbox') -or (RecipientTypeDetails -eq "MailUniversalDistributionGroup") -or (RecipientTypeDetails -eq "DynamicDistributionGroup")) -and (CustomAttribute15 -eq "EDU")}

New-AddressList -Name "AL-EDU-Rooms" -RecipientFilter {((Alias -ne $null) -and ((RecipientDisplayType -eq 'ConferenceRoomMailbox') -or (RecipientDisplayType -eq 'SyncedConferenceRoomMailbox'))) -and (CustomAttribute15 -eq "EDU")}

New-GlobalAddressList -Name "GAL-EDU" -RecipientFilter {(CustomAttribute15 -eq "EDU")}

New-OfflineAddressBook -Name "OAB-EDU" -AddressLists "GAL-EDU"

New-AddressBookPolicy -Name "ABP-EDU" -AddressLists "AL-EDU-Users-DGs","AL-EDU-Rooms" -OfflineAddressBook "\OAB-EDU" -GlobalAddressList "\GAL-EDU" -RoomList "\AL-EDU-Rooms"

Get-Mailbox | Where {$_.CustomAttribute15 -eq "EDU"} | Set-Mailbox -AddressBookPolicy "ABP-EDU"

 

Configuration for administrator personnel, managers and teachers


New-AddressList -Name "AL-ADM-Users-DGs" -RecipientFilter {((RecipientTypeDetails -eq 'UserMailbox') -or (RecipientType -eq "MailUniversalDistributionGroup") -or (RecipientType -eq "DynamicDistributionGroup")) -and (CustomAttribute14 -eq "ADM")}

New-AddressList -Name "AL-ADM-Rooms" -RecipientFilter  {((Alias -ne $null) -and ((RecipientDisplayType -eq 'ConferenceRoomMailbox') -or (RecipientDisplayType -eq 'SyncedConferenceRoomMailbox'))) -and (CustomAttribute14 -eq "ADM")}

New-GlobalAddressList -Name "GAL-ADM" -RecipientFilter {(CustomAttribute14 -eq "ADM")}

New-OfflineAddressBook -Name "OAB-ADM" -AddressLists "GAL-ADM"

New-AddressBookPolicy -Name "ABP-ADM" -AddressLists "AL-ADM-Users-DGs","AL-ADM-Rooms" -OfflineAddressBook "\OAB-ADM" -GlobalAddressList "\GAL-ADM" -RoomList "\AL-ADM-Rooms"

Get-Mailbox | Where {$_.CustomAttribute14 -eq "ADM"}  | Set-Mailbox -AddressBookPolicy "ABP-ADM"

 

Configuration for teachers (“Everyone”)

The configuration for the teachers is a bit different since they should be able to see all users, in my example I do configure the policy to include all address lists, this can be configured so it matches your requirements.


New-AddressBookPolicy -Name "ABP-Teachers" -AddressLists "AL-ADM-Users-DGs","AL-ADM-Rooms","AL-EDU-Users-DGs","AL-EDU-Rooms","All Groups","All Contacts","All Distribution Lists","All Rooms","All Users" -OfflineAddressBook "\Default Offline Address Book" -GlobalAddressList "\Default Global Address List" -RoomList "\All Rooms"

Get-Mailbox | Where {$_.CustomAttribute1 -eq “teachers”} | Set-Mailbox -AddressBookPolicy "ABP-Teachers"

 

Ps. In the example for applying the policy to teachers, I’ve filtered the users using extensionAttribute1/CustomAttribute1 with the value of “teachers”.

 

The final result is shown below..

Students – able to find students and teachers in GAL

2014-09-30 13-51-27

Admins – able to find admins, managers and teachers in GAL

2014-09-30 13-53-06

Managers – able to find admins, managers and teachers in GAL

2014-09-30 13-54-05

Teachers – able to find everyone in GAL

2014-09-30 14-00-11

 

I hope this gave a more clear picture of the configuration to you, feel free to comment or give any feedback!

 

More information:

http://technet.microsoft.com/en-us/library/jj657455(v=exchg.150).aspx

Populate extensionAttribute with value using PowerShell

Implementing ADFS using the new feature within KB2919355 for Windows Server 2012 R2 called Alternative Login ID? (http://technet.microsoft.com/en-us/library/dn659436.aspx)

The configuration for Alternative Login ID is fairly simple, the extensionAttributes/CustomAttributes can be used and I want to share a script with you for populating values into the attributes.

Use the script as much as you want, make sure to test it before implementing into production.
All contents is provided “AS IS” with no warranties, and confers no rights. You assume all risk for your use.

 

# +=======================================================================
# | Blog: http://www.testlabs.se/blog
# | Twitter: @jonand82
# | =============================================
# | Filename: populate_extensionattribute15_v1.0.ps1
# |
# | CREATED BY: Jonas Andersson
# | FUNCTION: Populates users extensionAttribute15 with SamAccountName plus a value
# |
# | CHANGE LOG:
# | v1.0 - 2014-05-28, *Created*
# +=======================================================================

$users = Get-ADUser -Filter * -SearchScope Subtree -SearchBase "OU=Users,OU=Testlabs,DC=testlabs,DC=se" | Select-Object DistinguishedName, SamAccountName
$value = "@testlabs.se"
foreach ($i in $users)
{
$ext = ($i.SamAccountName) + $value
Write-Host "extensionAttribute15:", $ext

$id = $i.DistinguishedName
$user = Get-ADUser -Identity $id -Properties extensionAttribute1
Set-ADUser –Identity $user -Clear "extensionAttribute15"
Set-ADUser -Identity $user -Add @{extensionAttribute15 = $ext}
}
Part 8: Configuring Coexistence Manager for Notes with Office 365

Part 8: Configuring Coexistence Manager for Notes with Office 365

Published: 2013-12-20
Updated: –
Version: 1.0

Since the previous post took us through the technical prerequisites, these should now be ready and in place for installing and configuring Coexistence Manager for Notes (CMN).

Before going into any details, if you are planning to do have a coexistence scenario between Domino and Exchange, you may want to consider using Dell Software’s Coexistence Manager for Notes. However, one important thing to mention is that there is a requirement from the vendor, to use certified people for the project.

This blog post is based on Coexistence Manager for Notes version 3.5.1.51.

Some of you might know that I wrote some articles regarding this topic two years ago, the configuration has changed a bit. I want to share this with the community and I hope you enjoy reading it.

I have decided that I won’t publish any article about the Migration Manager product. If anyone are interested of writing them, I’m glad to support and review the articles. If interested, contact me at: jonas.andersson@testlabs.se.

Read the other parts:

Part 1: Migrations – Overview
Part 2: Prerequisites for Domino/Notes migrations
Part 3: Migrating Domino/Notes to Exchange 2013 On-premise
Part 4: Migrating Domino/Notes to Office 365
Part 5: Migrating Resources Mailboxes, Mail-In databases and Groups
Part 6: Prerequisites for Coexistence Manager for Notes with Exchange 2013 On-premise
Part 7: Configuring Coexistence Manager for Notes with Exchange 2013 On-premise

Technical overview of the solution

SMTP and Free/Busy requests overview design

Drawing

Installation of Coexistence Manager for Notes (CMN)

There is no need for further description on how to proceed with the installation of CMN, select the features that should be used, then it’s a “next-next-finish” installation.

Licensing

Startup “Quest Coexistence Manager for Notes Management Console” and go to “Common – Licensing” to provide a valid license file.

Mail Connector configuration

This post is not about how to create the mail flow configuration between Office 365/Exchange and Domino since I assume, if you’re working and reading this topic, you’re familiar with how to create Send/Receive connectors in Exchange and Domain documents and Connection documents in Domino.

I will, however, post an article on how to configure Exchange/Office 365 and Domino regarding the mail flow.

Let’s configure CMN regarding mail flow, startup “Quest Coexistence Manager for Notes Management Console” and go to “Mail Connector”.

Go to “Inbound Servers”, remove any default values, add all incoming servers, both source and target servers. Just make sure to specify their function (Server type).

image

When all are added, it will look similar to the picture below.

image

Go to “Outbound Servers”, remove any default values. Either use the “Add” button or if you’re about to add the same as the Inbound, then use the “Copy from Inbound Servers” button.

image

After the servers are added, it will look similar as the picture below.

image

For Notes Doc Links, I will use the option “Notes links (Requires Notes client on clients)”, but you should select the option that will provide the best solution in each scenario.

image

I’m using the default settings for Network settings.

image

If needed, TLS can be used and it’s in this window the configuration takes place. In my lab environment, I’m not using TLS.

image

I’m using the default settings for Advanced Message settings.

image

I prefer to use the option “Rewrite Notes Common Names”, so it becomes more user-friendly and easier to read than a long Domino displayname.

Other options are not enable, use them if needed.

image

I’m using the default settings for Message Content Limits settings.

image

In the lab environment I’m not using the sub-domain option. However, if needed, here is the place to configure it.

image

Active Mail, it requires Notes client 7.0.3, 7.0.4 or 8.0 on the CMN server. It also requires the Notes client on the clients for being able to use the feature.

image

Default settings in Notification messages.

image

Here is a sample of the “ResourcesMap.tsv” file that’s used for mapping resources so they can be booked from Exchange/Outlook.

image

Import the “ResourcesMap.tsv” file, just verify the imported items and change the “Resource type” if they are not correct or configured.

image

Directory Synchronization configuration

Let’s walk through the directory synchronization, which is required to get Free/Busy to work properly. It’s required to provision users as contact objects.

With CMN 3.5.x, the directory synchronization uses a new module, which uses SQL for its configuration. Just see my picture below as an example of the SQL configuration.

The configuration can be found under “Directory Connector – SQL Settings”.

image

Domino Users synchronization, go to “Directory Connector – Connector Settings”. Press “Add” button and “Next” in the window.

image

Give the connector a friendly name like “Domino to AD – Users”, verify the “Direction” value and press “Next”.

image

Type in Source information: domino server, username, password and LDAP port.

image

Type in Target information: domain controller, username, password and LDAP port.
In my scenario, I’ve specified a domain controller, so I enabled that checkbox.

Specification of domain controllers are common in scenarios where you want to use the closest domain controller possible for faster reading and writing.

image

Select the object to process – “Users & Contacts”, specify the OU that should be synchronized.

image

Specify the target OU where objects will be created, also specify Target Search Base DN and load the Exchange attributes from AD and add them.

Since Office 365 is used, you need to specify a different targetAddress domain (forwarding) use the “Enable Internal Routing Domain” option and specify a domain in the value field. See my example in the screenshot below.

image

No connector order is selected.

image

A synchronization schedule is created, in my example 5 AM and 2 PM. The appropriate timing depends on how often and how many changes are done within Domino.

image

Press “Finish” to close the final window.

image

Groups synchronization, go to “Directory Connector – Connector Settings”. Press “Add” button and “Next” in the window.

image

Give the connector a friendly name like “Domino to AD – Groups”, verify the “Direction” value and press “Next”.

image

Type in Source information: domino server, username, password and LDAP port.

image

Type in Target information: domain controller, username, password and LDAP port.
In my scenario, I’ve specified a domain controller, so I enabled that checkbox.

Specification of domain controllers are common in scenarios where you want to use the closest domain controller possible for faster reading and writing.

image

Select the object to process by selecting “Groups” and specify the OU that should be synchronized.

image

Specify the target OU where objects will be created, also specify Target Search Base DN and load the Exchange attributes from AD and add them.

Since Office 365 is used, you need to specify a different targetAddress domain (forwarding) use the “Enable Internal Routing Domain” option and specify a domain in the value field. See my example in the screenshot below.

image

No connector order is selected.

image

A synchronization schedule is created, in my example 5 AM and 2 PM. The appropriate timing depends on how often and how many changes are done within Domino.

image

Press “Finish” to close the final window.

image

Resources synchronization, go to “Directory Connector – Connector Settings”. Press “Add” button and “Next” in the window.

image

Give the connector a friendly name like “Domino to AD – Resources”, verify the “Direction” value and press “Next”.

image

Type in Source information: domino server, username, password and LDAP port.

image

Type in Target information: domain controller, username, password and LDAP port.
In my scenario, I’ve specified a domain controller, so I enabled that checkbox.

Specification of domain controllers are common in scenarios where you want to use the closest domain controller possible for faster reading and writing.

image

Select what object to process “Resources”, specify the OU that should be synchronized.

image

Specify the target OU where objects will be created, also specify Target Search Base DN and load the Exchange attributes from AD and add them.

Since Office 365 is used, you need to specify a different targetAddress domain (forwarding) use the “Enable Internal Routing Domain” option and specify a domain in the value field. See my example in the screenshot below.

image

No connector order is selected.

image

A synchronization schedule is created, in my example 5 AM and 2 PM. The appropriate timing depends on how often and how many changes are done within Domino.

image

Press “Finish” to close the final window.

image

Free/Busy configuration

Since we now have the contact objects provisioned and the mail flow working, it’s time for the most involved part of the coexistence, the Free/Busy configuration.

Qcalcon configuration

The installation of Qcalcon on a Domino server is a standard “next-next-finish” procedure and a Domino server task will be created during the installation. The software can either be installed on an existing server or a dedicated Free/Busy server (I would recommend the latter IF possible).

Start the Qcalcon configuration by starting the “Coexistence Management Console”, see picture below.

image

Configure Qcalcon with the following properties (as an example):

“Gateway Mail File Name: mail.box” (verify with Domino Administrator on which to use)
”Quest Exchange Free/Busy Connector Service Endpoint: cmn35“ (resolvable DNS name to CMN server)

Note: You need to provide a valid license before the software can be used.

image

Domino configuration, go to the CMN server and start the CMN console, then go to “Domino Free/Busy Connector”.

Type in Domino configuration;
”Domino Server Name: domino/target” (specify server where Qcalcon is installed)
”Domino User fetch interval in minutes: 15
”Domino User SMTP domain: testlabs.se
”Exchange Forwarding Domain: domino.testlabs.se – testlabs.se
”Domino ID file path: C:\Temp\mmig.id” (Browse and select the ID file)
”Domino Password: *****” (Type in the password for that ID file)
”Enable Performance counters: Check

image

Go to “Quest Web Services”

Type in Domino configuration;
”Quest Autodiscover Host Name: domino.testlabs.se
”Quest Domino Free/Busy Connector Host Name: localhost

Don’t forget to create (if not done already as specified in part 6) the AvailabilityAddressSpace, or Free/Busy won’t work as expected. See cmdlet below picture.

image

$cred = Get-Credential

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri `
ps.outlook.com/powershell -Credential $cred -Authentication Basic –AllowRedirection 

Import-PSSession $session
Enable-OrganizationCustomization

New-AvailabilityConfig -OrgWideAccount <Office365AdminAccont>

$CMNCred = Get-Credential

Add-AvailabilityAddressSpace -AccessMethod OrgWideFB -ForestName domino.testlabs.se `
-Credentials $CMNCred -TargetAutodiscoverEpr `
"https://autodiscover.domino.testlabs.se/autodiscover/autodiscover.xml"

Add-AvailabilityAddressSpace -AccessMethod OrgWideFB -ForestName testlabs.se `
-Credentials $CMNCred -TargetAutodiscoverEpr `
”https://autodiscover.domino.testlabs.se/autodiscover/autodiscover.xml”

Exchange configuration, let’s finish the Free/Busy configuration by completing the Exchange part by going to “Exchange Free/Busy Connector – Exchange Free/Busy”.

Type in Exchange configuration;

”Exchange Server location: Autodiscover Endpoint” (more about these options can be found in the User Guide)

”Exchange Host Name: autodiscover-s.outlook.com

”Exchange Online: Checked

”Exchange Username: username@testlabstrial.onmicrosoft.com

”Exchange Password: *****

”Show tentative As Busy: Yes

”Enable Performance Counters: Enable

Use the Test button to verify that the functionality is working as expected.

Note: Certificate needs to be deployed before a successful test.

image

Additional Configurations
Certificate/IIS

Coexistence Manager relies on certificates since it’s using HTTPS for requests. This is important to understand.

The provided “Quest Autodiscover URL” and “Quest EWS URL” is based on the value entered in the “Quest Autodiscover Host Name” field. This common name is used during Free/Busy requests and is required to be in the certificate used in IIS. It should be bound to IIS and the “QuestFreeBusy” website.

Once the certificates have been deployed into the CMN server and IIS, use the Test buttons in the CMN console to verify the Quest Autodiscover functionality. In most cases, the autodiscover DNS record is pointed to the Exchange so, in order to test this functionality, use the host file and point it to CMN server.

A last thing to verify is that the “QuestFreeBusy” website is enabled for HTTP (80) and HTTPS (443) traffic, since it’s a requirement.

Note: Since this is a Office 365 solution and Microsoft are not aware of our internal PKI solution and are not trusting the internal issued certificates we need to buy a certificate from a trusted root provider.

In my lab I’m using Comodo because they could provide a trial certificate up to 90 days.

Autodiscover

In short, I’ve copied a good description in a quote from the User Guide for Coexistence Manager..

When coexisting with Office 365: Direct free-busy lookups from Office 365

to Notes are not possible in a single-namespace configuration due to access/

permission restrictions to the remote Microsoft servers. If you require bi-directional

free/busy in a single-namespace environment with Office 365, consider a

hybrid implementation with a local Exchange server and calendar federation.

Probably the easiest way of describing this is to say that the autodiscover of the primary domain/s needs to be pointed to Office 365 and therefore a sub-domain needs to be implemented for having a way back reaching the users Free/Busy information.

The Autodiscover is used since the mail contacts have a targetAddress with “@domino.testlabs.se” and there is a configured value for that domain in the AvailabilityAddressSpace configuration. Because of that, the request ends up checking these contacts Free/Busy externally via Autodiscover, which is pointed to CMN.

Verification of functionality
Notes client (source)

 

Mail flow

A mail is sent from the Lotus Notes client (8.5.x) to a user that were migrated to Office 365 and now have an Exchange Online mailbox and uses Outlook 2013.

The mail is a standard mail, see picture below.

image

During the transport, these actions are being logged into the CMN.log file on the CMN server, some related entities can be found below:

2013-12-16 22:04:42,725 INFO  CMN.logging [45] – Connection received from 172.16.1.16.

2013-12-16 22:04:43,098 INFO  CMN.logging [45] – Message Number [22] on Thread [45] from Domino (172.16.1.16:2979) to Exchange (192.168.0.50:25): Connection established.

2013-12-16 22:04:51,019 INFO  CMN.logging [Proxy 22] – Message Number [22] on Thread [47] from Domino (172.16.1.16:2979) to Exchange (192.168.0.50:25): Processed Message ID: OF1E60FD00.7502912C-ONC1257C43.00739C32-C1257C43.0073C978@domino.testlabs.se – Size: 589 – From: Anette.Andersson@testlabs.se – To: Jonas.Andersson@testlabs.se – Processing Time: 3.443 Seconds – Changes: ActiveMailRemovedExtraneousAttachment, ActiveMailRemovedOnd, MimeModified

In the destination mailbox it should look like the picture below

image

And the reply from Outlook ends up in the source mailbox (Notes), just like the picture shows below

image

Calendar Free/Busy

A Free/Busy request was done by arranging a new meeting in the Notes client and selecting the migrated users. If the busytime lookup is working as expected, it should look similar to the picture below:

image

During the busytime lookup requests, these actions are being logged into the QCalCon.wlog on the Domino Qcalcon server and ExchangeFreeBusyService.wlog file on the CMN server. Some examples on log entries can be found while doing the busytime lookup, see below:

QCalCon.wlog:

2013-12-17 19:41:12,083 [mail.box] INFO  ScheduleRequestManager – Message retrieved from queue

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – ScheduleRequestHandler() enter

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – NotesInitThread

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – Cast thread parameter to SchMsgWrapper instance

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – Release SCHMSG instance from SchMsgWrapper instance

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – Process SCHMSG message

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – SchContainer_DupHandle: Duplicate SCHMSG hContainer handle

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – SchContainer_GetRequest: Get hContainerObject request from message hContainer

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – UserNameList: 1

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager –   CN=Jonas Andersson/O=target@Exchange

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – ClientNameList: 0

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – DominoServerNameChain:

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – Call GetFreeBusyForUsers

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – GetFreeBusyForUsers() enter

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – GetEmailsFromList() enter

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – Create SmtpEmailList

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – Create NameRepository

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – 1 entries in list

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – FullName:CN=Jonas Andersson/O=target@Exchange

2013-12-17 19:41:12,270 [12] INFO  NameRepository – TryGetMailAddressAndInternetAddressFromFullName() enter

2013-12-17 19:41:12,270 [12] INFO  NameRepository – FullName: CN=Jonas Andersson/O=target

2013-12-17 19:41:12,270 [12] INFO  NameRepository – MailAddress: Jonas.Andersson@testlabs.se@TARGET

2013-12-17 19:41:12,270 [12] INFO  NameRepository – InternetAddress: Jonas.Andersson@domino.testlabs.se

2013-12-17 19:41:12,270 [12] INFO  NameRepository – TryGetMailAddressAndInternetAddressFromFullName() exit

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – ScheduleRequestManager() exit

2013-12-17 19:41:12,270 [12] INFO  ScheduleRequestManager – Call ExchangeFreeBusyService net.tcp to get Free/Busy information

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – GetFreeBusyForUsers() exit

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – GetFreeBusyForUsers returned 1 results

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – Create SCHED_LIST result instance for user jonas.andersson@testlabs.se

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – Is a valid user.

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – Allocate 12068 bytes to hold SCHED_LIST

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – Convert 335 Free/Busy times to TIMEDATE format

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – Schedule_NewFromSchedList()

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – Set SCHMSG flags to SCHMSG_ReplyToRqst

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – MQPut: Place SCHMSG in output queue

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – SchContainer_FreeRequest: Free hContainerObject

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – SchContainer_Free: Free hContainer

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – Delete SCHMSG message

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – NotesTermThread

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – Free/Busy request processing took 00:00:25.6019938

2013-12-17 19:41:37,864 [12] INFO  ScheduleRequestManager – ScheduleRequestHandler() exit

ExchangeFreeBusyService.wlog:

2013-12-17 19:41:24,233 [3] INFO  ExchangeFreeBusyConnector – Initialize() Enter

2013-12-17 19:41:24,247 [3] INFO  ExchangeConfiguration – User name credential is sa-account@testlabs.se

2013-12-17 19:41:24,251 [3] INFO  ExchangeFreeBusyConnector – Initialize() Exit

2013-12-17 19:41:24,262 [3] INFO  FreeBusyWcfServiceBase – GetFreeBusyForUsers() Begin

2013-12-17 19:41:24,263 [3] INFO  FreeBusyWcfServiceBase – Time span: 12/17/2013 19:30:00 Local — 06/03/2014 19:30:00 Local

2013-12-17 19:41:24,270 [3] INFO  FreeBusyWcfServiceBase – Email addresses:

2013-12-17 19:41:24,270 [3] INFO  FreeBusyWcfServiceBase –   Jonas.Andersson@testlabs.se

2013-12-17 19:41:24,284 [3] INFO  ExchangeFreeBusyConnector – GetFreeBusyInfo() Begin

2013-12-17 19:41:24,287 [3] INFO  ExchangeFreeBusyConnector –   Email Addressees (Count=1), Start=12/17/2013 00:00:00 (Utc), End=06/03/2014 00:00:00 (Utc)

2013-12-17 19:41:24,287 [3] INFO  ExchangeFreeBusyConnector –     jonas.andersson@testlabs.se

2013-12-17 19:41:24,288 [3] INFO  ExchangeConfiguration – User name credential is sa-account@testlabs.se

2013-12-17 19:41:24,292 [3] INFO  AutodiscoverResultCache – jonas.andersson@testlabs.se not found in cache.

2013-12-17 19:41:24,302 [3] INFO  AutodiscoverWorker – Using hint autodiscover address https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml

2013-12-17 19:41:24,302 [3] INFO  AutodiscoverWorker – Email address: jonas.andersson@testlabs.se

2013-12-17 19:41:24,303 [3] INFO  AutodiscoverWorker – ScpLookupOrder:Last

2013-12-17 19:41:31,733 [3] INFO  AutodiscoverWorker – Using redirect target address https://pod51036.outlook.com/autodiscover/autodiscover.xml

2013-12-17 19:41:34,453 [3] INFO  AutodiscoverWorker – User display name: Jonas Andersson

2013-12-17 19:41:34,453 [3] INFO  AutodiscoverWorker – Internal Autodiscover URI: https://pod51036.outlook.com/autodiscover/autodiscover.xml

2013-12-17 19:41:34,453 [3] INFO  AutodiscoverWorker – Internal EWS URI: https://outlook.office365.com/EWS/Exchange.asmx

2013-12-17 19:41:34,453 [3] INFO  AutodiscoverWorker – Autodiscover successfully returned EWS URI.

2013-12-17 19:41:34,454 [3] INFO  AutodiscoverWorker – 00:00:10.1529517

2013-12-17 19:41:34,456 [3] INFO  AutodiscoverResultCache – Add jonas.andersson@testlabs.se https://outlook.office365.com/EWS/Exchange.asmx

2013-12-17 19:41:34,456 [3] INFO  AutodiscoverResultCache – Contains jonas.andersson@testlabs.se False

2013-12-17 19:41:34,461 [3] INFO  EwsWorker – Sending EWS request to Exchange

2013-12-17 19:41:37,043 [3] INFO  EwsWorker – Receiving EWS response from Exchange 00:00:02.5816765

2013-12-17 19:41:37,049 [3] INFO  EwsWorker – Sending EWS request to Exchange

2013-12-17 19:41:37,314 [3] INFO  EwsWorker – Receiving EWS response from Exchange 00:00:00.2646486

2013-12-17 19:41:37,314 [3] INFO  EwsWorker – Sending EWS request to Exchange

2013-12-17 19:41:37,574 [3] INFO  EwsWorker – Receiving EWS response from Exchange 00:00:00.2597097

2013-12-17 19:41:37,574 [3] INFO  EwsWorker – Sending EWS request to Exchange

2013-12-17 19:41:37,867 [3] INFO  EwsWorker – Receiving EWS response from Exchange 00:00:00.2934156

2013-12-17 19:41:37,872 [3] INFO  ExchangeFreeBusyConnector – GetFreeBusyInfo() End 00:00:13.5837260

2013-12-17 19:41:37,882 [3] INFO  FreeBusyWcfServiceBase –   Email Address: jonas.andersson@testlabs.se

2013-12-17 19:41:37,882 [3] INFO  FreeBusyWcfServiceBase –     Valid User=True, Busy Time count=335

2013-12-17 19:41:37,882 [3] INFO  FreeBusyWcfServiceBase – GetFreeBusyForUsers() End Elapsed Time 00:00:13.6100533

Outlook 2013/OWA (destination/target)

Mail flow

A mail is sent from the Outlook 2013/OWA client to a user that has not been migrated and remains in Domino.

The mail is a standard mail, see picture below.

image

During the transport, these actions are being logged into the CMN.log file on the CMN server, some related entities can be found below:

2013-12-17 19:11:43,822 INFO  CMN.logging [5] – Connection received from 213.199.154.14.

2013-12-17 19:11:43,840 INFO  CMN.logging [5] – Message Number [1] on Thread [5] from Exchange (213.199.154.14:18414) to Domino (172.16.1.16:25): Connection established.

2013-12-17 19:11:46,535 INFO  CMN.logging [Proxy 1] – Message Number [1] on Thread [9] from Exchange (213.199.154.14:18414) to Domino (172.16.1.16:25): Processed Message ID: 36b115a4b2974ece99a97f9c00fa3171@AMXPR01MB088.eurprd01.prod.exchangelabs.com – Size: 2773 – From: jonas.andersson@testlabs.se – To: Anette.Andersson@domino.testlabs.se – Processing Time: .134 Seconds – Changes: NoChange

In the destination mailbox (Lotus Notes) it should look like the picture below

image

And the reply from Notes ends up in the target mailbox (Outlook), just like the picture shows below

image

Calendar Free/Busy

A Free/Busy request was done by arranging a new meeting in the Outlook 2013/OWA client and selecting the Domino users. If the Free/Busy request lookup is working as expected, it should look similar to the picture below:

image

During the busytime lookup requests, these actions are being logged into the Autodiscover.wlog, EWS.wlog and DominoFreeBusyService.wlog on the CMN server. Some examples on log entries can be found while doing the busytime lookup, see below:

Autodiscover.wlog

2013-12-17 20:51:20,607 [6] INFO  AutodiscoverPage – IsSecureConnection: True

2013-12-17 20:51:20,608 [6] INFO  AutodiscoverPage – UserAgent: ASAutoDiscover/CrossForest/EmailDomain//15.00.0847.008

2013-12-17 20:51:20,612 [6] INFO  AutodiscoverPage – UserHostName: 157.56.250.52

2013-12-17 20:51:20,612 [6] INFO  AutodiscoverPage – UserHostAddress: 157.56.250.52

2013-12-17 20:51:20,619 [6] INFO  AutodiscoverPage – Email Address: Anette.Andersson@domino.testlabs.se

2013-12-17 20:51:20,619 [6] INFO  AutodiscoverPage – Quest EWS URL: https://autodiscover.domino.testlabs.se/EWS/Service.asmx

EWS.wlog:

2013-12-17 20:51:22,993 [6] INFO  QuestEWSService – RequestedView: DetailedMerged

2013-12-17 20:51:22,994 [6] INFO  QuestEWSService – RequestedViewSpecified: True

2013-12-17 20:51:22,994 [6] INFO  QuestEWSService – MergedFreeBusyIntervalInMinutes: 30

2013-12-17 20:51:22,995 [6] INFO  QuestEWSService – TimeWindow: 12/08/2013 00:00:00 Unspecified — 12/29/2013 00:00:00 Unspecified

2013-12-17 20:51:22,998 [6] INFO  QuestEWSService – TimeZone bias: -60

2013-12-17 20:51:22,999 [6] INFO  QuestEWSService –  StandardTime: -10-Sunday 5 0

2013-12-17 20:51:22,999 [6] INFO  QuestEWSService –  DaylightTime: -3-Sunday 5 -60

2013-12-17 20:51:22,999 [6] INFO  QuestEWSService –   Anette.Andersson@domino.testlabs.se

2013-12-17 20:51:25,298 [6] INFO  QuestEWSService – Response:

2013-12-17 20:51:25,298 [6] INFO  QuestEWSService –   Email Address: anette.andersson@domino.testlabs.se, FreeBusy Count: 39

2013-12-17 20:51:25,305 [6] INFO  QuestEWSService – 00:00:02.3123684

DominoFreeBusyService.wlog:

2013-12-17 20:51:23,587 [3] INFO  FreeBusyWcfServiceBase – GetFreeBusyForUsers() Begin

2013-12-17 20:51:23,588 [3] INFO  FreeBusyWcfServiceBase – Time span: 12/07/2013 23:00:00 Utc — 12/28/2013 23:00:00 Utc

2013-12-17 20:51:23,592 [3] INFO  FreeBusyWcfServiceBase – Email addresses:

2013-12-17 20:51:23,592 [3] INFO  FreeBusyWcfServiceBase –   Anette.Andersson@domino.testlabs.se

2013-12-17 20:51:23,717 [3] INFO  SmtpDomainMappings – smtpMappings count:0

2013-12-17 20:51:23,726 [3] INFO  DominoFreeBusyConnector – GetFreeBusyInfo() enter

2013-12-17 20:51:23,726 [3] INFO  DominoFreeBusyConnector – Get Domino user map.

2013-12-17 20:51:23,767 [3] INFO  DominoSingleton – Ctor() enter

2013-12-17 20:51:23,768 [3] INFO  DominoSingleton – Create DominoLibrary

2013-12-17 20:51:23,769 [3] INFO  DominoSingleton – Initialize DominoLibrary

2013-12-17 20:51:23,823 [3] INFO  DominoSingleton – Create UserMapRepository

2013-12-17 20:51:23,824 [3] INFO  DominoUserMapRepository – ctor() enter; serverName = domino/target

2013-12-17 20:51:23,824 [3] INFO  DominoUserMapRepository – ctor() exit

2013-12-17 20:51:23,824 [3] INFO  DominoSingleton – Ctor() exit

2013-12-17 20:51:23,827 [3] INFO  DominoUserMapRepository – GetDominoUserMap() enter; smtpDomain = testlabs.se

2013-12-17 20:51:23,827 [3] INFO  DominoUserMapRepository – anette.andersson@domino.testlabs.se not found in cache.

2013-12-17 20:51:23,827 [3] INFO  DominoUserMapRepository – 1 cache miss.

2013-12-17 20:51:23,837 [3] INFO  NameRepository – GetTargetDominoUsers count:1

2013-12-17 20:51:23,838 [3] INFO  NameRepository – Querying Domino Server Name=domino/target Domain=testlabs.se

2013-12-17 20:51:25,234 [3] INFO  NameRepository – Completed Domino Query

2013-12-17 20:51:25,234 [3] INFO  NameRepository – No error in Domino query

2013-12-17 20:51:25,235 [3] INFO  NameRepository – Address To Locate: anette.andersson@domino.testlabs.se

2013-12-17 20:51:25,238 [3] INFO  NameRepository – Domino Type: Person

2013-12-17 20:51:25,239 [3] INFO  NameRepository – Domino Internet Address: Anette.Andersson@domino.testlabs.se

2013-12-17 20:51:25,239 [3] INFO  NameRepository – Domino Full Name: CN=Anette Andersson/O=target

2013-12-17 20:51:25,239 [3] INFO  NameRepository – Domino Mail File: mail\aanderss

2013-12-17 20:51:25,239 [3] INFO  NameRepository – Domino Mail Domain: target

2013-12-17 20:51:25,239 [3] INFO  NameRepository – Domino List Name:

2013-12-17 20:51:25,239 [3] INFO  NameRepository – Domino Mail Server: CN=domino/O=target

2013-12-17 20:51:25,239 [3] INFO  NameRepository – Adding Anette.Andersson@domino.testlabs.se to result set.

2013-12-17 20:51:25,239 [3] INFO  NameRepository – finally – NameRepository :: GetTargetDominoUsers

2013-12-17 20:51:25,241 [3] INFO  DominoUserMapRepository – 1 addresses found.

2013-12-17 20:51:25,241 [3] INFO  DominoUserMapRepository – Adding anette.andersson@domino.testlabs.se to cache.

2013-12-17 20:51:25,241 [3] INFO  DominoUserMapRepository – GetDominoUserMap() exit

2013-12-17 20:51:25,241 [3] INFO  DominoFreeBusyConnector – 1 Domino domain users found.

2013-12-17 20:51:25,241 [3] INFO  DominoFreeBusyConnector – Filter list to SMTP Domino domain users.

2013-12-17 20:51:25,241 [3] INFO  DominoFreeBusyConnector – Get Free/Busy information for each valid user in SMTP Domino domain user list.

2013-12-17 20:51:25,241 [3] INFO  DominoFreeBusyConnector – Get live Free/Busy for Anette.Andersson@domino.testlabs.se

2013-12-17 20:51:25,254 [3] INFO  DominoLibrary – Sending request to Domino for free busy information.

2013-12-17 20:51:25,263 [3] INFO  DominoLibrary – Domino response processing complete.

2013-12-17 20:51:25,275 [3] INFO  DominoFreeBusyConnector – Add to result list

2013-12-17 20:51:25,275 [3] INFO  DominoFreeBusyConnector – Sort the result list.

2013-12-17 20:51:25,278 [3] INFO  DominoFreeBusyConnector – 1 Free/Busy results found

2013-12-17 20:51:25,278 [3] INFO  DominoFreeBusyConnector – GetFreeBusyInfo() exit

2013-12-17 20:51:25,280 [3] INFO  FreeBusyWcfServiceBase –   Email Address: anette.andersson@domino.testlabs.se

2013-12-17 20:51:25,280 [3] INFO  FreeBusyWcfServiceBase –     Valid User=True, Busy Time count=39

2013-12-17 20:51:25,280 [3] INFO  FreeBusyWcfServiceBase – GetFreeBusyForUsers() End Elapsed Time 00:00:01.6876990

Notes from the field

Log reader tool – A good log reader, my favorite is the old tool that was included in the SMS 2003 resource kit called trace32.exe. It can be downloaded here.

Domino SMTP routing – Until I have published a new article on this topic, see the existing one since it can be difficult to understand on how SMTP routing is working between the systems. See the post about it here: http://www.testlabs.se/blog/?p=1042

Network MonitoringNetwork Monitoring or Wireshark may sometimes be your best friend during troubleshooting network connectivity. Portqry is another tool that could be of great value during initial network verification.

Don’t hesitate to comment if you would like to add anything or if you have other experiences, I will add it into the post and link your blog.

I have decided that I won’t publish any article about the Migration Manager product. If anyone are interested of writing one, I’m glad to support and review the article. If interested, contact me at: jonas.andersson@testlabs.se.

I will take a break from the migration articles for a while now and write about other topics that readers hopefully find interesting reading.

Part 7: Configuring Coexistence Manager for Notes with Exchange 2013 On-premise

Part 7: Configuring Coexistence Manager for Notes with Exchange 2013 On-premise

Published: 2013-11-11
Updated: –
Version: 1.0

The previous post took us through the technical prerequisites, these should now be ready and in place before installing and configuring Coexistence Manager for Notes (CMN).

Before going into any details, if you are planning to do have a coexistence scenario between Domino and Exchange, you may want to consider using Dell Software’s Coexistence Manager for Notes. However, one important thing to mention is that there is a requirement from the vendor, to use certified people for the project.

This blog post is based on Coexistence Manager for Notes version 3.5.1.51.

Some of you might know that I wrote some articles regarding this topic two years ago, the configuration has changed a bit. I want to share it with the community and I hope you enjoy reading it.

Read the other parts:

Part 1: Migrations – Overview
Part 2: Prerequisites for Domino/Notes migrations
Part 3: Migrating Domino/Notes to Exchange 2013 On-premise
Part 4: Migrating Domino/Notes to Office 365
Part 5: Migrating Resources Mailboxes, Mail-In databases and Groups
Part 6: Prerequisites for Coexistence Manager for Notes with Exchange 2013 On-premise
Part 8: Configuring Coexistence Manager for Notes with Office 365
Part 9: Prerequisites for Migration Manager Exchange
Part 10: Migrating User Mailboxes from Exchange 2003 to Exchange 2013 using Migration Manager
Part 11: Migrating User Mailboxes from Exchange On-premise to Office 365

Installation of Coexistence Manager for Notes (CMN)

There is no need for further description on how to proceed with the installation of CMN, select the features that should be used, then it’s a “next-next-finish” installation.

Licensing

Startup “Quest Coexistence Manager for Notes Management Console” and go to “Common – Licensing” to provide a valid license file.

Mail Connector configuration

This post is not about how to create the mail flow configuration between Exchange and Domino since I assume, if you’re working and reading this topic, you’re familiar with how to create Send/Receive connectors in Exchange and Domain documents and Connection documents in Domino.

I will, however, post an article on how to configure Exchange and Domino regarding the mail flow.

Let’s configure CMN regarding mail flow, startup “Quest Coexistence Manager for Notes Management Console” and go to “Mail Connector”.

Go to “Inbound Servers”, remove any default values, add all incoming servers, both source and target servers. Just make sure to specify their function (Server type).

image

When all are added, it will look similar to the picture below.

image

Go to “Outbound Servers”, remove any default values. Either use the “Add” button or if you’re about to add the same as the Inbound, then use the “Copy from Inbound Servers” button.

image

After the servers are added, it will look similar as the picture below.

image

For Notes Doc Links, I will use the option “Notes links (Requires Notes client on clients)”, but you should select the option that will provide the best solution in each scenario.

image

I’m using the default settings for Network settings.

image

If needed, TLS can be used and it’s in this window the configuration takes place. In my lab environment, I’m not using TLS.

image

I’m using the default settings for Advanced Message settings.

image

I prefer to use the option “Rewrite Notes Common Names”, so it becomes more user-friendly and easier to read than a long Domino displayname.

Other options are not enable, use them if needed.

image

I’m using the default settings for Message Content Limits settings.

image

In the lab environment I’m not using the sub-domain option. However, if needed, here is the place to configure it.

image

Active Mail, it requires Notes client 7.0.3, 7.0.4 or 8.0 on the CMN server. It also requires the Notes client on the clients for being able to use the feature.

image

Default settings in Notification messages.

image

Here is a sample of the “ResourcesMap.tsv” file that’s used for mapping resources so they can be booked from Exchange/Outlook.

image

Import the “ResourcesMap.tsv” file, just verify the imported items and change the “Resource type” if they are not correct or configured.

image

Directory Synchronization configuration

Let’s walk through the directory synchronization, which is required to get Free/Busy to work properly. It’s required to provision users as contact objects.

With CMN 3.5.x, the directory synchronization uses a new module, which uses SQL for its configuration. Just see my picture below as an example of the SQL configuration.

The configuration can be found under “Directory Connector – SQL Settings”.

image

Domino Users synchronization, go to “Directory Connector – Connector Settings”. Press “Add” button and “Next” in the window.

image

Give the connector a friendly name like “Domino to AD – Users”, verify the “Direction” value and press “Next”.

image

Type in Source information: domino server, username, password and LDAP port.

image

Type in Target information: domain controller, username, password and LDAP port.
In my scenario, I’ve specified a domain controller, so I enabled that checkbox.

Specification of domain controllers are common in scenarios where you want to use the closest domain controller possible for faster reading and writing.

image

Select the object to process – “Users & Contacts”, specify the OU that should be synchronized.

image

Specify the target OU where objects will be created, also specify Target Search Base DN and load the Exchange attributes from AD and add them.

If you want to specify a different targetAddress domain (forwarding) use the “Enable Internal Routing Domain” option and specify a domain in the value field.

image

No connector order is selected.

image

A synchronization schedule is created, in my example 5 AM and 2 PM. The appropriate timing depends on how often and how many changes are done within Domino.

image

Press “Finish” to close the final window.

image

Groups synchronization, go to “Directory Connector – Connector Settings”. Press “Add” button and “Next” in the window.

image

Give the connector a friendly name like “Domino to AD – Groups”, verify the “Direction” value and press “Next”.

image

Type in Source information: domino server, username, password and LDAP port.

image

Type in Target information: domain controller, username, password and LDAP port.
In my scenario, I’ve specified a domain controller, so I enabled that checkbox.

Specification of domain controllers are common in scenarios where you want to use the closest domain controller possible for faster reading and writing.

image

Select the object to process by selecting “Groups” and specify the OU that should be synchronized.

image

Specify the target OU where objects will be created, also specify Target Search Base DN and load the Exchange attributes from AD and add them.

If you want to specify a different targetAddress domain (forwarding) enable the option “Enable Internal Routing Domain” and specify a domain in the value field.

image

No connector order is selected.

image

A synchronization schedule is created, in my example 5 AM and 2 PM. The appropriate timing depends on how often and how many changes are done within Domino.

image

Press “Finish” to close the final window.

image

Resources synchronization, go to “Directory Connector – Connector Settings”. Press “Add” button and “Next” in the window.

image

Give the connector a friendly name like “Domino to AD – Resources”, verify the “Direction” value and press “Next”.

image

Type in Source information: domino server, username, password and LDAP port.

image

Type in Target information: domain controller, username, password and LDAP port.
In my scenario, I’ve specified a domain controller, so I enabled that checkbox.

Specification of domain controllers are common in scenarios where you want to use the closest domain controller possible for faster reading and writing.

image

Select what object to process “Resources”, specify the OU that should be synchronized.

image

Specify the target OU where objects will be created, also specify Target Search Base DN and load the Exchange attributes from AD and add them.

If you want to specify a different targetAddress domain (forwarding) enable the option “Enable Internal Routing Domain” and specify a domain in the value field.

image

No connector order is selected.

image

A synchronization schedule is created, in my example 5 AM and 2 PM. The appropriate timing depends on how often and how many changes are done within Domino.

image

Press “Finish” to close the final window.

image

Free/Busy configuration

Since we now have the contact objects provisioned and the mail flow working, it’s time for the most involved part of the coexistence, the Free/Busy configuration.

Qcalcon configuration

The installation of Qcalcon on a Domino server is a standard “next-next-finish” procedure and a Domino server task will be created during the installation. The software can either be installed on an existing server or a dedicated Free/Busy server (I would recommend the latter IF possible).

Start the Qcalcon configuration by starting the “Coexistence Management Console”, see picture below.

image

Configure Qcalcon with the following properties (as an example):

“Gateway Mail File Name: mail.box” (verify with Domino Administrator on which to use)
”Quest Exchange Free/Busy Connector Service Endpoint: cmn35“ (resolvable DNS name to CMN server)

Note: You need to provide a valid license before the software can be used.

image

Domino configuration, go to the CMN server and start the CMN console, then go to “Domino Free/Busy Connector”.

Type in Domino configuration;
”Domino Server Name: domino/target” (specify server where Qcalcon is installed)
”Domino User fetch interval in minutes: 15
”Domino User SMTP domain: target.local
”Domino ID file path: C:\Temp\mmig.id” (Browse and select the ID file)
”Domino Password: *****” (Type in the password for that ID file)
”Enable Performance counters: Check

image

Go to “Quest Web Services”

Type in Domino configuration;
”Quest Autodiscover Host Name: target.local
”Quest Domino Free/Busy Connector Host Name: localhost

Don’t forget to create (if not done already as specified in part 6) the AvailabilityAddressSpace, or Free/Busy won’t work as expected.

image

Exchange configuration, let’s finish the Free/Busy configuration by completing the Exchange part by going to “Exchange Free/Busy Connector – Exchange Free/Busy”.

Type in Exchange configuration;
”Exchange Server location: EWS Endpoint” (more about these options can be found in the User Guide)
”Exchange Host Name: mail.testlabs.se
”Exchange Online: Unchecked
”Exchange Username: sa-cmnfb@testlabs.se
”Exchange Password: *****
”Show tentative As Busy: Yes
”Enable Performance Counters: Enable

Use the Test button to verify that the functionality is working as expected.

Note: Certificate needs to be deployed before a successful test.

image

Additional Configurations
Certificate/IIS

Coexistence Manager relies on certificates since it’s using HTTPS for requests. This is important to understand.

The provided “Quest Autodiscover URL” and “Quest EWS URL” is based on the value entered in the “Quest Autodiscover Host Name” field. This common name is used during Free/Busy requests and is required to be in the certificate used in IIS. It should be bound to IIS and the “QuestFreeBusy” website.

Once the certificates have been deployed into the CMN server and IIS, use the Test buttons in the CMN console to verify the Quest Autodiscover functionality. In most cases, the autodiscover DNS record is pointed to the Exchange so, in order to test this functionality, use the host file and point it to CMN server.

A last thing to verify is that the “QuestFreeBusy” website is enabled for HTTP (80) and HTTPS (443) traffic, since it’s a requirement.

Note: If using internal PKI solution, make sure to deploy the whole certificate chain to the involved servers. When it comes to Office 365 deployments, this will be discussed in the next blog post.

Autodiscover

In most environments, the autodiscover DNS record is pointed to the Exchange. The workaround for proper flow of Free/Busy requests is to add a line into the host file at the CAS server(s).

Like the example below:

image

The Autodiscover is used since the mail contacts have a targetAddress with “@target.local” and there is a configured value for that domain in the AvailabilityAddressSpace configuration. Because of that, the request ends up checking these contacts Free/Busy externally via Autodiscover, which is pointed to CMN.

EWS/WebServices

Just make sure to verify that the value configured in the InternalUrl and ExternalUrl is found in the Exchange certificate. And also, if using Internal PKI, that the whole chain is deployed to the involved servers and clients.

Verification of functionality
Notes client (source)


Mail flow

A mail is sent from the Lotus Notes client (8.5.x) to two users that were migrated and now have an Exchange mailbox and are using Outlook 2013.

The mail is a standard mail, see picture below.

image

During the transport, these actions are being logged into the CMN.log file on the CMN server, some related entities can be found below:

2013-11-10 14:13:25,914 INFO  CMN.logging [5] – Connection received from 172.16.1.16.
2013-11-10 14:13:26,274 INFO  CMN.logging [5] – Message Number [1] on Thread [5] from Domino (172.16.1.16:3157) to Exchange (172.16.1.12:25): Connection established.
2013-11-10 14:13:41,900 INFO  CMN.logging [Proxy 1] – Message Number [1] on Thread [3] from Domino (172.16.1.16:3157) to Exchange (172.16.1.12:25): Processed Message ID: OFA35F4382.5A84A034-ONC1257C1C.00482E50-C1257C1C.0048A376@target.local – Size: 578 – From: Jonas.Andersson@target.local – To: Anette.Andersson@exchange.testlabs.se, Klas.Andersson@exchange.testlabs.se – Processing Time: 1.792 Seconds – Changes: ActiveMailRemovedExtraneousAttachment, ActiveMailRemovedOnd, MimeModified

In the destination mailbox it should look like the picture below

image

And the reply from Outlook ends up in the source mailbox (Notes), just like the picture shows below

image

Calendar Free/Busy

A Free/Busy request was done by arranging a new meeting in the Notes client and selecting the migrated users. If the busytime lookup is working as expected, it should look similar to the picture below:

image

During the busytime lookup requests, these actions are being logged into the QCalCon.wlog and ExchangeFreeBusyService.wlog file on the CMN server. Some examples on log entries can be found while doing the busytime lookup, see below:

QCalCon.wlog:

2013-11-10 17:24:12,362 [LWPSCHEDGATEWAY] INFO  ScheduleRequestManager – Message retrieved from queue
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – ScheduleRequestHandler() enter
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – NotesInitThread
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – Cast thread parameter to SchMsgWrapper instance
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – Release SCHMSG instance from SchMsgWrapper instance
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – Process SCHMSG message
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – SchContainer_DupHandle: Duplicate SCHMSG hContainer handle
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – SchContainer_GetRequest: Get hContainerObject request from message hContainer
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – UserNameList: 2
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager –   Anette.Andersson@exchange.testlabs.se
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager –   Klas.Andersson@exchange.testlabs.se
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – ClientNameList: 0
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – DominoServerNameChain:
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – Call GetFreeBusyForUsers
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – GetFreeBusyForUsers() enter
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – GetEmailsFromList() enter
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – Create SmtpEmailList
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – Create NameRepository
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – 2 entries in list
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – FullName:Anette.Andersson@exchange.testlabs.se
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – FullName:Klas.Andersson@exchange.testlabs.se
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – ScheduleRequestManager() exit
2013-11-10 17:24:12,362 [11] INFO  ScheduleRequestManager – Call ExchangeFreeBusyService net.tcp to get Free/Busy information
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – GetFreeBusyForUsers() exit
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – GetFreeBusyForUsers returned 2 results
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – Create SCHED_LIST result instance for user anette.andersson@exchange.testlabs.se
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – Is a valid user.
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – Allocate 8 bytes to hold SCHED_LIST
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – Convert 0 Free/Busy times to TIMEDATE format
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – Schedule_NewFromSchedList()
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – Create SCHED_LIST result instance for user klas.andersson@exchange.testlabs.se
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – Is a valid user.
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – Allocate 2600 bytes to hold SCHED_LIST
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – Convert 72 Free/Busy times to TIMEDATE format
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – Schedule_NewFromSchedList()
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – Set SCHMSG flags to SCHMSG_ReplyToRqst
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – MQPut: Place SCHMSG in output queue
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – SchContainer_FreeRequest: Free hContainerObject
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – SchContainer_Free: Free hContainer
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – Delete SCHMSG message
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – NotesTermThread
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – Free/Busy request processing took 00:00:01.0212926
2013-11-10 17:24:13,377 [11] INFO  ScheduleRequestManager – ScheduleRequestHandler() exit

ExchangeFreeBusyService.wlog:

2013-11-10 17:24:12,376 [15] INFO  ExchangeFreeBusyConnector – Initialize() Enter
2013-11-10 17:24:12,377 [15] INFO  ExchangeConfiguration – User name credential is sa-cmnfb@testlabs.se
2013-11-10 17:24:12,378 [15] INFO  ExchangeFreeBusyConnector – Initialize() Exit
2013-11-10 17:24:12,378 [15] INFO  FreeBusyWcfServiceBase – GetFreeBusyForUsers() Begin
2013-11-10 17:24:12,378 [15] INFO  FreeBusyWcfServiceBase – Time span: 11/07/2013 17:15:00 Local — 04/24/2014 17:15:00 Local
2013-11-10 17:24:12,378 [15] INFO  FreeBusyWcfServiceBase – Email addresses:
2013-11-10 17:24:12,378 [15] INFO  FreeBusyWcfServiceBase –   Anette.Andersson@exchange.testlabs.se
2013-11-10 17:24:12,378 [15] INFO  FreeBusyWcfServiceBase –   Klas.Andersson@exchange.testlabs.se
2013-11-10 17:24:12,379 [15] INFO  ExchangeFreeBusyConnector – GetFreeBusyInfo() Begin
2013-11-10 17:24:12,379 [15] INFO  ExchangeFreeBusyConnector –   Email Addressees (Count=2), Start=11/07/2013 00:00:00 (Utc), End=04/24/2014 00:00:00 (Utc)
2013-11-10 17:24:12,379 [15] INFO  ExchangeFreeBusyConnector –     anette.andersson@exchange.testlabs.se
2013-11-10 17:24:12,379 [15] INFO  ExchangeFreeBusyConnector –     klas.andersson@exchange.testlabs.se
2013-11-10 17:24:12,379 [15] INFO  ExchangeConfiguration – User name credential is sa-cmnfb@testlabs.se
2013-11-10 17:24:12,379 [15] INFO  EwsWorker – Sending EWS request to Exchange
2013-11-10 17:24:13,117 [15] INFO  EwsWorker – Receiving EWS response from Exchange 00:00:00.7369215
2013-11-10 17:24:13,117 [15] INFO  EwsWorker – Sending EWS request to Exchange
2013-11-10 17:24:13,184 [15] INFO  EwsWorker – Receiving EWS response from Exchange 00:00:00.0662414
2013-11-10 17:24:13,184 [15] INFO  EwsWorker – Sending EWS request to Exchange
2013-11-10 17:24:13,247 [15] INFO  EwsWorker – Receiving EWS response from Exchange 00:00:00.0627933
2013-11-10 17:24:13,247 [15] INFO  EwsWorker – Sending EWS request to Exchange
2013-11-10 17:24:13,313 [15] INFO  EwsWorker – Receiving EWS response from Exchange 00:00:00.0654069
2013-11-10 17:24:13,313 [15] INFO  ExchangeFreeBusyConnector – GetFreeBusyInfo() End 00:00:00.9331625
2013-11-10 17:24:13,313 [15] INFO  FreeBusyWcfServiceBase –   Email Address: anette.andersson@exchange.testlabs.se
2013-11-10 17:24:13,313 [15] INFO  FreeBusyWcfServiceBase –     Valid User=True, Busy Time count=0
2013-11-10 17:24:13,313 [15] INFO  FreeBusyWcfServiceBase –   Email Address: klas.andersson@exchange.testlabs.se
2013-11-10 17:24:13,313 [15] INFO  FreeBusyWcfServiceBase –     Valid User=True, Busy Time count=72
2013-11-10 17:24:13,313 [15] INFO  FreeBusyWcfServiceBase – GetFreeBusyForUsers() End Elapsed Time 00:00:00.9340514

Outlook 2013 (destination/target)

Mail flow

A mail is sent from the Outlook 2013 client to a user that has not been migrated and remains in Domino.

The mail is a standard mail, see picture below.

image

During the transport, these actions are being logged into the CMN.log file on the CMN server, some related entities can be found below:

2013-11-10 17:37:40,731 INFO  CMN.logging [5] – Connection received from 172.16.1.12.
2013-11-10 17:37:40,734 INFO  CMN.logging [5] – Message Number [4] on Thread [5] from Exchange (172.16.1.12:32641) to Domino (172.16.1.16:25): Connection established.
2013-11-10 17:37:40,798 INFO  CMN.logging [Proxy 4] – Message Number [4] on Thread [12] from Exchange (172.16.1.12:32641) to Domino (172.16.1.16:25): Processed Message ID: 845c8150e7184c1794427a406e6e90e5@TLEX01.testlabs.se – Size: 3332 – From: klas.andersson@testlabs.se – To: Jonas.Andersson@target.local – Processing Time: .002 Seconds – Changes: NoChange

In the destination mailbox (Lotus Notes) it should look like the picture below

image

And the reply from Notes ends up in the target mailbox (Outlook), just like the picture shows below

image

Calendar Free/Busy

A Free/Busy request was done by arranging a new meeting in the Outlook 2013 client and selecting the Domino users. If the Free/Busy request lookup is working as expected, it should look similar to the picture below:

image

During the busytime lookup requests, these actions are being logged into the QCalCon.wlog and ExchangeFreeBusyService.wlog file on the CMN server. Some examples on log entries can be found while doing the busytime lookup, see below:

Autodiscover.wlog

2013-11-10 17:45:29,687 [6] INFO  AutodiscoverPage – IsSecureConnection: True
2013-11-10 17:45:29,688 [6] INFO  AutodiscoverPage – UserAgent: ASAutoDiscover/CrossForest/EmailDomain//15.00.0712.014
2013-11-10 17:45:29,790 [6] INFO  AutodiscoverPage – UserHostName: 172.16.1.12
2013-11-10 17:45:29,790 [6] INFO  AutodiscoverPage – UserHostAddress: 172.16.1.12
2013-11-10 17:45:29,883 [6] INFO  AutodiscoverPage – Email Address: Jonas.Andersson@target.local
2013-11-10 17:45:29,883 [6] INFO  AutodiscoverPage – Quest EWS URL: https://autodiscover.target.local/EWS/Service.asmx

EWS.wlog:

2013-11-10 17:45:31,178 [1] INFO  Global – Application_Start
2013-11-10 17:45:31,190 [1] INFO  Global – Assembly Title: CMX.Apps.FreeBusy.ExchangeWebService
2013-11-10 17:45:31,191 [1] INFO  Global – File Version: 3.5.1.51
2013-11-10 17:45:34,771 [6] INFO  QuestEWSService – RequestedView: Detailed
2013-11-10 17:45:34,772 [6] INFO  QuestEWSService – RequestedViewSpecified: True
2013-11-10 17:45:34,772 [6] INFO  QuestEWSService – MergedFreeBusyIntervalInMinutes: 30
2013-11-10 17:45:34,773 [6] INFO  QuestEWSService – TimeWindow: 11/03/2013 08:00:00 Unspecified — 12/03/2013 08:00:00 Unspecified
2013-11-10 17:45:34,775 [6] INFO  QuestEWSService – TimeZone bias: -60
2013-11-10 17:45:34,776 [6] INFO  QuestEWSService –  StandardTime: -10-Sunday 5 0
2013-11-10 17:45:34,776 [6] INFO  QuestEWSService –  DaylightTime: -3-Sunday 5 -60
2013-11-10 17:45:34,776 [6] INFO  QuestEWSService –   Jonas.Andersson@target.local
2013-11-10 17:45:36,774 [6] INFO  QuestEWSService – Response:
2013-11-10 17:45:36,774 [6] INFO  QuestEWSService –   Email Address: jonas.andersson@target.local, FreeBusy Count: 61
2013-11-10 17:45:36,778 [6] INFO  QuestEWSService – 00:00:02.0071483

DominoFreeBusyService.wlog:

2013-11-10 17:45:35,142 [3] INFO  FreeBusyWcfServiceBase – GetFreeBusyForUsers() Begin
2013-11-10 17:45:35,143 [3] INFO  FreeBusyWcfServiceBase – Time span: 11/03/2013 07:00:00 Utc — 12/03/2013 07:00:00 Utc
2013-11-10 17:45:35,149 [3] INFO  FreeBusyWcfServiceBase – Email addresses:
2013-11-10 17:45:35,149 [3] INFO  FreeBusyWcfServiceBase –   Jonas.Andersson@target.local
2013-11-10 17:45:35,235 [3] INFO  SmtpDomainMappings – smtpMappings count:0
2013-11-10 17:45:35,242 [3] INFO  DominoFreeBusyConnector – GetFreeBusyInfo() enter
2013-11-10 17:45:35,243 [3] INFO  DominoFreeBusyConnector – Get Domino user map.
2013-11-10 17:45:35,328 [3] INFO  DominoSingleton – Ctor() enter
2013-11-10 17:45:35,328 [3] INFO  DominoSingleton – Create DominoLibrary
2013-11-10 17:45:35,330 [3] INFO  DominoSingleton – Initialize DominoLibrary
2013-11-10 17:45:35,411 [3] INFO  DominoSingleton – Create UserMapRepository
2013-11-10 17:45:35,412 [3] INFO  DominoUserMapRepository – ctor() enter; serverName = domino/target
2013-11-10 17:45:35,412 [3] INFO  DominoUserMapRepository – ctor() exit
2013-11-10 17:45:35,412 [3] INFO  DominoSingleton – Ctor() exit
2013-11-10 17:45:35,416 [3] INFO  DominoUserMapRepository – GetDominoUserMap() enter; smtpDomain = target.local
2013-11-10 17:45:35,416 [3] INFO  DominoUserMapRepository – jonas.andersson@target.local not found in cache.
2013-11-10 17:45:35,416 [3] INFO  DominoUserMapRepository – 1 cache miss.
2013-11-10 17:45:35,425 [3] INFO  NameRepository – GetTargetDominoUsers count:1
2013-11-10 17:45:35,426 [3] INFO  NameRepository – Querying Domino Server Name=domino/target Domain=target.local
2013-11-10 17:45:36,718 [3] INFO  NameRepository – Completed Domino Query
2013-11-10 17:45:36,718 [3] INFO  NameRepository – No error in Domino query
2013-11-10 17:45:36,719 [3] INFO  NameRepository – Address To Locate: jonas.andersson@target.local
2013-11-10 17:45:36,720 [3] INFO  NameRepository – Domino Type: Person
2013-11-10 17:45:36,721 [3] INFO  NameRepository – Domino Internet Address: Jonas.Andersson@target.local
2013-11-10 17:45:36,721 [3] INFO  NameRepository – Domino Full Name: CN=Jonas Andersson/O=target
2013-11-10 17:45:36,721 [3] INFO  NameRepository – Domino Mail File: mail\janderss.nsf
2013-11-10 17:45:36,721 [3] INFO  NameRepository – Domino Mail Domain: target
2013-11-10 17:45:36,721 [3] INFO  NameRepository – Domino List Name:
2013-11-10 17:45:36,721 [3] INFO  NameRepository – Domino Mail Server: CN=domino/O=target
2013-11-10 17:45:36,721 [3] INFO  NameRepository – Adding Jonas.Andersson@target.local to result set.
2013-11-10 17:45:36,721 [3] INFO  NameRepository – finally – NameRepository :: GetTargetDominoUsers
2013-11-10 17:45:36,722 [3] INFO  DominoUserMapRepository – 1 addresses found.
2013-11-10 17:45:36,722 [3] INFO  DominoUserMapRepository – Adding jonas.andersson@target.local to cache.
2013-11-10 17:45:36,722 [3] INFO  DominoUserMapRepository – GetDominoUserMap() exit
2013-11-10 17:45:36,722 [3] INFO  DominoFreeBusyConnector – 1 Domino domain users found.
2013-11-10 17:45:36,722 [3] INFO  DominoFreeBusyConnector – Filter list to SMTP Domino domain users.
2013-11-10 17:45:36,722 [3] INFO  DominoFreeBusyConnector – Get Free/Busy information for each valid user in SMTP Domino domain user list.
2013-11-10 17:45:36,722 [3] INFO  DominoFreeBusyConnector – Get live Free/Busy for Jonas.Andersson@target.local
2013-11-10 17:45:36,730 [3] INFO  DominoLibrary – Sending request to Domino for free busy information.
2013-11-10 17:45:36,737 [3] INFO  DominoLibrary – Domino response processing complete.
2013-11-10 17:45:36,749 [3] INFO  DominoFreeBusyConnector – Add to result list
2013-11-10 17:45:36,749 [3] INFO  DominoFreeBusyConnector – Sort the result list.
2013-11-10 17:45:36,752 [3] INFO  DominoFreeBusyConnector – 1 Free/Busy results found
2013-11-10 17:45:36,752 [3] INFO  DominoFreeBusyConnector – GetFreeBusyInfo() exit
2013-11-10 17:45:36,754 [3] INFO  FreeBusyWcfServiceBase –   Email Address: jonas.andersson@target.local
2013-11-10 17:45:36,754 [3] INFO  FreeBusyWcfServiceBase –     Valid User=True, Busy Time count=61
2013-11-10 17:45:36,754 [3] INFO  FreeBusyWcfServiceBase – GetFreeBusyForUsers() End Elapsed Time 00:00:01.6046657

Notes from the field

Log reader tool – A good log reader, my favorite is the old tool that was included in the SMS 2003 resource kit called trace32.exe. It can be downloaded here.

Domino SMTP routing – Until I have published a new article on this topic, see the existing one since it can be difficult to understand on how SMTP routing is working between the systems. See the post about it here: http://www.testlabs.se/blog/?p=1042

Network MonitoringNetwork Monitoring or Wireshark may sometimes be your best friend during troubleshooting network connectivity. Portqry is another tool that could be of great value during initial network verification.

Don’t hesitate to comment if you would like to add anything or if you have other experiences, I will add it into the post and link your blog.

Next post will be on the same topic, but using Office 365 instead of On-premise.

Part 5: Migrating Resources Mailboxes, Mail-In databases and Groups

Part 5: Migrating Resources Mailboxes, Mail-In databases and Groups

Published: 2013-08-07
Updated: –
Version: 1.0

This post will focus on migrating Groups, Mail-In databases and Resources from Domino/Notes migration to Exchange On-premise or Office 365.

Before going into any details, if you are planning to do a migration from Domino and want to use Dell Software’s Notes Migrator for Exchange, it is important to mention that there is a requirement from the vendor to use certified people for the project.

This blog post is based on Notes Migration for Exchange version 4.7.0.82.

Read the other parts:
Part 1: Migrations – Overview
Part 2: Prerequisites for Domino/Notes migrations
Part 3: Migrating Domino/Notes to Exchange 2013 On-premise
Part 4: Migrating Domino/Notes to Office 365
Part 6: Prerequisites for Coexistence between Domino and Exchange 2013/Office 365
Part 7: Configuring Quest Coexistence Manager for Notes with Exchange 2013 On-premise
Part 8: Configuring Quest Coexistence Manager for Notes with Office 365
Part 9: Prerequisites for Quest Migration Manager
Part 10: Migrating User Mailboxes from Exchange 2003 to Exchange 2013 using Migration Manager
Part 11: Migrating User Mailboxes from Exchange On-premise to Office 365

Installation Notes Migrator for Exchange (NME)

The installation is a regular next/next/finish installation. During the first startup it will ask for a license file, so provide an appropriate license and the application will start.

The installation and configuration instructions can be found at:
http://www.testlabs.se/blog/?p=680

Creating batches/collections

Creating batches of Groups is done through “Group Collections – Manage” and the “New collection…” option.

image

Creating batches of mail-in databases and resources works the same way, following the steps below.
Users are migrated based in batches (or collections), these batches are created through “User Collections – Manage” and pressing “New collection…”.

image

Provide a collection name and label (label is not required). Labels can be very helpful when looking for a particular batch after creating many collections.

image

Designating users for each batch can be done either by finding them in the directory (i.e. NME database) or by importing from a TSV file. In this example, I select from the directory because I am only selecting one user. In other cases, the TSV import may be useful.

image

As demonstrated below, I search for a user with a Display Name that starts with Jonas. Type the desired characters in the value field, press “Add” button. You can add multiple criteria to the search filter if desired and press “Find now” when ready.

image

The results will be shown in the search result section. Select the desired user(s) and press “OK”. The user is then added into the batch.

image

For illustration, the picture below shows a collection of Groups.

image

Migration finalization / switch / routing

Updating routing for groups, mail-in databases and resources works almost the same as user routing.

Migrations are accomplished by switching the routing and migrating the contents.
NME will configure the objects with appropriate forwarding settings to ensure Domino can route email to Exchange for this specified forwarding domain.

See section Notes from the field for configuring Domino mail routing.

Before any changes are made, it’s good to have insight of how the objects look in Domino Administrator. See the pictures below. For more information about the objects, an LDAP browser can be used.
I recommend Softerra LDAP Browser 4.5.

Rooms

image

Room100 – Restricted room “specific people”, can only be booked by the listed people.

image

Room101 – “Owner only”, only owners are allowed to book the room, others requires owner approval.

image

Room102 – No restrictions

image

See the picture below for total summary of the Domino restriction settings (source: Dell Software: Pre-migration planning guide).

image

Room switching / routing / migration

From “User Collections – Migrate User Data”, select the migration batch by pressing the arrow and choosing the desired batch. When selected, press “Migrate…”

image

Select “Manage mail routing” and press “Next”.

image

Select “Exchange” and “Quest Coexistence Manager for Notes” with “Using ActiveMail processing”.
This will configure the associated Domino object with a forwarding address.

image

Calendar domain: Exchange” (this is used during Freebusy coexistence, discussed in coexistence post)
”Set server running qcalcon: dominoserver/dominodomain” (specify the server that have Qcalcon installed)
”Specify your Domino domain: dominodomain” (specify your Domino domain)

Check “Set mail forwarding address”
”Forwarding mail domain: exchange.testlabs.se” (Domino need to route mails to this SMTP domain)
Select ”Append Domino domain to forwarding address”
”Overwrite existing mail forwarding address: Always

Then press “Next”.

image

If Exchange mailboxes have forwarding/targetAddresses configured, these can be removed using this option as well. In my test case, I don’t have these configured, so I will let them be unchecked. Press “Next”.

image

When switching (routing) mailboxes, with sufficient hardware, I typically run this operation with at least 20 threads (simultaneous processes). However, in this scenario it is being performed on a couple of mailboxes, so I left it with 1 thread. Press “Next”.

image

A summary is shown, press “Next”.

image

The operation can be scheduled but, in my case, I want to run it now. Press “Next”.

image

The operation starts…

image

…and it was completed. Press “Exit”.

image

When the operation is complete, you can verify that the object in Domino directory has been updated.
Note that the Forwarding address (known as “mailaddress”) now is configured, the Mail system (known as “mailsystem”) is configured to Other Internet Mail (has a value of “5”) and Domain value has been deleted.

Migrating data

Since the mail routing is complete and new mail will route directly to the Exchange mailbox, it’s time to migrate the data.

One thing to keep in mind before starting the migration, is verifying the mailboxes were created with the correct mailbox type. In this scenario it should be created as “Room Mailbox”. This can be verified by running the PowerShell command:

Get-Mailbox room* | ft DisplayName,Resourcetype –Autosize

If they were listed as User Mailboxes for some reason, they could easily be changed to Room Mailboxes by running the PowerShell command:

Get-Mailbox room* | Set-Mailbox –Type Room

Similarly, for Mail-In databases to Shared Mailboxes, verify they are listed as shared mailboxes. If needed, change the type by running the PowerShell command:

Get-Mailbox mail-in-databases* | Set-Mailbox –Type Shared

Before the migration, one of the target mailboxes had 1 item and a total of 4 kb. All others had zero items, shown in the picture below. Using PowerShell command:

Get-Mailbox room* | Get-MailboxStatistics | ft displayname,itemcount,totalitemsize –Autosize

image

Go to “User Collections – Migrate User Data”, select the migration batch and press “Migrate…”

image

Select “Migrate mailbox data”, press “Next”.

image

In this scenario, I didn’t use the notification options. However, these can be helpful for letting users know that they are migrated and should start to use Outlook instead of Notes. Press “Next”.

image

Select the data types you wish to migrate. I decide not to migrate Trash and the Archive. Everything else will get migrated. Press “Next”.

image

Select the preferred conversion method for DocLinks. For this example, I used “Notes .NDL attachment (requires Notes client to use after migration)”. Press “Next”.

image

Select “Through Domino server(s)”, press “Next”.

image

Select “Server-based mailbox”, press “Next”.

image

In my scenario, I want to migrate everything, but the filtering options can be very useful in projects that might require migrating (or pre-migrating) a subset by date or size.

After selecting the appropriate settings, press “Next”.

image

When migrating mailbox data, I commonly run it with 8-12 threads (simultaneous processes).

You will need to determine the setting that is best in your environment. This is normally done before or during the pilot phase of the project to ensure the optimal configuration is ready for production migrations.

In this scenario, I am just migrating three resources so I leave it with 1 thread. Press “Next”.

image

A summary is shown, press “Next”.

image

I want to start the migration now. However, if that’s not the case, you have the opportunity to schedule it.

Press “Next”.

image

The operation starts…

image

…during the operation…

image

…operation completed. Press “Exit”.

image

For this example, the migration throughput rates are low because we migrated a couple of test mailboxes with a small sampling of data. As you scale your migrations to include additional mailboxes and threads, much higher throughput rates will be achieved. This was done in a lab environment using slow disks and small amount of memory.

When the migration is completed, I recommend comparing item counts and mailbox sizes, but you will need to account for data compression differences between Domino and Exchange.

I’ve seen differences between 20-35% depending on the circumstances. This means a Notes mail file of 1 GB may be 1,35 GB in Exchange. However, this is just a rule of thumb and needs to be estimated with actual data from each project since every customer is unique.

Verify the item count and mail data size by using the same PowerShell command:

Get-Mailbox room* | Get-MailboxStatistics | ft displayname,itemcount,totalitemsize –Autosize

The picture below shows that there are now a total of 5 items and 17 kb of data in the mailboxes.

image

Group migrations

We created one Group collection/batch at the beginning of this article.

For illustration the two Groups will be migrated into Active Directory (AD) / Exchange. The first group, called “Finance”, is a Multi-purpose group (could be compared with Security Group in AD) that could not only be used for mail but also controlling permissions.

image

image

The second group called “Marketing”, is Mail-only group, which could be compared to a Distribution Group/List in Exchange and is only used for distribution mails.

image

image

Let’s start the provisioning process within “Group Collections – Provision”. Select the desired group collection and press “Provision groups…”

image

Verify the Group Type for the collection and the path are correct. Also, verify the container for external contacts is correct. Check the option “Keep groups in sync with corresponding Notes groups”, this option will make sure that the group is updated with the correct members. Press Next.

image

image

A summary is shown, press Next.

image

I want to run the task Now, press Next.

image

The result is shown. Press Exit.

image

Groups were created successfully in the correct OU.

image

Verify the members are correct. Looks fine…

image

image

The owner/manager (ManagedBy) is also migrated over.

image

image

If groups are updated in Domino on a regular basis and they need to be maintained in AD/Exchange, a scheduled job could be created to automate this process. Information about how to create a scheduled job can found in the Administration Guide of NME included with the software.

Permissions / Delegation / Restrictions during migrations

The following quote from the User Guide regarding migration of delegated users outlines

the prerequisites quite well for getting the delegates over to Exchange.

The permissions on normal Domino mailboxes are migrated IF the prerequisites above are fulfilled.

I would like to recommend investigating both the Resources and the Mail-In databases regarding restrictions, who has permissions to book and who is the owner before starting the migration. This can either be done in Domino or using an analyzer tool, like MessageStats.

Changes regarding migration of delegates have been made in the last version of NME (version 4.7.0.82). These optional variables has been added and could be used, more information can be found in the release notes for NME.

[Exchange]

MigrateResourceDelegation=<#>

GrantResourceOwnerFullAccess=<#>

MigrateMailInDBOwner=<#>

Notes from the field

Dell Software – MessageStats – The tool can be of great value for analyzing and investigating environments before starting migrations. More information is available here: http://www.quest.com/messagestats/

Domino SMTP routing – This can be difficult to understand if you haven’t been working with Domino or been involved in any migration projects before. I posted an article about coexistence that goes through the configuration steps: http://www.testlabs.se/blog/?p=1042

Proxy server – One thing that can be a potential issue during migrations is proxy servers. I recommend avoiding them as much as possible. If you can avoid them you will most likely save yourself some issues that might occur if a proxy server is used. These tend to block or throttle traffic, the impact can be either that the migration throughput will be very low or that it will prohibit the traffic from reaching its destination.

Creating batches/collections – If you are involved in larger migration projects, you likely won’t want to find each user manually. As an alternative, you can search by a Domino Directory value that is unique to each migration batch.

Another method for adding users to the batch is using TSV files. If you choose this approach, Excel will become your best friend.

Pre-stage/Delta migration consideration – In cases where it’s possible, I recommend starting the migration right away after the pilot has been approved. This means that the mailbox data can be migrated over/synchronized before the actual migration must take place. By pre-staging data, the mailbox switch/routing can be done fast and finally the mailbox delta data (differences) can be migrated. This can minimize the “migration time”. By this, I mean the time that the end-users are impacted in some way or another.

One thing to keep in mind if using this method is that as soon as a mailbox is created in Exchange, the Free/Busy requests from other Exchange users sent to this newly created user won’t be sent back to Domino (where the most current data remains and action should take place).

I have requested a feature from Microsoft that would make the “forwarding” of Free/Busy requests possible, but haven’t heard anything back from them yet. It would be great if that could be solved, probably easily by using targetAddress attribute together with a new attribute, for ex. forwardfbreq set to either 0 (default) or 1.

Don’t hesitate to comment if you would like to add anything or if you have other experiences, I will add it into the post and link your blog.

Next post will be published after the holidays, in the meanwhile enjoy the vacations stay tuned after summer for new publications, we I start of with Coexistence Manager for Notes.

Part 4: Migrating Domino/Notes to Office 365

Part 4: Migrating Domino/Notes to Office 365

Published: 2013-07-03
Updated: –
Version: 1.0

This post will focus on migrating from Domino/Notes migration to Office 365.

Before going into any details, if you are planning to do a migration from Domino and want to use Dell Software’s Notes Migrator for Exchange, it is important to mention that there is a requirement from the vendor to use certified people for the project.

This blog post is based on Notes Migration for Exchange version 4.7.0.82.

If you would like to read the other parts:
Part 1: Migrations – Overview
Part 2: Prerequisites for Domino/Notes migrations
Part 3: Migrating Domino/Notes to Exchange 2013 On-premise
Part 5: Migrating Resources Mailboxes, Mail-In databases and Groups
Part 6: Prerequisites for Coexistence between Domino and Exchange 2013/Office 365
Part 7: Configuring Quest Coexistence Manager for Notes with Exchange 2013 On-premise
Part 8: Configuring Quest Coexistence Manager for Notes with Office 365
Part 9: Prerequisites for Quest Migration Manager
Part 10: Migrating User Mailboxes from Exchange 2003 to Exchange 2013 using Migration Manager
Part 11: Migrating User Mailboxes from Exchange On-premise to Office 365

Installation Notes Migrator for Exchange (NME)

The installation is a regular next/next/finish installation. During the first startup it will ask for a license file, so provide an appropriate license and the application will start.

The installation and configuration instructions can be found at:
http://www.testlabs.se/blog/?p=680

Creating batches/collections

Users are migrated based on batches (or collections), these batches are created from “User Collections – Manage” and by pressing “New collection…”

image

Give the collection a name and label (label is not required). Labels can be of great help if looking for a particular batch after creating many collections.

image

Choosing which users should reside in the batch can be done either by finding them in the directory (i.e. NME database) or by importing them from a TSV file. In this example, I chose find them from the directory because I only select one user. In other cases the TSV import can be useful.

image

As demonstrated below, I search for a user with a Display Name that starts with Jonas. Type the desired characters in the value field, press “Add” button. You can add multiple criteria to the search filter if desired and press “Find now” when ready.

image

The results will be shown in the search result section. Select the desired user(s) and press “OK”. The user is then added into the batch.

image

Migration finalization / switch / routing

When migration batches/collections have been created we are ready to start the migration.

It is basically done by switching the mailbox and migrating the contents.
NME will configure the Domino person document with appropriate forwarding settings to ensure Domino can route email to Exchange for this specified forwarding domain.

See section Notes from the field for how to configure Domino mail routing.

Before any changes are made, the mailbox properties typically looks like the picture below.
It has an Internet Address (same as email addresses in Exchange i.e. SMTP).

image

Go to “User Collections – Migrate User Data”, select the migration batch by pressing the arrow and choosing the correct batch. When selected, press “Migrate…”

image

Select “Manage mail routing” and press “Next”.

image

Select “Exchange” and “Quest Coexistence Manager for Notes” with “Using ActiveMail processing”.
This for configuring the Domino mailbox with a forwarding address.

image

Calendar domain: Exchange” (this is used during Freebusy coexistence, discussed in coexistence post)
”Set server running qcalcon: DominoServer/DominoDomain” (specify the server that have Qcalcon installed)
”Specify your Domino domain: DominoDomain” (specify your Domino domain)

Check “Set mail forwarding address”
”Forwarding mail domain: testlabstrial.onmicrosoft.com” (Domino need to route mails to this SMTP domain)
Check ”Append Domino domain to forwarding address”
”Overwrite existing mail forwarding address: Always

Then press “Next”.

image

If Exchange mailboxes have forwarding/targetAddresses configured, these can be removed by using this option. In my case I don’t have these configured, so I will let them be unchecked. Press “Next”.

image

When switching (routing) mailboxes, with sufficient hardware, I typically run this operation with at least 20 threads (simultaneous processes). However, in this scenario it is being performed on a single mailbox, so I left it with 1 thread. Press “Next”.

image

A summary is shown, press “Next”.

image

The operation can be scheduled but, in my case, I want to run it now. Press “Next”.

image

The operation starts…

image

…and it was completed. Press “Exit”.

image

When the operation is complete, look at the user in Domino directory, it is a bit different.
Note that the Forwarding address now is configured, the Mail system is configured to Other Internet Mail and Domain value is empty.

image

Migrating data

Since the mail routing is completed and all new mail will route directly to the Exchange mailbox, it’s time to migrate the data.

In Office 365 it’s not that easy to retrieve the mailbox statistics, Thomas Ashworth released a great script that retrieves the mailbox statistics. It can be found here: http://blogs.technet.com/b/thomas_ashworth/archive/2012/04/11/get-an-office-365-user-statistics-report.aspx

Verify the item count and mail data size by using the PowerShell command:

.\GetMsolUserReport.ps1

The picture below shows the output (CSV) from the script above, there are now 18 items and the mailbox holds 220 kb.

image

Go to “User Collections – Migrate User Data”, select the migration batch and press “Migrate…”

image

Select “Migrate mailbox data”, press “Next”.

image

In this scenario, I didn’t use the notification options. However, these can be helpful for letting users know that they are migrated and should start to use Outlook instead of Notes. Press “Next”.

image

Select data types you wish to migrate, I decide to not migrate Trash and the Archive. Everything else will get migrated. Press “Next”.

image

Select the preferred conversion method for DocLinks. For this example, I used “Notes .NDL attachment (requires Notes client to use after migration)”. Press “Next”.

image

Select “Through Domino server(s)”, press “Next”.

image

Select “Server-based mailbox”, press “Next”.

image

In my scenario I want to migrate everything, but the filtering options can be very useful in projects that might require to just migrate the last year’s contents and not attachments that are over 10 MB.

When you have select the appropriate settings, press “Next”.

image

When migrating mailbox data, I commonly run it with 8-12 threads (simultaneous processes).

You will need to determine the setting that is best in your environment. This is normally done before or during the pilot phase of the project to ensure the most optimal configuration is ready for production migrations.

In this scenario, I am migrating a single mailbox so I leave it with 1 thread. Press “Next”.

image

A summary is shown, press “Next”.

image

I want to start the migration now. However, if that’s not the case, you have the opportunity to schedule it here.

Press “Next”.

image

The operation starts…

image

…during the operation…

image

…operation completed. Press “Exit”.

image

For this example, the migration throughput rates are low because we migrated a single mailbox with a small data sample. As you scale your migrations to include additional mailboxes and threads, much higher throughput rates will be achieved. This was done in a lab environment using slow disks and small amount of memory.

When the migration is complete, it’s a good recommendation to compare item counts and mailbox size, but you will need to account for data compression differences between Domino and Exchange.

I’ve seen differences between 20-35% depending on the circumstances. This means a Notes mail file of 1 GB may be 1,35 GB in Exchange. However, this is just a rule of thumb and needs to be estimated with actual data from each project since every customer is unique.

Verify the item count and mail data size by using the same PowerShell script and command like before starting the migration:

.\GetMsolUserReport.ps1

The picture below shows that there are now 62 items and the mailbox holds 850 kb.

image

Alternatively, the Mailbox Comparison Report available in MessageStats can be used compare the source and target data.

Notes from the field

Quotes from the Dell Software User Guide PDF to think about when migrating to Office 365.

Using Microsoft Online Services Directory Synchronization: Mark

this checkbox if you will use the Microsoft DirSync tool to copy the

contents of a local Active Directory to provision your Office 365

directory. Leave this checkbox unmarked if you will provision Office 365

by any other method.

Resolve attendees for [type] mail (two checkboxes, available only

for Office 365 target): Control whether NME will look up SMTP addresses in the Exchange GAL for users referenced in server data and/or archives to link to the Active Directory objects. These options are both enabled by default, but either or both can be disabled

by unmarking the checkbox(es). For example, you should unmark a

checkbox to migrate data to PST files without connecting to the

Exchange server. Disabling the Resolve attendees function may increase

migration speed in some environments, but may cause lost free/busy

information and may introduce other issues in Outlook.

Office 365 throttling recommendations – Dell Software recommendations can be found at:

https://support.quest.com/SolutionDetail.aspx?id=SOL107856&pr=Notes Migrator for Exchange

https://support.quest.com/SolutionDetail.aspx?id=SOL104973&pr=Notes Migrator for Exchange

Domino SMTP routing – This can be difficult to understand if you haven’t been working with Domino or been involved in any migration projects before. I did post an article about coexistence that goes through the configuration steps, read it here: http://www.testlabs.se/blog/?p=1042

Proxy server – One thing that can be a potential issue during migrations is proxy servers. I recommend avoiding them as much as possible. If you can avoid them you will most likely save yourself some issues that might occur if a proxy server is used. These tend to block or throttle traffic, the impact can be either that the migration throughput will be very low or that it will prohibit the traffic from reaching its destination.

Creating batches/collections – If you are involved in larger migration projects, you likely won’t want to find each user manually. As an alternative, you can search by a Domino Directory value that is unique to each migration batch.

Another method for adding users to the batch is using TSV files. If you choose this approach, Excel will become your best friend.

Precopy/Delta migration consideration – In cases where it’s possible, I recommend starting the migration right away after the pilot has been approved. This means that the mailbox data can be migrated over/synchronized before the actual migration must take place. By pre-staging data, the mailbox switch/routing can be done fast and finally the mailbox delta data (differences) can be migrated. This can minimize the “migration time”. By this, I mean the time that the end-users are impacted in some way or another.

One thing to keep in mind if using this method is that as soon as a mailbox is created in Exchange, the Free/Busy requests from other Exchange users sent to this newly created user won’t be sent back to Domino (where the most current data remains and action should take place).

I have requested a feature from Microsoft that would make the “forwarding” of Free/Busy requests possible, but haven’t heard anything back from them yet. It would be great if that could be solved, probably easily by using targetAddress attribute together with a new attribute, for ex. forwardfbreq set to either 0 (default) or 1.

Read the other parts

Part 1: Migrations – Overview
Part 2: Prerequisites for Domino/Notes migrations
Part 3: Migrating Domino/Notes to Exchange 2013 On-premise
Part 5: Migrating Groups and Resources Mailboxes
Part 6: Prerequisites for Coexistence between Domino and Exchange 2013/Office 365
Part 7: Configuring Coexistence Manager for Notes with Exchange 2013 On-premise
Part 8: Configuring Coexistence Manager for Notes with Office 365
Part 9: Prerequisites for Migration Manager
Part 10: Migrating User Mailboxes from Exchange 2003 to Exchange 2013 using Migration Manager
Part 11: Migrating User Mailboxes from Exchange On-premise to Office 365

Feel free to comment the post, I hope you liked the information. If you find something that might be incorrect or you have other experiences, leave a comment so it can be updated.

Part 3: Migrating Domino/Notes to Exchange 2013 On-premise

Part 3: Migrating Domino/Notes to Exchange 2013 On-premise

Published: 2013-06-21
Updated: –
Version: 1.0

This post will focus on migrating Domino/Notes to Exchange 2013 On-premise.

Before going into any details, if you are planning to do a migration from Domino and want to use Dell Software’s Notes Migrator for Exchange, it is important to mention that there is a requirement from the vendor to use certified people for the project.

This blog post is based on Notes Migration for Exchange version 4.7.0.82.

If you would like to read the other parts see the section “See the other parts”

Installation Notes Migrator for Exchange (NME)

The installation is a regular next/next/finish installation. During the first startup it will ask for a license file, so provide an appropriate license and the application will start.

The installation and configuration instructions can be found at:
http://www.testlabs.se/blog/?p=680

Creating batches/collections

Users are migrated based on batches (or collections), these batches are created from “User Collections – Manage” and by pressing “New collection…”

image

Give the collection a name and label (label is not required). Labels can be of great help if looking for a particular batch after creating many collections.

image

Choosing which users that should reside in the batch can be done either by finding them in the directory (i.e. NME database) or by importing them from a TSV file. In this example, I chose find them from the directory because I only select one user. In other cases the TSV import can be useful.

image

As demonstrated below, I search for a user with a Display Name that starts with Jonas. Type the desired characters in the value field, press “Add” button. You can add multiple criteria to the search filter if desired and press “Find now” when ready.

image

The results will be shown in the search result section. Select the desired user(s) and press “OK”. The user is then added into the batch.

image

Migration finalization / switch / routing

When migration batches/collections have been created we are ready to start the migration.

It is basically done by switching the mailbox and migrating the contents.
NME will configure the Domino person document with appropriate forwarding settings to ensure Domino can route email to Exchange for this specified forwarding domain.

See section Notes from the field for how to configure Domino mail routing.

Before any changes are made, the mailbox properties typically looks like the picture below.
It has an Internet Address (same as email addresses in Exchange i.e. SMTP).

image

Go to “User Collections – Migrate User Data”, select the migration batch by pressing the arrow and choosing the correct batch. When selected, press “Migrate…”

image

Select “Manage mail routing” and press “Next”.

image

Select “Exchange” and “Quest Coexistence Manager for Notes” with “Using ActiveMail processing”.
This for configuring the Domino mailbox with a forwarding address.

image

Calendar domain: Exchange” (this is used during Freebusy coexistence, discussed in coexistence post)
”Set server running qcalcon: dominoserver/dominodomain” (specify the server that have Qcalcon installed)
”Specify your Domino domain: dominodomain” (specify your Domino domain)

Check “Set mail forwarding address”
”Forwarding mail domain: exchange.testlabs.se” (Domino need to route mails to this SMTP domain)
Check ”Append Domino domain to forwarding address”
”Overwrite existing mail forwarding address: Always

Then press “Next”.

image

If Exchange mailboxes have forwarding/targetAddresses configured, these can be removed by using this option. In my case I don’t have these configured, so I will let them be unchecked. Press “Next”.

image

When switching (routing) mailboxes, with sufficient hardware, I typically run this operation with at least 20 threads (simultaneous processes). However, in this scenario it is being performed on a single mailbox, so I left it with 1 thread. Press “Next”.

image

A summary is shown, press “Next”.

image

The operation can be scheduled but, in my case, I want to run it now. Press “Next”.

image

The operation starts…

image

…and it was completed. Press “Exit”.

image

When the operation is complete, look at the user in Domino directory, it is a bit different.
Note that the Forwarding address now is configured, the Mail system is configured to Other Internet Mail and Domain value is empty.

image

Migrating data

Since the mail routing is completed and all new mail will route directly to the Exchange mailbox, it’s time to migrate the data.

Before the migration was started, the mailbox only had 4 items and a total of 254 kb, shown in the picture below. Using PowerShell command:

Get-MailboxStatistics jonand | ft displayname,itemcount,totalitemsize –Autosize

image

Go to “User Collections – Migrate User Data”, select the migration batch and press “Migrate…”

image

Select “Migrate mailbox data”, press “Next”.

image

In this scenario, I didn’t use the notification options. However, these can be helpful for letting users know that they are migrated and should start to use Outlook instead of Notes. Press “Next”.

image

Select data types you wish to migrate, I decide to not migrate Trash and the Archive. Everything else will get migrated. Press “Next”.

image

Select the preferred conversion method for DocLinks. For this example, I used “Notes .NDL attachment (requires Notes client to use after migration)”. Press “Next”.

image

Select “Through Domino server(s)”, press “Next”.

image

Select “Server-based mailbox”, press “Next”.

image

In my scenario I want to migrate everything, but the filtering options can be very useful in projects that might require to just migrate the last year’s contents and not attachments that are over 10 MB.

When you have select the appropriate settings, press “Next”.

image

When migrating mailbox data, I commonly run it with 8-12 threads (simultaneous processes).

You will need to determine the setting that is best in your environment. This is normally done before or during the pilot phase of the project to ensure the most optimal configuration is ready for production migrations.

In this scenario, I am migrating a single mailbox so I leave it with 1 thread. Press “Next”.

image

A summary is shown, press “Next”.

image

I want to start the migration now. However, if that’s not the case, you have the opportunity to schedule it here.

Press “Next”.

image

The operation starts…

image

…during the operation…

image

…operation completed. Press “Exit”.

image

For this example, the migration throughput rates are low because we migrated a single mailbox with a small sampling of data. As you scale your migrations to include additional mailboxes and threads, much higher throughput rates will be achieved. This was done in a lab environment using slow disks and small amount of memory.

When the migration is completed, it’s a good recommendation to compare item counts and mailbox size, but you will need to account for data compression differences between Domino and Exchange.

I’ve seen differences between 20-35% depending on the circumstances. This means a Notes mail file of 1 GB may be 1,35 GB in Exchange. However, this is just a rule of thumb and needs to be estimated with actual data from each project since every customer is unique.

Verify the item count and mail data size by using the same PowerShell command:

Get-MailboxStatistics jonand | ft displayname,itemcount,totalitemsize –Autosize

The picture below shows that there are now 51 items and the mailbox holds 886 kb.

image

Notes from the field

Domino SMTP routing – This can be difficult to understand if you haven’t been working with Domino or been involved in any migration projects before. I did post an article about coexistence that goes through the configuration steps, read it here: http://www.testlabs.se/blog/?p=1042

Proxy server – One thing that can be a potential issue during migrations is proxy servers. I recommend avoiding them as much as possible. If you can avoid them you will most likely save yourself some issues that might occur if a proxy server is used. These tend to block or throttle traffic, the impact can be either that the migration throughput will be very low or that it will prohibit the traffic from reaching its destination.

Creating batches/collections – If you are involved in larger migration projects, you likely won’t want to find each user manually. As an alternative, you can search by a Domino Directory value that is unique to each migration batch.

Another method for adding users to the batch is using TSV files. If you choose this approach, Excel will become your best friend.

Precopy/Delta migration consideration – In cases where it’s possible, I recommend starting the migration right away after the pilot has been approved. This means that the mailbox data can be migrated over/synchronized before the actual migration must take place. By pre-staging data, the mailbox switch/routing can be done fast and finally the mailbox delta data (differences) can be migrated. This can minimize the “migration time”. By this, I mean the time that the end-users are impacted in some way or another.

One thing to keep in mind if using this method is that as soon as a mailbox is created in Exchange, the Free/Busy requests from other Exchange users sent to this newly created user won’t be sent back to Domino (where the most current data remains and action should take place).

I have requested a feature from Microsoft that would make the “forwarding” of Free/Busy requests possible, but haven’t heard anything back from them yet. It would be great if that could be solved, probably easily by using targetAddress attribute together with a new attribute, for ex. forwardfbreq set to either 0 (default) or 1.

Read the other parts

Part 1: Migrations – Overview
Part 2: Prerequisites for Domino/Notes migrations
Part 4: Migrating Domino/Notes to Office 365
Part 5: Migrating Resources Mailboxes, Mail-In databases and Groups
Part 6: Prerequisites for Coexistence between Domino and Exchange 2013/Office 365
Part 7: Configuring Quest Coexistence Manager for Notes with Exchange 2013 On-premise
Part 8: Configuring Quest Coexistence Manager for Notes with Office 365
Part 9: Prerequisites for Quest Migration Manager
Part 10: Migrating User Mailboxes from Exchange 2003 to Exchange 2013 using Migration Manager
Part 11: Migrating User Mailboxes from Exchange On-premise to Office 365

Feel free to comment the post, I hope you liked the information. If you find something that might be incorrect or you have other experiences, leave a comment so it can be updated.

Load More