Jump to content


Andersson

Established Members
  • Posts

    106
  • Joined

  • Last visited

  • Days Won

    7

Posts posted by Andersson

  1. 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_thumb.png

     

    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_thumb.png

     

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

    image_thumb1.png

     

    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_thumb3.png

     

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

    image_thumb2.png

     

    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_thumb4.png

     

    I’m using the default settings for Network settings.

    image_thumb5.png

     

    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_thumb6.png

     

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

    image_thumb7.png

     

    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_thumb8.png

     

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

    image_thumb9.png

     

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

    image_thumb10.png

     

    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_thumb11.png

     

    Default settings in Notification messages.

    image_thumb12.png

     

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

    image_thumb13.png

     

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

    image_thumb14.png

     

     

    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_thumb48.png

     

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

    image_thumb49.png

     

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

    image_thumb50.png

     

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

    image_thumb51.png

     

    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_thumb52.png

     

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

     

     

    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_thumb3.png

     

    No connector order is selected.

    image_thumb55.png

     

    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_thumb56.png

     

    Press “Finish” to close the final window.

    image_thumb57.png

     

     

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

    image_thumb58.png

     

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

    image_thumb59.png

     

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

    image_thumb60.png

     

    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_thumb61.png

     

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

    image_thumb62.png

     

    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_thumb4.png

     

    No connector order is selected.

    image_thumb64.png

     

    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_thumb65.png

     

    Press “Finish” to close the final window.

    image_thumb66.png

     

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

    image_thumb67.png

     

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

    image_thumb68.png

     

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

    image_thumb69.png

     

    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_thumb70.png

     

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

    image_thumb71.png

     

    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_thumb5.png

     

    No connector order is selected.

    image_thumb73.png

     

    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_thumb74.png

     

    Press “Finish” to close the final window.

    image_thumb75.png

     

     

    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_thumb76.png

     

    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_thumb77.png

     

    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_thumb6.png

     

    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_thumb7.png

     

    $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_thumb8.png

     

    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_thumb9.png

     

    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_thumb11.png

     

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

    image_thumb12.png

     

    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_thumb16.png

     

    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_thumb13.png

     

    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_thumb14.png

     

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

    image_thumb15.png

     

    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_thumb17.png

     

    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/2011/01/03/coexistence-between-domino-and-exchange-2010-%e2%80%93-part-1-of-2/

    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.

  2. 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_thumb.png

     

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

    image_thumb46.png

     

    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_thumb3.png

     

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

    image_thumb47.png

     

    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_thumb4.png

     

    I’m using the default settings for Network settings.

    image_thumb5.png

     

    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_thumb6.png

     

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

    image_thumb7.png

     

    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_thumb8.png

     

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

    image_thumb9.png

     

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

    image_thumb10.png

     

    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_thumb11.png

     

    Default settings in Notification messages.

    image_thumb12.png

     

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

    image_thumb13.png

     

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

    image_thumb14.png

     

    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_thumb48.png

     

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

    image_thumb49.png

     

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

    image_thumb50.png

     

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

    image_thumb51.png

     

    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_thumb52.png

     

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

    image_thumb53.png

     

    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_thumb54.png

     

    No connector order is selected.

    image_thumb55.png

     

    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_thumb56.png

     

    Press “Finish” to close the final window.

    image_thumb57.png

     

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

    image_thumb58.png

     

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

    image_thumb59.png

     

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

    image_thumb60.png

     

    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_thumb61.png

     

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

    image_thumb62.png

     

    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_thumb63.png

     

    No connector order is selected.

    image_thumb64.png

     

    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_thumb65.png

     

    Press “Finish” to close the final window.

    image_thumb66.png

     

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

    image_thumb67.png

     

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

    image_thumb68.png

     

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

    image_thumb69.png

     

    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_thumb70.png

     

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

    image_thumb71.png

     

    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_thumb72.png

     

    No connector order is selected.

    image_thumb73.png

     

    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_thumb74.png

     

    Press “Finish” to close the final window.

    image_thumb75.png

     

     

    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_thumb76.png

     

    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_thumb77.png

     

    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_thumb15.png

     

    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_thumb16.png

     

    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_thumb17.png

     

    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_thumb78.png

     

    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_thumb88.png

     

    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_thumb89.png

     

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

    image_thumb92.png

     

    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_thumb82.png

     

    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_thumb83.png

     

    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_thumb93.png

     

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

    image_thumb94.png

     

    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_thumb87.png

     

    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/2011/01/03/coexistence-between-domino-and-exchange-2010-%e2%80%93-part-1-of-2/

     

    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.

  3. Just wrote a basic script for importing PST files into mailboxes, that I want to share with the community.

    It is designed to check for PST files in the specified folder. Based on the filenames (of the PST files) it then verifies that a mailbox can be found. This is done by using the filename and adding the @ character and the domain value into a string value. If there is a match, it returns a value of $True and the script continues with running the New-MailboxImportRequest cmdlet.

     

    The script is written just as basic as it can, it provides much information about values and what’s going on.
    The most recent updated script can be downloaded here

     

    I hope this will help you to import the PST files into the mailboxes

    Ps. Sorry for the word-wrap, see the script file instead of copy the script code below

     

    Changelog
    v1.1
    – Updated the $name variable due to issues with filenames got trimmed away. Also added so that if errors exists, they will be sent to a errorlog. Thanks to Chris Steding!

    # +=======================================================================
    # | Blog: http://www.testlabs.se/blog
    # | Twitter: @jonand82
    # | =============================================
    # | Filename: Import-PST v1.1.ps1
    # |
    # | CREATED BY: Jonas Andersson
    # | FUNCTION: Imports PST files into mailboxes, matching on emailaddresses
    # |
    # | CHANGE LOG: 
    # | v1.0 - 2013-09-18, *Created*
    # | v1.1 - 2013-09-22, *Update of $name variable*
    # |
    # |    Required permissions (RBAC) Role: “Mailbox Import Export”, example: New-Managementroleassignment –Role “Mailbox Import Export” –User “Administrator”
    # +=======================================================================
    
    # Load snapin
    Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 -ErrorAction 'SilentlyContinue'
    
    # Variables
    $error.clear()
    $errorlog = "C:\temp\errorlog.txt"
    $pstpath = "C:\temp"
    $domain = "testlabs.se"
    $servername = "tlex01"
    $files = Get-ChildItem -Path $pstpath -Filter *.pst
    
    Write-Host $files
    
    if (($files -ne $null) -or ($files -eq "")) {
    
        foreach ($i in $files) {
    
            $name = $i.BaseName
            $id = $name + "@" + $domain
            $filename = $i.FullName
            $filename = $filename.Replace(":","$")
            $uncfilepath = "\\" + $servername + "\" + $filename
    
            Write-Host "#################################################################"
            Write-Host "Filename:" $i -ForegroundColor 'Cyan'
            Write-Host "UNC path:" $uncfilepath -ForegroundColor 'DarkCyan'
            Write-Host "Emailaddress:" $id -ForegroundColor 'DarkGreen'
    
            $MailboxExists = [bool](Get-Mailbox -Identity $id -ErrorAction SilentlyContinue)
    
            if ($MailboxExists -eq $false)
            {
                Write-Host "Found mailbox:" $MailboxExists -ForegroundColor 'Red'
                Write-Host "Make sure to match filename to mailaddress, without @domain" -ForegroundColor 'Red'
    
            }
    
            if ($MailboxExists -eq $true)
            {
                Write-Host "Found mailbox:" $MailboxExists -ForegroundColor 'Green'
                Write-Host "Importing $uncfilepath into mailbox: $id" -ForegroundColor 'White'
    
                New-MailboxImportRequest -Mailbox $id -FilePath $uncfilepath
    
            }
    
            Write-Host ""
        }
    
    }
    
    else
    {
        Write-Host "No PST files found"
    }
    
    if ($error -ne $null)
    {
        $error | Out-File -FilePath $errorlog -Append
        Write-Host "See $errorlog for errors" -ForegroundColor 'Red'
    }
    
  4. Published: 2013-10-08 (at testlabs.se/blog)
    Updated: -
    Version: 1.0

     

    This post will focus on having the technical prerequisites ready and in place for a successful Domino/Notes coexistence deployment.

    Before going into any details, if you are planning to do have a coexistence scenario between Domino and Exchange, you may consider to use Dell Software’s Coexistence Manager for Notes.

    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.0.29

     

    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 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

     

    Service Accounts

    Some service accounts are needed when using the coexistence software, as outlined below.

     

    Mail connector

    No specific account with permissions is required.

     

    Free/Busy

    For looking up the free/busy information, we need read access on both sides. One regular Exchange mailbox/Office 365 mailbox and one regular Domino mailbox.

    One thing to keep in mind when established coexistence between on-premise Domino and Office 365 is that an additional namespace needs to be introduced for having the requests to use Autodiscover and find the route back. If that for any reason can’t be implemented a hybrid solution is the only possible way of solving it. More info about this in the upcoming post.

     

    Directory connector

    The service account used for directory sync should be a member of the Domain Admin and Organization Management groups to provide the rights to Active Directory (or delegated write permissions to the specified OU).
    On the Domino side, a regular account can be used with read permissions through LDAP to the different address books that should be synced. Write permissions is only required if synchronization should take place from AD to Domino. Note that the Internet password needs to be configured for this account.

    One thing to keep in mind is that synchronizing the Domino objects directly to Office 365 is not supported. However, this can be done in a two-step procedure by directory synchronizing them from Domino into the local Active Directory and then use the Microsoft Office 365 dirsync tool for having them in Office 365.

     

    Note: Target Active Directory server must have the Exchange schema extensions for being able to create mail contacts.

     

    Availability Address Space

    One thing that’s required for free/busy lookups is that the availability address space is configured. This is done either in the on-premise Exchange or Office 365.

    The cmdlet for doing it on-premise:

    Add-AvailabilityAddressSpace -ForestName <smtpdomain>
    -AccessMethod OrgWideFB

     

    For doing this in Office 365, run the following cmdlet:

    New-AvailabilityConfig –OrgWideAccount questmsn
    $domain = "<YourHostDomain>.onmicrosoft.com"
    $adminUserId = "<YourID>"
    $adminCredsId = "<YourUserName>"
    $adminCredsPassword = "<YourPassword>"
    $securePassword = ConvertTo-SecureString
    $adminCredsPassword -AsPlainText -Force
    $adminCreds = New-Object
    System.Management.Automation.PSCredential($adminCredsId,$securePassword)
    Add-AvailabilityAddressSpace -AccessMethod OrgWideFB -ForestName
    <YourDomain.com> -Credentials $adminCreds -TargetAutodiscoverEpr
    'https://autodiscover.<YourDomain.com>/autodiscover/autodiscover.xml'

     

    Office 365

    If CMN is using in an on-premise deployment, I would recommend or at least consider using internal PKI for the certificate, since the certificate chain can easily be deployed using Group Policy’s.

    But in the case of having coexistence between on-premise Domino and Office 365, the freebusy requests to the CMN server(s) will come from an external part (Office 365) and they don’t trust your internal PKI solution, so it’s a requirement of buying a certificate from a trusted root vendor.

     

    SQL Server

    With version 3.5.x of Coexistence Manager for Notes (CMN), now uses SQL Server for its configuration and collected data.

    The Native Client needs to be installed together with SQL Server 2005 or SQL Express 2005, or newer.

     

    In my lab environment, I’m running SQL 2008 R2 Express on my Coexistence server. In larger environments, the databases can be placed onto a SQL cluster/server instead of having them locally. If you, however, choose to use SQL Express, make sure to take backups of the databases.

     

    Lotus Notes client

    If you are going to use the ActiveMail feature, I recommend using the Lotus Notes version 8.0.0 (Basic version, Eclipse is not supported). However, Lotus Notes version 7.0.3 and 7.0.4 can also be used if you don’t have the 8.0.0.

    The installation of Lotus Notes should be done in single-user mode.

     

    .NET Framework 4

    Make sure to install the .NET Framework 4 since this is a prerequisite for CMN. I would also recommend upgrading it with the latest service pack level.

    Internet Information Services (IIS)

    Install IIS together with the ASP.NET 4.0 feature and use a certificate with a matching “CN” name for the Quest Autodiscover Host Name value.

    This certificate is used when clients sends its requests between the systems.

     

    Antivirus

    There are NO known folders that should be excluded from the Antivirus file-level scanning

     

    Regional Settings

    For being able to install the software, be aware that regional settings and language settings need to be configured to “English”.

     

    Windows Firewall

    It’s recommended to turn OFF the Windows Firewall for all CMN servers. If that’s not possible, make sure to open all the needed ports. The port list can be found below.

     

    User Account Control (UAC)

    It’s recommended to disable UAC on all CMN servers.

    This is done in the Control Panel under User Accounts, Change User Account Control settings.

    Make sure to set it to “Never notify” and restart the sever before installing the software.

     

    Data Execution Prevention (DEP)

    It’s recommended to disable DEP, so make sure to do that.

    If you’re using Windows 2008 R2 like I do, then you disable DEP by running:

    "bcdedit /set nx AlwaysOff"

    Also, make sure to restart the server when this is done to allow it to take effect.

     

    Network Ports

    Port

    In/Out

    Type

    Source

    Target

    Description

    25

    In

    SMTP

    Domino/Exchange

    CMN Server(s)

    Incoming SMTP

    25

    Out

    SMTP

    CMN (SMTPl)

    Domino/Exchange

    Outgoing SMTP

    389

    Out

    LDAP

    CMN (Dirsync)

    Active Directory DCDomino LDAP Server

    LDAP

    3268

    Out

    LDAP GC

    CMN (Dirsync)

    Active Directory DC

    LDAP GC

    636

    Out

    LDAPS

    CMN (Dirsync)

    Active Directory DC LDAPS

    LDAPS

    3269

    Out

    LDAPS

    CMN (Dirsync)

    Active Directory DC LDAPS

    LDAPS GC

    80

    Out

    HTTP

    CMN (Freebusy)

    Exchange CAS servers

    HTTP

    443

    Out

    HTTPS

    CMN (Freebusy)

    Exchange CAS servers

    HTTPS

    80

    In

    HTTP

    Exchange CAS servers, Office 365

    CMN (Freebusy)

    HTTP

    443

    In

    HTTPS

    Exchange CAS servers, Office 365

    CMN (Freebusy)

    HTTPS

    8900

    Out

    Availability Service

    Domino Qcalcon server

    Exchange CAS servers

    Availability

    8960

    In

    Qcalcon

    Domino Qcalcon server

    CMN (Freebusy)

    Qcalcon

    8961

    In

    Qcalcon

    Domino Qcalcon server

    CMN (Freebusy)

    Qcalcon

    1352

    Out

    Domino

    CMN (Freebusy, Dirsync)

    All Domino servers

    Freebusy lookup

    8962

    Out

    PF Reader

    CMN (Freebusy)

    Exchange

    PF Exchange reader service

    1433

    In

    SQL

    CMN servers

    CMN SQL instance

    SQL

     

     

    Notes from the field

    Network 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.

     

    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.

     

    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 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

  5. Published: 2013-08-07 (at testlabs.se/blog)
    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/2010/11/19/lotus-domino-exchange-2010-in-lab-part-2/

     

    Creating batches/collections

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

    image_thumb17.png

     

    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_thumb.png

     

    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_thumb.png

     

    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_thumb2.png

     

    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_thumb1.png

     

    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_thumb2.png

     

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

    image_thumb15.png

     

    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_thumb16.png

     

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

    image_thumb18.png

     

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

    image_thumb.png

     

    Room102 – No restrictions

    image_thumb24.png

     

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

    image_thumb1.png

     

    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_thumb32.png

     

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

    image_thumb33.png

     

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

    image_thumb34.png

     

    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_thumb45.png

     

    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_thumb36.png

     

    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_thumb37.png

     

    A summary is shown, press “Next”.

    image_thumb38.png

     

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

    image_thumb39.png

     

    The operation starts…

    image_thumb27.png

     

    …and it was completed. Press “Exit”.

    image_thumb28.png

     

    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_thumb5.png

     

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

    image_thumb6.png

     

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

    image_thumb6.png

     

    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_thumb7.png

     

    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_thumb8.png

     

    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_thumb9.png

     

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

    image_thumb10.png

     

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

    image_thumb11.png

     

    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_thumb12.png

     

    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_thumb13.png

     

    A summary is shown, press “Next”.

    image_thumb14.png

     

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

    Press “Next”.

    image_thumb15.png

     

    The operation starts…

    image_thumb7.png

     

    …during the operation…

    image_thumb8.png

     

    …operation completed. Press “Exit”.

    image_thumb9.png

     

    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_thumb29.png

     

    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_thumb30.png

    image_thumb31.png

     

    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_thumb32.png

    image_thumb33.png

     

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

    image_thumb34.png

     

    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_thumb35.png

    image_thumb40.png

     

    A summary is shown, press Next.

    image_thumb37.png

     

    I want to run the task Now, press Next.

    image_thumb38.png

     

    The result is shown. Press Exit.

    image_thumb39.png

     

    Groups were created successfully in the correct OU.

    image_thumb41.png

     

    Verify the members are correct. Looks fine…

    image_thumb42.png

    image_thumb44.png

     

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

    image_thumb43.png

    image_thumb45.png

     

    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.

     

    image11.png

     

    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/2011/01/03/coexistence-between-domino-and-exchange-2010-%e2%80%93-part-1-of-2/

     

    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.

  6. Published: 2013-07-03 (at testlabs.se/blog)
    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/2010/11/19/lotus-domino-exchange-2010-in-lab-part-2/

     

    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_thumb.png

     

    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_thumb1.png

     

    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_thumb2.png

     

    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_thumb3.png

     

    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_thumb46.png

     

    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_thumb31.png

     

    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_thumb47.png

     

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

    image_thumb33.png

     

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

    image_thumb34.png

     

    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_thumb48.png

     

    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_thumb36.png

     

    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_thumb37.png

     

    A summary is shown, press “Next”.

    image_thumb38.png

     

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

    image_thumb39.png

     

    The operation starts…

    image_thumb40.png

     

    …and it was completed. Press “Exit”.

    image_thumb41.png

     

    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_thumb49.png

     

    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_thumb53.png

     

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

    image_thumb5.png

     

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

    image_thumb6.png

     

    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_thumb7.png

     

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

    image_thumb8.png

     

    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_thumb9.png

     

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

    image_thumb10.png

     

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

    image_thumb11.png

     

    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_thumb12.png

     

    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_thumb13.png

     

    A summary is shown, press “Next”.

    image_thumb14.png

     

    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_thumb15.png

     

    The operation starts…

    image_thumb50.png

     

    …during the operation…

    image_thumb51.png

     

    …operation completed. Press “Exit”.

    image_thumb52.png

     

    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_thumb54.png

     

    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/2011/01/03/coexistence-between-domino-and-exchange-2010-%e2%80%93-part-1-of-2/

     

    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.

  7. Published: 2013-06-21 (at testlabs.se/blog)
    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/2010/11/19/lotus-domino-exchange-2010-in-lab-part-2/

     

    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_thumb.png

     

    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_thumb1.png

     

    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_thumb2.png

     

    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_thumb3.png

     

    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_thumb4.png

     

    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_thumb31.png

     

    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_thumb32.png

     

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

    image_thumb33.png

     

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

    image_thumb34.png

     

    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_thumb45.png

     

    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_thumb36.png

     

    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_thumb37.png

     

    A summary is shown, press “Next”.

    image_thumb38.png

     

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

    image_thumb39.png

     

    The operation starts…

    image_thumb40.png

     

    …and it was completed. Press “Exit”.

    image_thumb41.png

     

    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_thumb42.png

     

    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_thumb43.png

     

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

    image_thumb5.png

     

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

    image_thumb6.png

     

    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_thumb7.png

     

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

    image_thumb8.png

     

    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_thumb9.png

     

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

    image_thumb10.png

     

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

    image_thumb11.png

     

    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_thumb12.png

     

    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_thumb13.png

     

    A summary is shown, press “Next”.

    image_thumb14.png

     

    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_thumb15.png

     

    The operation starts…

    image_thumb16.png

     

    …during the operation…

    image_thumb17.png

     

    …operation completed. Press “Exit”.

    image_thumb18.png

     

    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_thumb44.png

     

    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/2011/01/03/coexistence-between-domino-and-exchange-2010-%e2%80%93-part-1-of-2/

     

    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.

  8. Published: 2013-06-06 (at www.testlabs.se/blog)
    Updated: -
    Version: 1.0

     

    This post will focus on having the technical prerequisites ready and in place for a successful Domino/Notes migration.

    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.

    If you would like to read the other parts:
    Part 1: Migrations – Overview

     

    Migration Accounts

    I recommend using three accounts, one with Domino permissions, one with Active Directory (AD) permissions and one with Exchange permissions.

     

    Domino

    The Domino account should be Manager for all .NSF files (database files), Editor on the NAB (names.nsf) and Reader on all users archive files.
    Username example: Quest Migrator/DominoDomain

     

    This is done by following the steps below:

    Create a new migration account in People & Groups, select the directory and People.
    On the right hand side, press People – Register. Fill in a proper name, I typically create an account called Quest Migrator as shown in the example below. Finally, press Register.

    image_thumb.png

     

    To configure the permissions on the NAB (directory), go to Files and select the directory (names.nsf), right click, choose Access Control and Manage. Add the account by browsing for it, give it the User type: Person and the Access: Editor. (see picture below)

    image_thumb1.png

     

    The final step is granting the Quest Migrator/dominodomain account Manager permissions on all NSF files that will be migrated. Go to Files and select the folder where the NSF files are located. Right click and choose Access Control and Manage. Add the account by browsing for it, give it the User type: Person and the Access: Manager. (see picture below)

    image_thumb2.png

     

    Active Directory

    For the AD account, it’s recommended to be a member of “Domain Admins”. However, this is not a requirement, because delegated permissions can be used. The important aspect is that the AD account have “Full Control” over the OUs where user objects are located. The AD account also needs to be a member of “View-Only Organization Management”. If using the provision feature within Notes Migrator for Exchange (NME), the AD account needs to have “Full Control” over the OU where the contact objects are located as well.

     

    This account also needs to have Remote PowerShell enabled, use the command:

    “Set-User ”SA-NME” –RemotePowerShellEnabled $True”

    Username example: Domain\SA-NME

     

    Migration User

    This user is not used for logging on interactively. The important aspect with this user is that it has the correct permissions on the Mailbox Databases. Configure the databases so that the account has Receive-As permissions, this can be done by using the command below:

    ”Get-Mailboxdatabase | Add-Adpermission -user “SA-MIG” -extendedrights Receive-As”

    Username example: Domain\SA-MIG

     

    Office 365 account

    Most permissions are done automatically by NME but you must manually set account impersonation. This is done by using the command below:

    New-ManagementRoleAssignment -Role "ApplicationImpersonation" –User SA-MIG

    More information about the migration performance and throttling can be found by reading the provided link in the end of this post.

     

    Throttling Policies and Windows Remote Management

    Another thing to keep in mind is the configuration of the Throttling Policies and the Windows Remote Management.

    If you are migrating to Exchange 2010, make sure to configure the Throttling Policy according to the configuration below.

    “New-ThrottlingPolicy Migration”
    “Set-throttlingpolicy Migration -RCAMaxConcurrency $null -RCAPercentTimeInAD $null `
    -RCAPercentTimeInCAS $null -RCAPercentTimeInMailboxRPC $null”
    “Set-Mailbox “SA-MIG” -ThrottlingPolicy Migration”

    Also make sure to configure the Windows Remote Management with the following settings.

    “winrm set winrm/config/winrs '@{MaxShellsPerUser="150"}'
    “winrm set winrm/config/winrs '@{MaxConcurrentUsers="100"}'
    “winrm set winrm/config/winrs '@{MaxProcessesPerShell="150"}'
    “winrm set winrm/config/winrs '@{AllowRemoteShellAccess="true"}'
    “set-executionpolicy unrestricted”

     

    If you are migrating to Exchange 2013, the throttling policies have been changed. Create a new throttling policy and assign it to the migration mailbox “SA-MIG”.

    “New-ThrottlingPolicy Migration -RCAMaxConcurrency Unlimited -EWSMaxConcurrency Unlimited”
    ”Set-Mailbox “SA-MIG” -ThrottlingPolicy Migration”

     

    SQL Server

    Notes Migrator for Exchange leverages SQL for saving user information (and much more).

    The Native Client needs to be installed together with SQL Server 2005 or SQL Express 2005, or newer.

    I do prefer running at least SQL 2008 R2 and I would recommend using the SQL Server instead of the Express version, since you have more flexibility of creating maintenance jobs for example.

     

    A little heads up if you are about to run a large migration, make sure to take full backups of the NME40DB so that you have a copy of it, if anything happens and also for having the logs truncated.

    In smaller migration projects the SQL Express version works fine, I would still recommend taking full backup of the database or dumping it to a .bak file and then backup the .bak file.

    Configure the account “Domain\SA-NME” as DBCreator, for allowing it to create the NME40DB during the setup of Notes Migrator for Exchange.

     

    Lotus Notes client

    I would recommend you to use the latest Lotus Notes client. In my last projects I’ve been using version 8.5.3 Basic or Normal client.

    An important thing to never forget is to install Lotus Notes in single user mode.

     

    .NET Framework 4

    Make sure to install the .NET Framework 4 since this is a prerequisite for NME. I would recommend upgrading it to the latest service pack level.

     

    Antivirus

    If Antivirus is installed, make sure all Quest folders and %temp% are excluded from any Antivirus scans. If not it may result in slower performance and potential disruption of migrated content. Most likely, there will be a mail gateway of some kind in the environment which takes care of the antispam. In those situations, antivirus and antispam are already addressed in the Domino environment.

     

    On the target side, Exchange probably has antivirus and antispam solution installed as a second layer protection to the Transport services.

    As a result, I have not encountered any problems when excluding a couple of folders for the migration from scanning process.

     

    Outlook

    Outlook 2007, 2010 and 2013 are all supported. I’ve been using Outlook 2010 in all my projects and it have been working very well.

    Configure Outlook with the “SA-MIG” account, since this is the account that will insert migrated content into the Exchange mailboxes using the Receive-As permission.

    I’ve been learned to create and configure a Outlook profile using the SA-MIG account. Make sure to configure it for not using the cached-mode.

    However, in theory, a profile should not need to be created in advance, because NME creates temporary profiles during the migration. However, this step shouldn’t hurt anything either.

     

    User Account Control (UAC)

    It’s recommended to disable UAC on all migration servers.

    This is done in the Control Panel under User Accounts, Change User Account Control settings.

    Make sure to set it to “Never notify” and then restart the sever.

     

    Data Execution Prevention (DEP)

    It’s highly recommended to disable DEP, so make sure to do that.

    If you’re using Windows 2008 R2 like I do, then you disable DEP by running:

    "bcdedit /set nx AlwaysOff"

    Also, make sure to restart the server when this is done to allow it to take effect.

     

    Local administrator

    If you choose to delegate the permissions instead of using the Domain Admin group for the SA-NME account, then it is required to add the SA-NME account into the local administrators group.

     

    Regional Settings

    During the migration, the folder names (Inbox, Inkorgen etc.) are created based on the regional settings on the migration console.

    So, for example, if you are migrating a UK/English mailbox, make sure to configure the regional settings to match this and for example, if migrating a Swedish mailbox, set it to match the Swedish locale settings.

    With this said, I would recommend migrating users using the same language at the same time. And then change the regional settings on the migration console and continue with another region.

     

    Office 365 Prerequisites

    Migrating to Office 365 is like a normal migration, besides the target is a cloud service which can be a bit special.

    There are two requirements that needs to be fulfilled on the migration servers before starting the migration to Office 365. Install the following (select the one that suits your operation system):

     

    MSOL Sign-in Assistant:

    32 bit

    64 bit

     

    MSOL Module for Windows PowerShell:

    32 bit

    64 bit

     

    The Admin Account Pooling Utility (AAPU) is used for getting better throughput performance. The AAPU tool provides a workaround by using different migration accounts for each migration thread, instead of having one migration account with a throttling limit, you could have ten migration accounts which would give 10 migration threads in total. You can have up to 10000 migration accounts (NME 4.7.0.82).

     

    If you are going to use the AAPU, you should add the parameter below into the NME Global Defaults or Task Parameters.

    [Exchange]

    O365UsageLocation=<xx>

    http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm

     

    For NME 4.7.0.82 the following text is stated in the release notes (always read them!):

    Office 365 Wave 15 Throttling: NME has been updated to better address the PowerShell Runspace throttling introduced in O365 Wave 15. In order to efficiently proceed with migrations to Wave 15, the tenant admin must submit a request through Microsoft to ease the PowerShell throttling restrictions. The tenant admin must open a service request with Microsoft and reference “Bemis Article: 2835021.” The Microsoft Product Group will need this information:

    • tenant domain (tenant.onmicrosoft.com)
    • version of Exchange (in this case, for Wave 15)
    • number of mailboxes to be migrated
    • number of concurrent admin accounts to be used for the migration
    • number of concurrent threads to be used
    • number of Runspaces to be created per minute*
    • proposed limit (powershellMaxTenantRunspaces, powershellMaxConcurrency, etc.), and the number to which to increase the limit*

    * For the last two items in this list, the tenant admin should take the total number of threads across all migration machines and add a buffer, because it is difficult to predict the timing of the Runspace initiation. It is best to assume that all potential Runspaces could be created within a minute, so the values for both items should probably both be submitted as the total number.

     

    More information about migration performance and throttling can be found by reading the provided link at the end of this post.

     

    Network Ports

     

     

    Port

    In/Out

    Type

    Source

    Target

    Description

    1352

    Out

    Domino

    Quest NME servers

    All Domino mail serversDomino Qcalcon server

    Domino/Notes client (migration)

    445

    Out

    NetBIOS/SMB

    Quest NME servers

    All Domino mail serversDomino Qcalcon serverQuest NME master server

    Microsoft-DS/NetBIOS traffic for Migration. For reaching SMB shares. Note: Not required, but recommended.

    389

    Out

    LDAP

    Quest NME servers

    Active Directory DC server(s)

    LDAP

    3268

    Out

    LDAP GC

    Quest NME servers

    Active Directory DC server(s)

    LDAP Global Catalog

    1025-65535

    Out

    High-ports

    Quest NME servers

    Active Directory DC server(s)Exchange server(s)

    High-ports(differs depending on version)

    1433

    Out

    Microsoft SQL

    Quest NME servers

    Quest NME master server

    For reaching SQL DB

    443

    Out

    HTTPS

    Quest NME servers

    Office 365

    Transferring migration content

     

     

    Notes from the field

    Network 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.

     

    Read through the release notes and the User Guide (PDF), it is included within the NME zip file. All information is collected into that document.

    Office 365 Migration Performance and throttling information

     

    Read the other parts

    Part 1: Migrations – Overview
    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 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 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/other experiences, leave a comment so it can be updated.

  9. This will be a collection of posts, regarding migrations in general in the first post will digging deeper in the following posts.

     

    Published: 2013-05-09 (on www.testlabs.se/blog)
    Updated: 2013-05-15
    Version: 1.1

     

    Thanks for the great input and feedback: Hakim Taoussi and Magnus Göransson

     

    Part 1: Overview

     

    I will try to keep the first post not technical since this is more common sense then anything else.
    In short I want to summarize some key takeaways and recommendation to stick with, explaining them a bit more in detail below.

    • Planning
    • Information & communication
    • Pilot migrations
    • End-user training
    • Experience
    • Minimize the coexistence time

     

    Planning

    Some of you might think that… well of course we are planning. But sometimes I hear people that spend like 10-15% of their total project time for planning. I would recommend you to rethink if that’s the case, and suggest that you maybe should spend at least 50% of the time for it, maybe even more (in large projects).

     

    What I mean with planning is to create a detailed migration plan, this should of course include estimations regarding how many users can be migrated per hour, how much data can be transferred per hour.

     

    Basically what this means is that the planning phase should be used for planning and verifying that everything is in place and works like it’s expected to do.

    For example, in the official guide from Quest Software when migrating from Domino to Exchange they calculate of 5GB/hour/migration server during good conditions.

     

    In the real world I’ve seen throughput of 20GB/h/server. With this said, it all depends… (the consultants favorite phrase) This is one of those things that needs to be tested and verified before creating a detailed migration plan, for doing a good estimation.

     

    Don’t forget to verify that the target environment have enough capacity, servers and storage.

    Other questions that needs clear answers can be;
    How is users and mailboxes provisioned?
    During the migration, where should new mailboxes be created?
    Is there information in the user attributes that needs to be migrated from Domino into AD?
    How will the migration process work?
    What requirements are there?

    So for the planning, think about all steps.

     

    Information & Communication

    With information I mean to inform everybody that’s involved in the project in one or another way.
    This would include the helpdesk and support, since these are the projects closest friends for helping and taking care of incidents.

    On the other hand we have the users themselves, here I’m talking about the end-users. If the migration will impact the users in a way they are not used to, remind to inform them a couple of weeks before they are going to be migrated, with a reminding notification a couple of days when the migration will take place.

     

    During a transition from for example, Exchange 2007 to Exchange 2010, there won’t be much impact on the users, it’s more a data transfer and updating a couple of attributes in the directory so the impact is very small. In those transition projects (it depends on the customer requirements) the needs for user reminders is not that big as the migration projects. But keep in mind, it’s better they get too much information than too little.

     

    In large projects it’s a recommendation to place the information on public places like the restroom and the lunch room. Also inform the people on every place that’s possible, intranet, mail, letter, meeting and so on.

    In short I want to say the obvious, if the information is lacking or poor, the experience from the end-user perspective will be poor. In the end this give the result of a failed project, at least from a user perspective.

     

    Pilot migrations

    From the projects I’ve been a part of I’ve learnt lots of things and gained experience. One of these things is to have a good pilot, I would recommend to divide the pilot into 3 parts.

     

    Part 1 is the “Technical Pilot”, this would include the closest project members and/or only technical people that can handle issues and problems when they occur.
    Part 2 is the “Pilot 1” and this would include at least 10 users, spread throughout the organization, the more spread they are the better value would the pilot have.
    Part 3 is called “Pilot 2”, this is started when the “Pilot 1” phase is completed and the evaluations are done. Maybe some tweaking needs to be done before starting this stage (if there were issues and errors).

     

    In “Pilot 2” should at least 50 people be included throughout the organization, this last Pilot phase is used for solving any issues that occurred in previous stages, this for minimizing the impact when the real migration phase will take place.

    The numbers above is just examples, but might be good examples for a environment with a couple of thousand users.

     

    Before starting with “Pilot 2” the whole migration process, how object get provisioned should be well documented. It would be a recommendation to have it documented even in the “Technical Pre-Pilot”, but my experience tells me that things are changing and somewhere during “Pilot 1” the processes are getting tested and documented.

    End-user training

    As this is mentioned, in some cases it might not be needed, for instance if the moved users still keeps the same Outlook client version and the impact is very low. As we all know things are changing over time with new versions and if the user used for example Outlook 2003 with Windows XP and will be upgraded to Windows 7 and Outlook 2013, there might be a reason for giving the users a training session and some documents with instructions on how things work in the new version.

     

    If the users are migrated for example from Domino/Notes to Exchange/Outlook I would strongly recommend having training sessions were the users can attend and also bringing instructions on how things differs between Notes and Outlook, and how Outlook should be used for booking a meeting, sending a mail etc.

    This for making sure that the users gets a good experience and can handle the new tools.

     

    Minimize the coexistence time

    I’m not writing this because of lack due to products out there or the functions of them.

    But I’m writing this bullet for having a smoother and easier understanding, mostly for the helpdesk and the end-users. During a coexistence (freebusy/mail flow/directory synchronization) time it can be hard to troubleshoot and isolate incidents and problems. Another good reason for minimizing the coexistence time is regarding all shared resources, by minimizing the coexistence time you will reduce the impact for the end-users.

     

    So for minimizing these hours spent on troubleshooting and the work effort everyone need to put in, I would recommend to keep the coexistence time as short as it can be, without impacting the experience or business in a bad way.

    In short I would say, if things are working. Keep up a good pace for having a short coexistence time!

     

    Experience

    Last but not least, I would recommend you to select careful what project members are selected or which company that runs these kind of projects. It’s very important that they have the full understanding of what needs to be done and what impact it has for everyone involved but also the business itself.

     

    If using Quest Software, they have a requirement of using certified people for designing, installing and configuring their products. This for making sure that the result will be good and that everyone should be satisfied with it. I’m not sure about other vendors but I think they have something similar to this model.

     

    Read more
    Part 2: Prerequisites for Domino/Notes migrations
    Part 3: Migrating Domino/Notes to Exchange 2013 On-premise
    Part 4: Migrating User Mailboxes from 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 Coexistence Manager for Notes with Exchange 2013 On-Prem
    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

    I hope these key takeaways gave you some good insight and some things to think about.
    I would be happy to hear your comments/feedback this post.

     

    The plan is to post a new article every second week, keep your eyes open

     

    Regards,
    Jonas

  10. I’ve updated a script that was intended for installing prerequisites for Exchange 2010 that were released by a couple of peoples (Anderson Patricio, Pat Richard and Bhargav Shukla). This script have now been updated and applies to Exchange 2013.

     

    It will help you with installing all prerequisites (features) plus the FilterPack(s) and the Unified Communications Managed API. It also provides the option to disable the UAC (User Access Control) and the Windows Firewall.

     

    You can download the script here

    Feel free to use it as much as you want, I just want to mention I do not provide support for it and there are no warranty.

    The script/code can be viewed below:

    #############################################################################
     # Install-Exchange2013PreReqs.ps1
     # Configures the necessary prerequisites to install Exchange 2013 on a
     # Windows Server 2008 R2 server or Windows Server 2012 server
     #
     # Updated by: Jonas Andersson
     # Original written by: Pat Richard, Anderson Patricio and Bhargav Shukla
     #
     # Some info taken from
     # http://www.ucblogs.net/blogs/exchange/archive/2009/12/12/Automated-prerequisite-installation-via-PowerShell-for-Exchange-Server-2010-on-Windows-Server-2008-R2.aspx">http://www.ucblogs.net/blogs/exchange/archive/2009/12/12/Automated-prerequisite-installation-via-PowerShell-for-Exchange-Server-2010-on-Windows-Server-2008-R2.aspx
     # http://msmvps.com/blogs/andersonpatricio/archive/2009/11/13/installing-exchange-server-2010-pre-requisites-on-windows-server-2008-r2.aspx">http://msmvps.com/blogs/andersonpatricio/archive/2009/11/13/installing-exchange-server-2010-pre-requisites-on-windows-server-2008-r2.aspx
     # http://www.bhargavs.com/index.php/powershell/2009/11/script-to-install-exchange-2010-pre-requisites-for-windows-server-2008-r2/">http://www.bhargavs.com/index.php/powershell/2009/11/script-to-install-exchange-2010-pre-requisites-for-windows-server-2008-r2/
     #############################################################################
     
    # Detect correct OS here and exit if no match
     if (-not((Get-WMIObject win32_OperatingSystem).OSArchitecture -eq '64-bit') -and (((Get-WMIObject win32_OperatingSystem).Version -eq "6.1.7601") -or (Get-WMIObject win32_OperatingSystem).Version -eq "6.2.9200")){
     Write-Host "This script requires a 64bit version of Windows Server 2008 R2 or Windows Server 2012, which this is not." -ForegroundColor Red -BackgroundColor Black
     Exit
     }
     
    Function Disable-UAC(){
     
    $path = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System"
     $a = Get-ItemProperty $path -Name EnableLUA
     
    if ($a | Select-String "0")
     {
     Write-Host "UAC is already disabled" -ForegroundColor Green
     return
     }
     
    if ($a | Select-String "1")
     {
     Write-Host "Enabled" -ForegroundColor Red
     Set-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System" -Name "EnableLUA" -Value 0
     Write-host "Registry key HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA has been changed." -ForegroundColor yellow
     Write-Host "UAC is now disabled" -ForegroundColor Green
     }
     
    }
     
    Function Disable-FW(){
     
    $status = netsh advfirewall show allprofiles state
     
    if ($status | Select-String "ON")
     {
     $enabled = $true
     }
     else
     {
     $enabled = $false
     }
     
    if ($enabled -eq $true) {
     
    netsh advfirewall set allprofiles state off
     Write-Host "Firewall is now disabled" -ForegroundColor yellow
     return
     }
     
    if ($enabled -eq $false) {
     Write-Host "Firewall is already disabled" -ForegroundColor Green
     }
     
    }
     
    Function InstallFilterPack(){
     
    if (Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\{95140000-2000-0409-1000-0000000FF1CE}" -ErrorAction SilentlyContinue) {
     
    Write-host "FilterPack is already installed." -ForegroundColor yellow
     return
     }
     
    else
     {
     
    trap {
     Write-Host "Problem downloading FilterPackx64.exe. Please visit: <a href="http://www.microsoft.com/en-us/download/details.aspx?id=26604">http://www.microsoft.com/en-us/download/details.aspx?id=26604</a> and <a href="http://www.microsoft.com/en-us/download/details.aspx?id=17062"'>http://www.microsoft.com/en-us/download/details.aspx?id=17062"">http://www.microsoft.com/en-us/download/details.aspx?id=17062"</a>
     
    break
     }
     
    #set a var for the folder you are looking for
     $folderPath = 'C:\Temp'
     
    #Check if folder exists, if not, create it
     if (Test-Path $folderpath){
     Write-Host "The folder $folderPath exists."
     } else{
     Write-Host "The folder $folderPath does not exist, creating..." -NoNewline
     New-Item $folderpath -type directory | Out-Null
     Write-Host "done!" -ForegroundColor Green
     }
     
    # Check if file exists, if not, download it
     $file1 = $folderPath+"\FilterPack64bit.exe"
     $file2 = $folderPath+"\filterpack2010sp1-kb2460041-x64-fullfile-en-us.exe"
     
    if (Test-Path $file1){
     write-host "The file $file1 exists."
     } else {
     #Download Microsoft Filter Pack
     Write-Host "Downloading Microsoft Filter Pack..." -nonewline
     $clnt = New-Object System.Net.WebClient
     $url = "<a href="http://download.microsoft.com/download/0/A/2/0A28BBFA-CBFA-4C03-A739-30CCA5E21659/FilterPack64bit.exe"'>http://download.microsoft.com/download/0/A/2/0A28BBFA-CBFA-4C03-A739-30CCA5E21659/FilterPack64bit.exe"">http://download.microsoft.com/download/0/A/2/0A28BBFA-CBFA-4C03-A739-30CCA5E21659/FilterPack64bit.exe"</a>
     $clnt.DownloadFile($url,$file1)
     Write-Host "done!" -ForegroundColor Green
     }
     
    if (Test-Path $file2){
     write-host "The file $file2 exists."
     } else {
     #Download Microsoft Filter Pack SP1
     Write-Host "Downloading Microsoft Filter Pack SP1..." -nonewline
     $clnt = New-Object System.Net.WebClient
     $url = "<a href="http://download.microsoft.com/download/A/A/3/AA345161-18B8-45AE-8DC8-DA6387264CB9/filterpack2010sp1-kb2460041-x64-fullfile-en-us.exe"'>http://download.microsoft.com/download/A/A/3/AA345161-18B8-45AE-8DC8-DA6387264CB9/filterpack2010sp1-kb2460041-x64-fullfile-en-us.exe"">http://download.microsoft.com/download/A/A/3/AA345161-18B8-45AE-8DC8-DA6387264CB9/filterpack2010sp1-kb2460041-x64-fullfile-en-us.exe"</a>
     $clnt.DownloadFile($url,$file2)
     Write-Host "done!" -ForegroundColor Green
     }
     
    #Install Microsoft Filter Packs
     Write-Host "Installing Microsoft Filter Packs..."
     
    $args = "/quiet /norestart"
     $setup1 = (Start-Process $file1 -ArgumentList $args -Wait -PassThru).ExitCode
     if ($setup1 -eq 0) { write-host "Successfully installed $file1" -ForegroundColor Green }
     if ($setup1 -ne 0) { write-host "Failed!" -ForegroundColor Red }
     
    $setup2 = (Start-Process $file2 -ArgumentList $args -Wait -PassThru).ExitCode
     if ($setup2 -eq 0) { write-host "Successfully installed $file2" -ForegroundColor Green }
     if ($setup2 -ne 0) { write-host "Failed!" -ForegroundColor Red }
     
    }
     }
     
    Function InstallUMAPI(){
     
    #Change reg key below!
     if (Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\UCMA4" -ErrorAction SilentlyContinue) {
     
    Write-host "Unified Communications Managed API 4.0 Runtime is already installed." -ForegroundColor yellow
     return
     }
     
    else
     {
     
    trap {
     Write-Host "Problem downloading UM API. Please visit: <a href="http://www.microsoft.com/en-us/download/details.aspx?id=34992"'>http://www.microsoft.com/en-us/download/details.aspx?id=34992"">http://www.microsoft.com/en-us/download/details.aspx?id=34992"</a>
     
    break
     }
     #set a var for the folder you are looking for
     $folderPath = 'C:\Temp'
     
    #Check if folder exists, if not, create it
     if (Test-Path $folderpath){
     Write-Host "The folder $folderPath exists."
     } else{
     Write-Host "The folder $folderPath does not exist, creating..." -NoNewline
     New-Item $folderpath -type directory | Out-Null
     Write-Host "done!" -ForegroundColor Green
     }
     
    # Check if file exists, if not, download it
     $file = $folderPath+"\UcmaRuntimeSetup.exe"
     if (Test-Path $file){
     write-host "The file $file exists."
     } else {
     
    #Download Microsoft UM API
     Write-Host "Downloading Microsoft UM API..." -nonewline
     $clnt = New-Object System.Net.WebClient
     $url = "<a href="http://download.microsoft.com/download/2/C/4/2C47A5C1-A1F3-4843-B9FE-84C0032C61EC/UcmaRuntimeSetup.exe"'>http://download.microsoft.com/download/2/C/4/2C47A5C1-A1F3-4843-B9FE-84C0032C61EC/UcmaRuntimeSetup.exe"">http://download.microsoft.com/download/2/C/4/2C47A5C1-A1F3-4843-B9FE-84C0032C61EC/UcmaRuntimeSetup.exe"</a>
     $clnt.DownloadFile($url,$file)
     Write-Host "done!" -ForegroundColor Green
     }
     
    #Check/Install Media Foundation feature
     $mf = Get-WindowsFeature "Server-Media-Foundation" | select *
     
    Start-Sleep 2
     
    if ($mf.Installed -eq $False)
     {
     Write-Host "Installing Media Foundation feature..."    -ForegroundColor Green
     Add-Windowsfeature Server-Media-Foundation
     
    Write-Host ""
     Write-Host "Installing of Media Foundation feature completed." -ForegroundColor Green
     Write-Host ""
     Write-Host "Restart the server and restart the task" -ForegroundColor Red
     Write-Host "or else the UM API won't be installed" -ForegroundColor Red
     Write-Host ""
     
    return
     
    }
     
    if ($mf.Installed -eq $True)
     {
     #Install Microsoft UM API
     Write-Host "Installing Microsoft UM API..." -ForegroundColor Green
     
    $args = "/quiet /norestart"
     $setup = (Start-Process $file -ArgumentList $args -Wait -PassThru).ExitCode
     if ($setup -eq 0) { write-host "Successfully installed $file" -ForegroundColor Green }
     if ($setup -ne 0) { write-host "Failed!" -ForegroundColor Red }
     
    }
     }
     
    }
     
    Import-Module ServerManager
     $opt = "None"
     # Do {
     clear
     if ($opt -ne "None") {write-host "Last command: "$opt -foregroundcolor Yellow}
     write-host
     write-host Exchange Server 2013 - Prerequisites script
     write-host Please, select which role you are going to install..
     write-host
     write-host '1) Client Access Server'
     write-host '2) Mailbox'
     write-host '3) Typical (CAS/Mailbox)'
     write-host
     write-host '10) Install Microsoft Filter Pack 2.0'
     write-host '    Required if installing Mailbox Server roles' -foregroundcolor yellow
     write-host '    Automatically set for options 2 and 3' -foregroundcolor yellow
     write-host '11) Install Microsoft UM API'
     write-host '    Required if installing Mailbox Server roles' -foregroundcolor yellow
     Write-Host '12) Disable UAC'
     Write-Host '13) Disable Firewall'
     write-host
     write-host '15) Restart the Server'
     write-host '16) End'
     write-host
     $opt = Read-Host "Select an option.. [1-14]? "
     
    switch ($opt)    {
     1 {
     
    # Windows Server 2008 R2 SP1
     if ((Get-WMIObject win32_OperatingSystem).Version -eq "6.1.7601") {
     
    Import-Module ServerManager
     Add-WindowsFeature "Desktop-Experience", "NET-Framework", "NET-HTTP-Activation", "RPC-over-HTTP-proxy", "RSAT-Clustering", "RSAT-Web-Server", "WAS-Process-Model", "Web-Asp-Net", "Web-Basic-Auth", "Web-Client-Auth", "Web-Digest-Auth", "Web-Dir-Browsing", "Web-Dyn-Compression", "Web-Http-Errors", "Web-Http-Logging", "Web-Http-Redirect", "Web-Http-Tracing", "Web-ISAPI-Ext", "Web-ISAPI-Filter", "Web-Lgcy-Mgmt-Console", "Web-Metabase", "Web-Mgmt-Console", "Web-Mgmt-Service", "Web-Net-Ext", "Web-Request-Monitor", "Web-Server", "Web-Stat-Compression", "Web-Static-Content", "Web-Windows-Auth", "Web-WMI" -restart
     
    }
     
    # Windows Server 2012
     if ((Get-WMIObject win32_OperatingSystem).Version -eq "6.2.9200") {
     
    Install-WindowsFeature "AS-HTTP-Activation", "Desktop-Experience", "NET-Framework-45-Features", "RPC-over-HTTP-proxy", "RSAT-Clustering", "RSAT-Clustering-CmdInterface", "RSAT-Clustering-Mgmt", "RSAT-Clustering-PowerShell", "Web-Mgmt-Console", "WAS-Process-Model", "Web-Asp-Net45", "Web-Basic-Auth", "Web-Client-Auth", "Web-Digest-Auth", "Web-Dir-Browsing", "Web-Dyn-Compression", "Web-Http-Errors", "Web-Http-Logging", "Web-Http-Redirect", "Web-Http-Tracing", "Web-ISAPI-Ext", "Web-ISAPI-Filter", "Web-Lgcy-Mgmt-Console", "Web-Metabase", "Web-Mgmt-Console", "Web-Mgmt-Service", "Web-Net-Ext45", "Web-Request-Monitor", "Web-Server", "Web-Stat-Compression", "Web-Static-Content", "Web-Windows-Auth", "Web-WMI", "Windows-Identity-Foundation" -restart
     
    }
     
    }
     
    2 {
     
    # Windows Server 2008 R2 SP1
     if ((Get-WMIObject win32_OperatingSystem).Version -eq "6.1.7601") {
     
    Import-Module ServerManager
     InstallFilterPack
     Add-WindowsFeature "Desktop-Experience", "NET-Framework", "NET-HTTP-Activation", "RPC-over-HTTP-proxy", "RSAT-Clustering", "RSAT-Web-Server", "WAS-Process-Model", "Web-Asp-Net", "Web-Basic-Auth", "Web-Client-Auth", "Web-Digest-Auth", "Web-Dir-Browsing", "Web-Dyn-Compression", "Web-Http-Errors", "Web-Http-Logging", "Web-Http-Redirect", "Web-Http-Tracing", "Web-ISAPI-Ext", "Web-ISAPI-Filter", "Web-Lgcy-Mgmt-Console", "Web-Metabase", "Web-Mgmt-Console", "Web-Mgmt-Service", "Web-Net-Ext", "Web-Request-Monitor", "Web-Server", "Web-Stat-Compression", "Web-Static-Content", "Web-Windows-Auth", "Web-WMI" -restart
     
    }
     
    # Windows Server 2012
     if ((Get-WMIObject win32_OperatingSystem).Version -eq "6.2.9200") {
     
    InstallFilterPack
     Install-WindowsFeature "AS-HTTP-Activation", "Desktop-Experience", "NET-Framework-45-Features", "RPC-over-HTTP-proxy", "RSAT-Clustering", "RSAT-Clustering-CmdInterface", "RSAT-Clustering-Mgmt", "RSAT-Clustering-PowerShell", "Web-Mgmt-Console", "WAS-Process-Model", "Web-Asp-Net45", "Web-Basic-Auth", "Web-Client-Auth", "Web-Digest-Auth", "Web-Dir-Browsing", "Web-Dyn-Compression", "Web-Http-Errors", "Web-Http-Logging", "Web-Http-Redirect", "Web-Http-Tracing", "Web-ISAPI-Ext", "Web-ISAPI-Filter", "Web-Lgcy-Mgmt-Console", "Web-Metabase", "Web-Mgmt-Console", "Web-Mgmt-Service", "Web-Net-Ext45", "Web-Request-Monitor", "Web-Server", "Web-Stat-Compression", "Web-Static-Content", "Web-Windows-Auth", "Web-WMI", "Windows-Identity-Foundation" -restart
     
    }
     
    }
     
    3 {
     
    if ((Get-WMIObject win32_OperatingSystem).Version -eq "6.1.7601") {
     
    Import-Module ServerManager
     InstallFilterPack
     Add-WindowsFeature "Desktop-Experience", "NET-Framework", "NET-HTTP-Activation", "RPC-over-HTTP-proxy", "RSAT-Clustering", "RSAT-Web-Server", "WAS-Process-Model", "Web-Asp-Net", "Web-Basic-Auth", "Web-Client-Auth", "Web-Digest-Auth", "Web-Dir-Browsing", "Web-Dyn-Compression", "Web-Http-Errors", "Web-Http-Logging", "Web-Http-Redirect", "Web-Http-Tracing", "Web-ISAPI-Ext", "Web-ISAPI-Filter", "Web-Lgcy-Mgmt-Console", "Web-Metabase", "Web-Mgmt-Console", "Web-Mgmt-Service", "Web-Net-Ext", "Web-Request-Monitor", "Web-Server", "Web-Stat-Compression", "Web-Static-Content", "Web-Windows-Auth", "Web-WMI" -restart
     
    }
     
    # Windows Server 2012
     if ((Get-WMIObject win32_OperatingSystem).Version -eq "6.2.9200") {
     
    InstallFilterPack
     Install-WindowsFeature "AS-HTTP-Activation", "Desktop-Experience", "NET-Framework-45-Features", "RPC-over-HTTP-proxy", "RSAT-Clustering", "RSAT-Clustering-CmdInterface", "RSAT-Clustering-Mgmt", "RSAT-Clustering-PowerShell", "Web-Mgmt-Console", "WAS-Process-Model", "Web-Asp-Net45", "Web-Basic-Auth", "Web-Client-Auth", "Web-Digest-Auth", "Web-Dir-Browsing", "Web-Dyn-Compression", "Web-Http-Errors", "Web-Http-Logging", "Web-Http-Redirect", "Web-Http-Tracing", "Web-ISAPI-Ext", "Web-ISAPI-Filter", "Web-Lgcy-Mgmt-Console", "Web-Metabase", "Web-Mgmt-Console", "Web-Mgmt-Service", "Web-Net-Ext45", "Web-Request-Monitor", "Web-Server", "Web-Stat-Compression", "Web-Static-Content", "Web-Windows-Auth", "Web-WMI", "Windows-Identity-Foundation" -restart
     
    }
     
    }
     10 {
     # future - auto detect Internet access
     write-host 'Can this server access the Internet?'
     $filtpack = read-host 'Please type (Y)es or (N)o...'
     switch ($filtpack)                {
     Y { InstallFilterPack }
     N {Write-warning 'Please download and install Microsoft Filter Pack from here: <a href="http://www.microsoft.com/en-us/download/details.aspx?id=26604">http://www.microsoft.com/en-us/download/details.aspx?id=26604</a> and <a href="http://www.microsoft.com/en-us/download/details.aspx?id=17062'}">http://www.microsoft.com/en-us/download/details.aspx?id=17062'}</a>
     }
     }
     11 {
     # future - auto detect Internet access
     write-host 'Can this server access the Internet?'
     $umapi = read-host 'Please type (Y)es or (N)o...'
     switch ($umapi)                {
     Y { InstallUMAPI }
     N {Write-warning 'Please download and install Microsoft UM API from here: <a href="http://www.microsoft.com/en-us/download/details.aspx?id=34992'}">http://www.microsoft.com/en-us/download/details.aspx?id=34992'}</a>
     }
     }
     12 { Disable-UAC }
     13 { Disable-FW }
     15 { Restart-Computer }
     16 {
     Write-Host "Exiting..."
     Exit
     }
     default {write-host "You haven't selected any of the available options. "}
     }
    
  11. Hi,

     

    If they are rooms, why do you want their calendar to get reminders?

    Isn't it good enough if the people in the meeting/attending gets the reminder?

     

    Also be aware of that in normal cases these resource mailboxes are disabled, see if you can enable them and logon to it and see if you get the reminders.

  12. This script idea came up after being involved in a migration project.

    Published: 2013-05-22
    Updated: 2013-05-24
    Version: 1.1

    It’s purpose with this script is for getting Quest Migration Manager (QMM) being able to match objects between domains. In a scenario with one-way trust and not being able to use Quest Migration Manager AD or any other tool for providing the SIDHistory into the AD objects. Users, mailboxes and mail contacts are already created, where the contacts are used for having a global address list (GAL) object they can send emails to.
    Using QMM you can match by Username, Mailaddress or SIDHistory. In my case the username differs and the SIDHistory is not available (not allowed being copied into the target AD).

    I created four different functions within this script, one called “Export-SourceInformation”, which should be used in the source environment. It will export the information from the source regarding Name, DisplayName, PrimarySmtpAddress, RecipientTypeDetails and save it into a CSV file called “users.csv”.
    Then bring the CSV file into the target environment. This CSV file should be used as a control file if you don’t want to run all users at the same time (run some tests before running all of them in one batch).
    I would recommend a couple of smaller batches for testing the functions before deploying it in full scale.
    There is a function called “Verify-TargetInformation”, which uses the CSV file called “users.csv” and retrieves the Name and PrimarySmtpAddress for each object in the CSV file.

    Another function is called “Set-SourceAddress”, this part takes care of the target account.
    It uses the file called “users.csv” and checks whether there are any contacts for these mailboxes, if there are the mail contact will be deleted and the mailbox forward settings will be removed together with making sure that the mailbox is showed in the GAL. But before any changes are done, the current configuration for both the mail contact and the mailbox object are being saved into a CSV file called “targetinformation.csv”.

    Last but not least, the function called “Rollback-TargetInformation” is used for putting back the PrimarySmtpAddress to the value that it was prior to the change, this by using the CSV file “targetinformation.csv”. When the Directory Synchronization have successfully matched the mailboxes this function should be runned for having back the correct information.

    You can use this for free, without any guarantee or warranty and at your own risk.
    Feel free to post about it, just make sure to link my blog and blogpost.

    Download the script

    #####################################################################################
    # Filename: Migration-Preparation-testlabs.ps1  
    # Description:
    # This PowerShell script exports information, configures objects and prepares for
    # Quest Migration Manager EX Directory Synchronization
    #
    # Usage: Import-Module Migration-Preparation-testlabs.ps1  
    # Start with importing the module, then Starting function: Export-SourceInformation; 
    # Set-SourceAddress; Rollback-TargetInformation; Verify-TargetInformation
    #
    # Version: 1.1
    #
    # Changelog:
    # v1.1 - Introduced LegacyExchangeDN - X500 migration
    #
    # Jonas Andersson, MCC 2011 & 2012
    # http://www.testlabs.se/blog
    # Twitter @jonand82
    #####################################################################################
    
    Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 -ErrorAction SilentlyContinue
    Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin -ErrorAction SilentlyContinue
    
    ## Exporting the SMTP information from Source mailboxes
    Function Export-SourceInformation(){
    	
    	$filename = "users.csv"
    	
    	$users = Get-Mailbox -resultsize unlimited | Select Name,DisplayName,PrimarySmtpAddress,RecipientTypeDetails,LegacyExchangeDN
    	$users | Export-CSV $filename -notype -Encoding Unicode
    	
    }
    
    
    ## Changing Target mailboxes to Source PrimarySmtpAddress for QMM to match on it
    Function Set-SourceAddress(){
    	
    	$data = Import-CSV .\users.csv
    	$filename = "targetinformation.csv"
    	
    	## Saving Target Information into CSV file before changing
    	$MasterList = @()
    	Foreach($t in $data)
    	{
    		$str = $t.displayname
    		$MyObject = New-Object PSObject -Property @{
    	
    		Name = (Get-Mailbox -resultsize unlimited -Filter "DisplayName -like '*$str*'").Name
    		DisplayName = (Get-Mailbox -resultsize unlimited -Filter "DisplayName -like '*$str*'").DisplayName
    		PrimarySmtpAddress = (Get-Mailbox -resultsize unlimited -Filter "DisplayName -like '*$str*'").PrimarySmtpAddress
    		RecipientTypeDetails = (Get-Mailbox -resultsize unlimited -Filter "DisplayName -like '*$str*'").RecipientTypeDetails
    		Email = ((Get-Mailbox -resultsize unlimited -Filter "DisplayName -like '*$str*'").EmailAddresses -Join ";")
    		DeliverToMailboxAndForward = (Get-Mailbox -resultsize unlimited -Filter "DisplayName -like '*$str*'").DeliverToMailboxAndForward
    		ForwardingAddress = (Get-Mailbox -resultsize unlimited -Filter "DisplayName -like '*$str*'").ForwardingAddress
    		ForwardingSmtpAddress = (Get-Mailbox -resultsize unlimited -Filter "DisplayName -like '*$str*'").ForwardingSmtpAddress
    		HiddenFromAddressListsEnabled = (Get-Mailbox -resultsize unlimited -Filter "DisplayName -like '*$str*'").HiddenFromAddressListsEnabled
    		LegacyExchangeDN = (Get-Mailbox -resultsize unlimited -Filter "DisplayName -like '*$str*'").LegacyExchangeDN
    		ContactName = (Get-MailContact -resultsize unlimited -Filter "DisplayName -like '*$str*'").Name
    		ContactDisplayName = (Get-MailContact -resultsize unlimited -Filter "DisplayName -like '*$str*'").DisplayName
    		ContactPrimarySmtpAddress = (Get-MailContact -resultsize unlimited -Filter "DisplayName -like '*$str*'").PrimarySmtpAddress
    		ContactEmail = ((Get-MailContact -resultsize unlimited -Filter "DisplayName -like '*$str*'").EmailAddresses -Join ";")
    		ContactExternalEmailAddress = (Get-MailContact -resultsize unlimited -Filter "DisplayName -like '*$str*'").ExternalEmailAddress
    		ContactHiddenFromAddressListsEnabled = (Get-MailContact -resultsize unlimited -Filter "DisplayName -like '*$str*'").HiddenFromAddressListsEnabled
    
    		}
    			
    		$MasterList += $MyObject
    	}
    	
    	$MasterList | Export-Csv $filename -NoTypeInformation -Encoding Unicode
    	Write-Host "Information is saved into the CSV file: $filename" -ForegroundColor White
    	
    	
    	Foreach($i in $data)
    	{
    		$str = $i.displayname
    		
    		## Removing mail contacts for Source users
    		$c = Get-MailContact -resultsize unlimited -Filter "DisplayName -like '*$str*'"
    		Write-Host $c -ForegroundColor Yellow
    		
    		## Multiple matching, no changes will be done
    		if ($c.count -ge 1)
    		{
    			Write-Host "ERROR: Multiple matching"
    			Write-Host "Matches: $c.count"
    			return
    		}
    		
    		## Unique contact found, removing it
    		if ($c.count -eq $null)
    		{
    			Write-Host "Unique matching: $c"
    			Write-Host "Removing the mail contact object for: $c"
    			
    			Remove-MailContact -Identity $c -Confirm:$false
    			
    		}
    		
    		
    		## Starting the configuration for Target Mailboxes
    		$u = Get-Mailbox -resultsize unlimited -Filter "DisplayName -like '*$str*'"
    		
    		Write-Host $u -ForegroundColor Yellow
    		
    		## Multiple matching, no changes made
    		if ($u.count -ge 1)
    		{
    			Write-Host "ERROR: Multiple matching"
    			Write-Host "Matches: $u.count"
    			return
    		}
    		
    		## Setting the Source PrimarySmtpAddress on the Target Mailboxes
    		if ($u.count -eq $null)
    		{
    			Write-Host "Unique matching: $u"
    			Write-Host "Setting Source SMTP as PrimaryAddress for matching using QMM"
    			Write-Host "Configuring the mailbox for showing up in GAL and remove the forwarding configuration"
    			Write-Host "Adding the LegacyExchangeDN as X500 for Outlook auto-complete cache"
    			
    			$email = $i.PrimarySmtpAddress
    			$x500 = $i.LegacyExchangeDN
    			
    			Set-Mailbox -Identity $u -ForwardingAddress $null -DeliverToMailboxAndForward:$false -HiddenFromAddressListsEnabled:$false -PrimarySmtpAddress $email -EmailAddressPolicyEnabled:$false
    			
    			$ProxyAddresses = (Get-Mailbox -Identity $u).EmailAddresses
    			$ProxyAddresses += [Microsoft.Exchange.Data.CustomProxyAddress]("X500:$x500")
    			Set-Mailbox -Identity $u -EmailAddresses $ProxyAddresses
    			
    		}
    		
    		else
    		{
    			Write-Host "No match"
    			return
    		}
    	
    	}
    	
    	Write-Host ""
    	Write-Host "#################################################################" -ForegroundColor White
    	Write-Host "# First run the Verify-TargetInformation..        				#" -ForegroundColor White
    	Write-Host "# Start the QMM Synchronization for matching Source <-> Target  #" -ForegroundColor White
    	Write-Host "# Finally run the Rollback-TargetInformation when sync is done  #" -ForegroundColor White
    	Write-Host "#################################################################" -ForegroundColor White
    	Write-Host ""
    }
    
    
    ## Rollback of Target PrimarySmtpAddress
    Function Rollback-TargetInformation(){
    	
    	$data = Import-CSV .\targetinformation.csv
    	
    	$MasterList = @()
    	Foreach($i in $data)
    	{
    		
    		$str = $i.displayname
    		$user = Get-Mailbox -resultsize unlimited -Filter "DisplayName -like '*$str*'"
    		
    		## Predicts there is only one @testlabs.se address
    		$pri = Get-Mailbox -Identity $user | Select-Object -ExpandProperty EmailAddresses | Where-Object {$_.SmtpAddress -like '*@testlabs.se'} | Select-Object SmtpAddress
    		$adr = $pri.SmtpAddress
    		
    		Write-Host "Configuring mailbox: $user with adress: $adr" -ForegroundColor White
    		Set-Mailbox -Identity $user -PrimarySmtpAddress $adr -EmailAddressPolicyEnabled:$False
    	
    	}
    	
    }
    
    
    ## Verifying the Target PrimarySmtpAddress
    Function Verify-TargetInformation(){
    
    	$data = Import-CSV .\users.csv
    	
    	$filetime = (get-date -format yyyyMMdd-hhmm)
    	$filename = "verify-$filetime.csv"
    	$MasterList = @()
    	
    	## Verifying the PrimarySmtpAddress
    	Foreach($i in $data)
    	{
    		
    		$MyObject = New-Object PSObject -Property @{
    			
    			Name = (Get-Mailbox -Identity $i.PrimarySmtpAddress).Name
    			PrimarySmtpAddress = (Get-Mailbox -Identity $i.PrimarySmtpAddress).PrimarySmtpAddress
    			Database = (Get-Mailbox -Identity $i.PrimarySmtpAddress).Database
    			EmailAddresses = ((Get-Mailbox -Identity $i.PrimarySmtpAddress).EmailAddresses -Join ";")
    			
    		}
    		
    		$MasterList += $MyObject
    		
    	}
    	
    	$MasterList | Export-Csv $filename -NoTypeInformation -Encoding Unicode
    	Import-CSV $filename
    	
    	Write-Host ""
    	Write-Host "SMTP Verification is saved into the CSV file: $filename" -ForegroundColor White
    	Write-Host ""
    }
    
    
  13. Where are you sending this mail from? Is it from a client? Another server or directly from the Exchange server itself?

     

    For having Exchange to relay your emails, you need to create a relay connector

    Create it by running:

     

    New-ReceiveConnector -Name Relay -Usage Custom -Bindings 'x.x.x.x:25' -Fqdn relay.domain.com -RemoteIPRanges x.x.x.x -Server servername -PermissionGroups AnonymousUsers

    Get-ReceiveConnector servername\Relay | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights ms-Exch-SMTP-Accept-Any-Recipient

     

    Change x.x.x.x to your IP addresses

    • Like 1
  14. verify the services, that they are started, also check the dependencies so these are started if there are some (are there any dependecies, list them in here)

    can you run exbpa and see if it gives you any error or warnings

  15. I would start with enabling the verbose logging for the connector and check the log files for errors

    If you want, post the smtp session in the thread or even better, create a new thread and set this to solved since its a new incident

     

    Cheers

  16. Hi,

     

    Even if I sent you a respond on your message, I'll post it here as well if anyone might run into the same issue.

     

    Can you create normal mailboxes?

    If that is the case you can change mailbox type after you've been creating the mailboxes by using

    set-mailbox -id roommailbox01 -type room

     

    I hope this will help you

     

    Ps. Are you using CU1?

    • Like 1
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.