Office 365: Challenges with Distribution Groups for Migrated Mailboxes and a Script Based Solution ( Script Version 1.0 )
===========================================================================================
Group Migration Script v1.0 –> https://github.com/timmcmic/DLConversion/blob/master/src/DLConversion.ps1
===========================================================================================
Distribution groups are an excellent way to organize multiple recipients under a single address. Like Exchange Server on-premises, Office 365 supports mail-enabled distribution groups, security groups, and dynamic distribution groups. When Active Directory and Exchange are used on-premises, distribution groups are typically created in the on-premises Active Directory and Azure Active Directory Connect is used to maintain and replicate the distribution groups to Office 365.
Generally, there are two types of administration models that use distribution groups (which can co-exist or be used exclusively):
1. The first model uses centralized administration for all configuration and membership changes. When a member needs to be added or removed, the help desk or an admin typically processes the request. When co-existing with Office 365 this type of administration model is very effective. With all changes originating on premises – Azure AD Connect can easily replicated them into the Azure AD where Office 365 workloads can process them.
2. The second model delegates some or all to the user that owns the distribution group. In this model, Outlook is used for management of the distribution group. In a hybrid configuration, this model often creates management challenges. Outlook processes the membership changes by modifying membership on the domain controller provided to the user’s mailbox by Active Directory. After the membership change is made, Azure AD Connect pushes the requested changes to Azure AD where Office 365 workloads can process them. Office 365 mailboxes receive their list of domain controllers from Exchange Online, which prevents distribution group synchronized from on-premises from being modified in Office 365. Therefore, anyone whose mailbox has been migrated to Office 365 can no longer managed distribution groups. The same is also true for administrators that attempt to manage the distribution group in Office 365.
When asked how to allow migrated mailboxes to manage distribution groups that are owned by the mailboxes the answer is to migrate the distribution groups to Office 365. For some, this involves manually deleting and recreating the distribution groups. Others have also found scripts to do this, but they don’t always address all the attributes associated with a distribution group and instead focus on simple attributes like proxy addresses, membership, name, etc.
In this post, I’ll show you a script that addresses these concerns and allows you to migrate distribution groups to Office 365 with full fidelity. Before we get into the script, let’s look at some of the challenges encountered when attempting to migrate distribution groups.
Group Membership
Distribution groups created on-premises are managed using AD tools or Exchange management tools. When managing distribution groups with Exchange tools, membership rules are enforced (for example, a member can be added only if the object is mail-enabled). This can include mail contacts, mail users, and mailboxes. Groups and users, both mail-enabled and not, can be added using Exchange tools. AD tools are more forgiving, though; the administrator can add any valid AD object to the group membership (for example, a contact that is not mail-enabled could be added to the distribution group, although this would have no effect on mail flow).
Exchange Online has a set of rules for objects that are replicated from Azure AD to Exchange Online Active Directory. If an object is not mail-enabled, it is not represented in Exchange Online AD. This includes any groups that are members of an on-premises distribution group but not mail-enabled. An exception to this rule is user accounts. User account objects are replicated to Exchange Online even if they are not mail-enabled.
When migrating distribution groups, all objects that are not mail-enabled or users must be filtered out. Here is an example of a distribution group that contains a mix of members.
PS C:\> Get-DistributionGroupMember -Identity Migrate
Name RecipientType
---- -------------
Domain Users Group
Journal Mailbox UserMailbox
Brian Murphy MailContact
Timothy McMichael MailUser
Migrate1 MailUniversalSecurityGroup
Migrate2 MailUniversalDistributionGroup
Team Manager User
Dynamic DynamicDistributionGroup
Test Contact Contact
Users and Groups
For users and groups to be members of a distribution group they must exist in Office 365. There are common scenarios where Organizational Units are intentionally excluded from replication to Azure Active Directory. Before migrating any distribution groups you must ensure that the members exist in Office 365. If they don’t, attempts to create the distribution group through automation will fail. Since it is possible for groups to have other group as members, any type of migration of a group to Office 365 will require removal of the on-premises group. If the groups that are members are not migrated first, their membership in that group would be lost.
Multivalued Attributes
Distribution groups have several multi-valued attributes that require consideration before migrated. The attributes managedBy, moderatedBy, acceptMessagesOnlyFromSendersOrMembers, grantSendOnBehalfTo, rejectMessagesFromSendersOrMembers, and bypassModerationFromSendersOrMembers, for example, store their member references as distinguished names of objects. Here is a sample output:
PS C:\> $a=Get-DistributionGroup migrate
PS C:\> $a.managedBy
domain.local/Organization/Users/Officers/Timothy McMichael
domain.local/Organization/Users/Officers/Bill Smith
PS C:\> $a.moderatedBy
domain.local/Organization/Users/Officers/Timothy McMichael
PS C:\> $a.AcceptMessagesOnlyFromSendersOrMembers domain.local/Organization/Users/Officers/Bill Smith
domain.local/ConvertedDL/Migrate1
PS C:\> $a.BypassModerationFromSendersOrMembers
domain.local/ConvertedDL/Migrate1
PS C:\> $a.RejectMessagesFromSendersOrMembers
domain.local/ConvertedDL/Migrate2
PS C:\> $a.GrantSendOnBehalfTo
domain.local/Organization/Users/Officers/Timothy McMichael
If these attributes were extracted as arrays and then used with Office 365, the references would not work because the DNs of the objects stored in Office 365 needs to reference the DN of the object in Exchange Online.
The managedBy attribute is a shared attribute with Active Directory, and it can be set to a non-mail-enabled user. In Exchange Online, only a valid recipient object can be entered in the managedBy field. Thus, before you can convert the distribution group, you must ensure that all members of the managedBy field are Exchange Online recipients.
The remaining multi-valued attributes can only be set via Exchange cmdlets, which ensures that the objects are mail-enabled user objects.
Proxy / Email Addresses
The email addresses field is a multi-valued attribute. If the proxy addresses are not in use on another object in Exchange Online, they can be moved to the new distribution group. Note, that it is important to preserve the Reply To functionality. Migrated distribution groups don’t really change – they have the same name, same proxy addresses, and same members. But the nickname cache in Outlook uses the distinguished name of the group (which points to on-premises). If a user were to address an email to the migrated group by selecting the group from nickname cache, the message would NDR.
Other Attributes
Other attributes of a distribution group are mostly text based, allowing them to be exported and imported as text. There are also several Boolean values that can be translated to the equivalent on the new distribution group, including custom attributes.
Group Migration Script
The group migration script described in this post considers all the factors presented above. Executing the script starts by preparing some pre-requisites.
Prerequisites
The first pre-requisite is to establish an Organizational Unit (OU) within Active Directory that is not synchronized to Azure Active Directory. This OU will be where the group objects will be moved during the conversion process. The conversion process in v1 of the script retains the original distribution group. The distinguished name of this group will need to be recorded as it will be a script variable.
The second pre-requisite involves creating a secure credentials XML file that can be used by the script. The administrator must note the file names and the path where they are stored. These are variables within the script that must be updated, or the administrator can match the files contained in the script. Create one file for on-premises credentials and one file for cloud credentials. If using XML files is not your preferred method of handling credentials, you can modify the script to prompt for credentials or consider storing credentials using other methods supported by PowerShell.
$cred = get-credential
$cred | export-cliXML –path c:\Scripts\credentials.xml
One caveat to using these files is that they are signed to the user and machine on which they were created. Therefore, all admins using the script have to create their own sets of files.
The third pre-requisite is to ensure that the PSLOGGING module from the PowerShell Gallery is installed. This module is necessary to create files that record operations along with clean-up and logging when an error has occurred.
install-module PSLOGGING
The fourth pre-requisite is to configure Basic authentication on a local PowerShell directory. By default, Basic authentication is not enabled in on-premises, which limits the ability to create a “remote” PowerShell session to on-premises Exchange server. Administrators often work around this by identifying one server where Basic authentication is enabled or by enabling Basic authentication on all PowerShell virtual directories behind a load-balanced name. Whether a single server or multiple servers are used, it is a requirement to establish an SSL session to the name provided, which means there must be a public certificate installed on the specified endpoint.
Get-PowerShellVirtualDirectory –server <SERVERNAME> | Set-PowerShellVirtualDirectory –basicAuthentication:$TRUE
The last pre-requisite is to review the variables contained within the script for any necessary modifications. Variables that are recommended for the admin to adjust are noted with ###ADMIN### in front of their definition. These variables include PowerShell URLs, paths, and file names.
Script Mechanics
With the pre-requisites covered, let’s dive into the mechanics of how the script works and review the individual functions.
The process starts by gathering the credentials XML files and preparing them for use in subsequent functions. The success or failure of these operations is largely dependent on ensuring the credentials stored in the files are accurate and that the associated variables with the files have been updated successfully.
The script then proceeds to create the necessary PowerShell sessions for operations to be performed. There are three PowerShell sessions created:
1. The first session is to an on-premises server where commands will operate against on-premises recipient objects.
2. The second session is to Office 365 where Office 365 recipient commands will be executed.
3. The third session is to the Azure AD Connect server, which will be used to invoke synchronization as recipient objects are modified.
To activate the on-premises and Office 365 PowerShell sessions, they must be imported. When importing remote PowerShell sessions, you can often have the same cmdlets returned in each session. In this case, there is definite overlap between Exchange and Exchange Online. To avoid any confusion when importing the Office 365 PowerShell session we append the cmdlets with O365. This effectively takes a cmdlet like Get-Recipient and makes it Get-O365Recipient. PowerShell is smart enough to detect the correct cmdlet and invoke it within the appropriate session.
After the underlying PowerShell sessions are started, the script exports all properties of the on-premises distribution group and all properties of the Office 365 distribution group to variables for later use. The Office 365 distribution group should match the on-premises group as the source of authority for the Office 365 group is on-premises.
After the data has been extracted, the script performs a safety check against the distribution group, which reviews the directory synchronization flag of the distribution group in Office 365. If this flag is set to FALSE, it indicates that the distribution group is cloud-only. If this scenario occurs, the script is automatically ended. The script can only be so smart, and it uses the SMTP address of the on-premises distribution group to locate the replicated copy in Office 365. Because it’s possible for a group in Office 365 and on-premises to share the same address even though they are not directory synchronized, the script must stop because if it continued, the Office 365 group would be removed and replaced with the on-premises group which could have unintended consequences.
After the safety check is complete, the script records and exports the information for the on-premises and Office 365 groups to XML files defined by the administrator. XML output allows us to retain full fidelity of the multivalued attributes in case something goes wrong, or we need to manually correct a failure condition.
The last portion of data collection (membership) and backup then proceeds. Membership is obtained and written to a variable that will be used in later operations. It is also exported to XML file to ensure that we have a copy of the information prior to starting any of the conversion activities.
With all the pertinent information stored within variables and backup XML files, the next step is processing this information. In the previous section, I outlined some of the challenges in working with this data. There can be non-mail-enabled objects that need to be accounted for – these will not have primary SMTP addresses. There are mail-enabled objects that need to be accounted for but may be stored as distinguished names on certain attributes. Knowing that we need to account for all these differences forces us to develop a method to translate those individual users and recipients to objects that can be located in Exchange Online. To that end, we know that we can locate recipients via their primary SMTP address or a user account through the user principal name. So, the script iterates through all the multi-valued attributes and attempts to normalize the data into references that can be found in Exchange Online. If the object is a recipient class, we record the primarySMTPAddress of the object. If the object is a non-mail-enabled user, we record the userPrincipalName of the object. For each multi-valued attribute this culminates in an individual array of references that will allow us to find the objects in Exchange Online.
When the arrays of normalized data have been built we need to validate that the objects can be found in Exchange Online. The script looks for objects in Exchange Online using Get-Recipient and Get-User cmdlets in the Office 365 PowerShell. If the object is found, the recipient or user is valid and is synchronized by Azure AD Connect. If an object is not found, the process stops and allows the administrator to correct any issues. Groups can also be members of distribution groups, so the script reviews all groups that are members and determines if they have been migrated to Office 365. Assuming all users are found, and all member groups have been migrated, it is safe to proceed with the migration.
The first step in finalizing the migration is to move the distribution group to the OU that does not synchronize. As the script proceeds, Azure AD Connect will see this as a group deletion and eventually remove it from Office 365. The removal from Azure AD will propagate to Exchange Online Active Directory, resulting in the distribution group becoming deleted.
To ensure that all domain controllers show that the group was moved to the OU, repadmin is used to force replication across all domain controllers in the domain. If your domain is very large, consider changing this function to a list of domain controllers or to a single domain controller. You can also comment out the function and just increase the wait time to allow for normal replication to occur.
With domain replication underway/completed, next is to remove the distribution group from Azure AD. This process uses a remote PowerShell session to perform a delta synchronization. A delta synchronization may already be in progress, so the script is designed to retry every 1 minute until it can assure that at least one delta sync was triggered by the script. A delta sync can take several minutes to run depending on the size of the environment, and it only removes the group from Azure AD. The forward synchronization process will detect the groups removal from Azure AD and synchronize the change to Exchange Online. Because there really is no way to monitor progress once the delta synchronization is issued, the script begins issuing calls to Azure AD for the group. If the call is successful, the group still exists, and the script waits 1 minute between attempts, looping until the group is not found (basically, an error occurs locating the group, which confirms the group is no longer in Office 365).
Once the group has been removed the script can now create the new replacement group using the base settings. Next, all the non-multivalued attributes of the distribution group are set, including email addresses, custom attribute, extension attributes, and other Boolean variables that control mail flow, delivery, etc. Next, multi-valued attributes are set by using the normalized arrays that were built previously. After all attributes have been addressed, the new distribution group in Office 365 now mirrors the original distribution group on-premises.
The final step is to gather all the settings of the new distribution group and export them to XML, which serves as a record of the operation. At the end of the script, all created PowerShell sessions are removed in preparation for the next migration.
Frequently Asked Questions
Q: How can I prevent PowerShell sessions from timing out?
A: There is really no method to prevent the PowerShell settings from timing out. During testing, we determined that the operation that ran the longest was building the array of normalized SMTP addresses for the distribution group membership. When the PowerShell session to Office 365 was left open during this process it would often be closed before we were ready to proceed with other portions. It was also determined that when processing long arrays (for example, adding all the distribution group membership), the session may time out. To overcome this, we routinely reset the session to Office 365 after portions of the script that took more time to process data.
Q: Can the script be run in bulk?
A: It is possible to feed the script a list of proxy addresses for distribution groups to migrate by calling the script multiple times. The process through would repeat in terms of domain controller replication, Azure AD Connect synchronization, etc. The original design of the script approached this from the perspective of servicing one-off requests for migration and not necessarily bulk migrations or conversions.
Q: Is the script efficient?
A: Efficiency is always relative…is it more efficient then trying to do all of this by hand and manage all the attributes? Certainly. The script must rely on several processes that do not necessarily have any guaranteed timelines. For example, we can’t predict how long a delta sync or forward sync will take. Thus, it’s not possible to give you a 100% accurate estimate of how long it takes to migrate a distribution group. There is also a great deal of logging that occurs during the script which adds some overhead, but given the nature and importance of distribution groups, having the additional information is important.
Q: What is the largest distribution group size that was tested?
A: The script was validated using a distribution group with 10,000 members and had a minimum of 10 members in each of the multi-valued attributes.
Q: How long did it take to migrate a group with 10,000 members?
A: A little more than 3 hours:
Days : 0
Hours : 3
Minutes : 6
Seconds : 57
Milliseconds : 768
Ticks : 112177687252
TotalDays : 0.129835286171296
TotalHours : 3.11604686811111
TotalMinutes : 186.962812086667
TotalSeconds : 11217.7687252
TotalMilliseconds : 11217768.7252
Q: What happens to mail flow during the migration process?
A: It depends. The distribution group is maintained on-premises during this entire process. If messages enter the on-premises environment first and are addressed to the distribution group, you can expect that expansion will occur and message delivery will happen. The group in Office 365 is in flux during the entire migration process. If the group is missing and a message is received, it may NDR. If the group has been created but member addition is in-progress, then only some of the members may receive it. I recommend that you provide warnings to distribution group owners that mail flow will be affected during the transition.
Q: If the distribution group is a mail-enabled security group, and that group has been assigned permissions to Office 365 workloads, what happens during the conversion?
A: Permissions would be lost. The script only works because the group is deleted – and this would be processed by other workloads as a group deletion.
Q: Do I have to keep the on-premises distribution group post-migration?
A: It depends. If messages are processed through the on-premises environment, there needs to be a corresponding mail-enabled object. We are looking into automating the conversion of the group to a mail contact in a future version of the script to allow for mail flow to continue.
Q: Dynamic distribution groups are not replicated by Azure Active Directory Connect. How does the script handle dynamic distribution groups?
A: Administrators must manually create dynamic distribution groups in Office 365. The script intentionally does not treat dynamic distribution groups differently then a normal recipient. In this case we detect a member and record the primary SMTP address. When we run the recipient test against Office 365 by primary SMTP address – the recipient is returned and the script can proceed. If the recipient is not found the script will fail.
Sample Invocations
===============================================================================
Attempting to convert the distribution group Migrate without ignoring invalid managers or invalid members. The group to be converted IS NOT located in Office 365. An error is generated and the script stops.
PS C:\Scripts> .\ConvertDL.ps1 -dlToConvert Migrate -ignoreInvalidDLMember:$FALSE -ignoreInvalidManagedByMember:$FALSE
Directory: C:\Scripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 9/18/2018 7:17 PM 0 DLConversion.log
***************************************************************************************************
Started processing at [09/18/2018 19:17:22].
***************************************************************************************************
Running script version [1.0].
***************************************************************************************************
This function imports the on premises secured credentials file....
The on premises credentials file was imported successfully.
This function imports the Office 365 secured credentials file....
The Office 365 credentials file was imported successfully.
This function creates the powershell session to on premises Exchange....
The powershell session to on premises Exchange was created successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function creates the powershell session to AAD Connect....
The powershell session to AAD Connect was created successfully.
This function imports the powershell session to on premises Exchange....
WARNING: The names of some imported commands from the module 'tmp_y0ib5tyw.pmz' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.
Name : tmp_y0ib5tyw.pmz
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_y0ib5tyw.pmz\tmp_y0ib5tyw.pmz.psm1
Description : Implicit remoting for https://webmail.domain.com/powershell
Guid : 1dfe9d4c-8ca2-4de2-aa8c-8e0281af907c
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_y0ib5tyw.pmz
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-ADPermission, Add-ADPermission], [Add-AvailabilityAddressSpace,
Add-AvailabilityAddressSpace], [Add-ContentFilterPhrase, Add-ContentFilterPhrase],
[Add-DatabaseAvailabilityGroupServer, Add-DatabaseAvailabilityGroupServer]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to on premises Exchange was imported successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_rt1gncnz.op4' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.
Name : tmp_rt1gncnz.op4
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_rt1gncnz.op4\tmp_rt1gncnz.op4.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : f829f0b4-a669-4e18-a789-4afa9e4e9bd0
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_rt1gncnz.op4
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace],
[Add-o365DistributionGroupMember, Add-o365DistributionGroupMember],
[Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission], [Add-o365MailboxLocation,
Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
This function collects the on premises distribution list configuration....
The on premises distribution list information was collected successfully.
This function collects the Office 365 distribution list configuration....
The operation couldn't be performed because object 'Migrate' couldn't be found on
'CO1PR06A002DC02.NAMPR06A002.prod.outlook.com'.
+ CategoryInfo : NotSpecified: (:) [Get-DistributionGroup], ManagementObjectNotFoundException
+ FullyQualifiedErrorId : [Server=MWHPR06MB2446,RequestId=bef7d47e-8d2d-4c75-a6d4-40264dee7723,TimeStamp=9/18/2018
7:17:47 PM] [FailureCategory=Cmdlet-ManagementObjectNotFoundException]
F71693B4,Microsoft.Exchange.Management.RecipientTasks.GetDistributionGroup
+ PSComputerName : outlook.office365.com
The operation couldn't be performed because object 'Migrate' couldn't be found on
'CO1PR06A002DC02.NAMPR06A002.prod.outlook.com'.
+ CategoryInfo : NotSpecified: (:) [Get-DistributionGroup], ManagementObjectNotFoundException
+ FullyQualifiedErrorId : [Server=MWHPR06MB2446,RequestId=bef7d47e-8d2d-4c75-a6d4-40264dee7723,TimeStamp=9/18/2018
7:17:47 PM] [FailureCategory=Cmdlet-ManagementObjectNotFoundException] F71693B4,Microsoft.Exchange.Management.Rec
ipientTasks.GetDistributionGroup
+ PSComputerName : outlook.office365.com
ERROR: The Office 365 distribution list information could not be collected - exiting.
ERROR: The operation couldn't be performed because object 'Migrate' couldn't be found on 'CO1PR06A002DC02.NAMPR06A002.prod.outlook.com'.
This function cleans up all powershell sessions....
All powershell sessions have been cleaned up successfully.
***************************************************************************************************
Finished processing at [09/18/2018 19:17:47].
***************************************************************************************************
===============================================================================
===============================================================================
Attempting to convert the distribution group Migrate without ignoring invalid managers or invalid members. The group contains another distribution or security group that is not mail enabled. An error is generated and the script stops.
PS C:\Scripts> .\ConvertDL.ps1 -dlToConvert Migrate -ignoreInvalidDLMember:$FALSE -ignoreInvalidManagedByMember:$FALSE
Directory: C:\Scripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 9/19/2018 2:11 PM 0 DLConversion.log
***************************************************************************************************
Started processing at [09/19/2018 14:11:07].
***************************************************************************************************
Running script version [1.0].
***************************************************************************************************
This function imports the on premises secured credentials file....
The on premises credentials file was imported successfully.
This function imports the Office 365 secured credentials file....
The Office 365 credentials file was imported successfully.
This function creates the powershell session to on premises Exchange....
The powershell session to on premises Exchange was created successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function creates the powershell session to AAD Connect....
The powershell session to AAD Connect was created successfully.
This function imports the powershell session to on premises Exchange....
WARNING: The names of some imported commands from the module 'tmp_rmsylwqo.1zq' include unapproved verbs that might
make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the
Verbose parameter. For a list of approved verbs, type Get-Verb.
Name : tmp_rmsylwqo.1zq
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_rmsylwqo.1zq\tmp_rmsylwqo.1zq.psm1
Description : Implicit remoting for https://webmail.domain.com/powershell
Guid : bb38fffd-b692-41c6-bb7f-ac49fe3a006b
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_rmsylwqo.1zq
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-ADPermission, Add-ADPermission], [Add-AvailabilityAddressSpace,
Add-AvailabilityAddressSpace], [Add-ContentFilterPhrase, Add-ContentFilterPhrase],
[Add-DatabaseAvailabilityGroupServer, Add-DatabaseAvailabilityGroupServer]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to on premises Exchange was imported successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_4korcvyz.ikr' include unapproved verbs that might
make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the
Verbose parameter. For a list of approved verbs, type Get-Verb.
Name : tmp_4korcvyz.ikr
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_4korcvyz.ikr\tmp_4korcvyz.ikr.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 1a019be1-7a24-410f-b38e-37dbcc282021
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_4korcvyz.ikr
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace],
[Add-o365DistributionGroupMember, Add-o365DistributionGroupMember],
[Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission], [Add-o365MailboxLocation,
Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
This function collects the on premises distribution list configuration....
The on premises distribution list information was collected successfully.
This function collects the Office 365 distribution list configuration....
The Office 365 distribution list information was collected successfully.
This function validates a cloud DLs saftey to migrate....
The DL is safe to proeced for conversion - source of authority is on-premises.
This function writes the on prmeises distribution list configuration to XML....
The on premises distribution list information was written to XML successfully.
This function writes the Office 365 distribution list configuration to XML....
The Office 365 distribution list information was written to XML successfully.
This function collections the on premises DL membership....
The DL membership was collected successfully.
This function writes the on prmeises distribution list membership configuration to XML....
The on premises distribution list membership information was written to XML successfully.
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
Begin processing a DL membership array.
This function builds an array of DL members or multivalued attributes....
ERROR: Domain Users
ERROR: A non-mail enabled or Office 365 object was found in the group.
ERROR: Script invoked without skipping invalid DL Member.
ERROR: The object must be removed or mail enabled.
ERROR: EXITING.
This function cleans up all powershell sessions....
All powershell sessions have been cleaned up successfully.
***************************************************************************************************
Finished processing at [09/19/2018 14:11:55].
***************************************************************************************************
===============================================================================
===============================================================================
Attempting to convert the distribution group Migrate without ignoring invalid managers or invalid members. The group contains another mail enabled distribution group that has not been migrated to Office 365. The script automatically stops as all sub groups need to be migrated prior to top level groups. The script was also run with –ignoreInvalidDLMembers TRUE – all non-mail enabled members or members not represented in Office 365 ar automatically ignored.
PS C:\Scripts> .\ConvertDL.ps1 -dlToConvert Migrate -ignoreInvalidDLMember:$TRUE -ignoreInvalidManagedByMember:$FALSE
Directory: C:\Scripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 9/19/2018 2:22 PM 0 DLConversion.log
***************************************************************************************************
Started processing at [09/19/2018 14:22:24].
***************************************************************************************************
Running script version [1.0].
***************************************************************************************************
This function imports the on premises secured credentials file....
The on premises credentials file was imported successfully.
This function imports the Office 365 secured credentials file....
The Office 365 credentials file was imported successfully.
This function creates the powershell session to on premises Exchange....
The powershell session to on premises Exchange was created successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function creates the powershell session to AAD Connect....
The powershell session to AAD Connect was created successfully.
This function imports the powershell session to on premises Exchange....
WARNING: The names of some imported commands from the module 'tmp_b11x0ew3.20l' include unapproved verbs that might
make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the
Verbose parameter. For a list of approved verbs, type Get-Verb.
Name : tmp_b11x0ew3.20l
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_b11x0ew3.20l\tmp_b11x0ew3.20l.psm1
Description : Implicit remoting for https://webmail.domain.com/powershell
Guid : 3c49dbae-b2af-428e-9be4-94ffc63126a4
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_b11x0ew3.20l
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-ADPermission, Add-ADPermission], [Add-AvailabilityAddressSpace,
Add-AvailabilityAddressSpace], [Add-ContentFilterPhrase, Add-ContentFilterPhrase],
[Add-DatabaseAvailabilityGroupServer, Add-DatabaseAvailabilityGroupServer]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to on premises Exchange was imported successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_ti245wqn.qju' include unapproved verbs that might
make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the
Verbose parameter. For a list of approved verbs, type Get-Verb.
Name : tmp_ti245wqn.qju
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_ti245wqn.qju\tmp_ti245wqn.qju.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 4c2cf1a7-0042-4595-9025-98728851b5ed
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_ti245wqn.qju
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace],
[Add-o365DistributionGroupMember, Add-o365DistributionGroupMember],
[Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission], [Add-o365MailboxLocation,
Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
This function collects the on premises distribution list configuration....
The on premises distribution list information was collected successfully.
This function collects the Office 365 distribution list configuration....
The Office 365 distribution list information was collected successfully.
This function validates a cloud DLs saftey to migrate....
The DL is safe to proeced for conversion - source of authority is on-premises.
This function writes the on prmeises distribution list configuration to XML....
The on premises distribution list information was written to XML successfully.
This function writes the Office 365 distribution list configuration to XML....
The Office 365 distribution list information was written to XML successfully.
This function collections the on premises DL membership....
The DL membership was collected successfully.
This function writes the on prmeises distribution list membership configuration to XML....
The on premises distribution list membership information was written to XML successfully.
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
Begin processing a DL membership array.
This function builds an array of DL members or multivalued attributes....
Processing mail enabled DL member:
Journal Mailbox
Processing mail enabled DL member:
Brian Murphy
Processing mail enabled DL member:
Timothy McMichael
Processing mail enabled DL member:
Migrate1
Processing mail enabled DL member:
Migrate2
Processing non-mailenabled DL member:
Team Manager
Processing mail enabled DL member:
Dynamic
The following object was intentionally skipped - object type not replicated to Exchange Online
Test Contact
Processing mail enabled DL member:
NotReplicated
The following SMTP address was added to the array:
journal@domain.org
The following SMTP address was added to the array:
brian@domain.com
The following SMTP address was added to the array:
tmcmichael@domain.org
The following SMTP address was added to the array:
Migrate1@domain.org
The following SMTP address was added to the array:
Migrate2@domain.org
The following SMTP address was added to the array:
teammanager@domain.org
The following SMTP address was added to the array:
Dynamic@domain.org
The following SMTP address was added to the array:
notreplicate@domain.org
The array was built successfully.
This function resets the Office 365 powershell sessions....
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_2cmzyxkm.gbx' include unapproved verbs that might
make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the
Verbose parameter. For a list of approved verbs, type Get-Verb.
Name : tmp_2cmzyxkm.gbx
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_2cmzyxkm.gbx\tmp_2cmzyxkm.gbx.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 455ba332-1b14-49d2-891d-1701e6fdea84
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_2cmzyxkm.gbx
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace],
[Add-o365DistributionGroupMember, Add-o365DistributionGroupMember],
[Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission], [Add-o365MailboxLocation,
Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
All Office 365 powershell sessions have been refreshed.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
journal@domain.org
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
brian@domain.com
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
tmcmichael@domain.org
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
Migrate1@domain.org
The recipients were found in Office 365.
This function tests to see if any sub groups or groups assigned permissions have been migrated....
Now testing group...
Migrate1@domain.org
False
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
Migrate2@domain.org
The recipients were found in Office 365.
This function tests to see if any sub groups or groups assigned permissions have been migrated....
Now testing group...
Migrate2@domain.org
True
ERROR: A distribution list was found as a sub-member or on a multi-valued attribute.
ERROR: The distribution list has not been migrated to Office 365 (DirSync Flag is TRUE)
ERROR: All sub lists or lists with permissions must be migrated before proceeding.
This function cleans up all powershell sessions....
All powershell sessions have been cleaned up successfully.
***************************************************************************************************
Finished processing at [09/19/2018 14:23:08].
***************************************************************************************************
===============================================================================
===============================================================================
Attempting to convert the distribution group Migrate without ignoring invalid managers or invalid members. The group contains a mailbox recipient that is not represented in Office 365. Although the ignoreInvalidDLMember is set to $TRUE – since the object should be a valid object present in Office 365 the script stops. (In this case the user is in an OU that is not synchronized to Office 365).
PS C:\Scripts> .\ConvertDL.ps1 -dlToConvert Migrate -ignoreInvalidDLMember:$TRUE -ignoreInvalidManagedByMember:$FALSE
Directory: C:\Scripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 9/19/2018 2:27 PM 0 DLConversion.log
***************************************************************************************************
Started processing at [09/19/2018 14:27:17].
***************************************************************************************************
Running script version [1.0].
***************************************************************************************************
This function imports the on premises secured credentials file....
The on premises credentials file was imported successfully.
This function imports the Office 365 secured credentials file....
The Office 365 credentials file was imported successfully.
This function creates the powershell session to on premises Exchange....
The powershell session to on premises Exchange was created successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function creates the powershell session to AAD Connect....
The powershell session to AAD Connect was created successfully.
This function imports the powershell session to on premises Exchange....
WARNING: The names of some imported commands from the module 'tmp_tvpecjxl.5ga' include unapproved verbs that might
make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the
Verbose parameter. For a list of approved verbs, type Get-Verb.
Name : tmp_tvpecjxl.5ga
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_tvpecjxl.5ga\tmp_tvpecjxl.5ga.psm1
Description : Implicit remoting for https://webmail.domain.com/powershell
Guid : 0985f143-cf95-4102-87d9-030408dd4bc8
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_tvpecjxl.5ga
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-ADPermission, Add-ADPermission], [Add-AvailabilityAddressSpace,
Add-AvailabilityAddressSpace], [Add-ContentFilterPhrase, Add-ContentFilterPhrase],
[Add-DatabaseAvailabilityGroupServer, Add-DatabaseAvailabilityGroupServer]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to on premises Exchange was imported successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_i4ivhhbw.2tu' include unapproved verbs that might
make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the
Verbose parameter. For a list of approved verbs, type Get-Verb.
Name : tmp_i4ivhhbw.2tu
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_i4ivhhbw.2tu\tmp_i4ivhhbw.2tu.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 86d813da-91e6-4e12-a369-577d696f60f4
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_i4ivhhbw.2tu
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace],
[Add-o365DistributionGroupMember, Add-o365DistributionGroupMember],
[Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission], [Add-o365MailboxLocation,
Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
This function collects the on premises distribution list configuration....
The on premises distribution list information was collected successfully.
This function collects the Office 365 distribution list configuration....
The Office 365 distribution list information was collected successfully.
This function validates a cloud DLs saftey to migrate....
The DL is safe to proeced for conversion - source of authority is on-premises.
This function writes the on prmeises distribution list configuration to XML....
The on premises distribution list information was written to XML successfully.
This function writes the Office 365 distribution list configuration to XML....
The Office 365 distribution list information was written to XML successfully.
This function collections the on premises DL membership....
The DL membership was collected successfully.
This function writes the on prmeises distribution list membership configuration to XML....
The on premises distribution list membership information was written to XML successfully.
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
Begin processing a DL membership array.
This function builds an array of DL members or multivalued attributes....
Processing mail enabled DL member:
Journal Mailbox
Processing mail enabled DL member:
Brian Murphy
Processing mail enabled DL member:
Timothy McMichael
Processing mail enabled DL member:
Migrate1
Processing non-mailenabled DL member:
Team Manager
Processing mail enabled DL member:
Dynamic
The following object was intentionally skipped - object type not replicated to Exchange Online
Test Contact
Processing mail enabled DL member:
NotReplicated
The following SMTP address was added to the array:
journal@domain.org
The following SMTP address was added to the array:
brian@domain.com
The following SMTP address was added to the array:
tmcmichael@domain.org
The following SMTP address was added to the array:
Migrate1@domain.org
The following SMTP address was added to the array:
teammanager@domain.org
The following SMTP address was added to the array:
Dynamic@domain.org
The following SMTP address was added to the array:
notreplicate@domain.org
The array was built successfully.
This function resets the Office 365 powershell sessions....
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_rysbip4g.faj' include unapproved verbs that might
make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the
Verbose parameter. For a list of approved verbs, type Get-Verb.
Name : tmp_rysbip4g.faj
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_rysbip4g.faj\tmp_rysbip4g.faj.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 95f11f7e-d775-4d52-8cb5-b4ba67dd7e35
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_rysbip4g.faj
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace],
[Add-o365DistributionGroupMember, Add-o365DistributionGroupMember],
[Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission], [Add-o365MailboxLocation,
Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
All Office 365 powershell sessions have been refreshed.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
journal@domain.org
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
brian@domain.com
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
tmcmichael@domain.org
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
Migrate1@domain.org
The recipients were found in Office 365.
This function tests to see if any sub groups or groups assigned permissions have been migrated....
Now testing group...
Migrate1@domain.org
False
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
teammanager@domain.org
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
Dynamic@domain.org
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
notreplicate@domain.org
The operation couldn't be performed because object 'notreplicate@domain.org' couldn't be found on
'CO1PR06A002DC02.NAMPR06A002.prod.outlook.com'.
+ CategoryInfo : NotSpecified: (:) [Get-Recipient], ManagementObjectNotFoundException
+ FullyQualifiedErrorId : [Server=MWHPR06MB2446,RequestId=f6a99890-192d-4630-b244-337d6c706c97,TimeStamp=9/19/2018
2:28:03 PM] [FailureCategory=Cmdlet-ManagementObjectNotFoundException] 5A65645E,Microsoft.Exchange.Management.Rec
ipientTasks.GetRecipient
+ PSComputerName : outlook.office365.com
ERROR: The recipients were not found in Office 365 - exiting.
ERROR: The operation couldn't be performed because object 'notreplicate@domain.org' couldn't be found on 'CO1PR06A002DC02.NAMPR06A002.prod.outlook.com'.
This function cleans up all powershell sessions....
All powershell sessions have been cleaned up successfully.
***************************************************************************************************
Finished processing at [09/19/2018 14:28:04].
***************************************************************************************************
===============================================================================
===============================================================================
Attempting to convert the distribution group Migrate without ignoring invalid managers or invalid members. The managed by attribute was set through Active Directory Users and Computers and a non-mail enabled object was selected. IgnoreInvalidManagedByMember is set to $FALSE – therefore the script ends because managed by cannot be established. The managedBy recipient would need to be removed or ignoreInvalidManagedByMember set to $TRUE.
PS C:\Scripts> .\ConvertDL.ps1 -dlToConvert Migrate -ignoreInvalidDLMember:$TRUE -ignoreInvalidManagedByMember:$FALSE
Directory: C:\Scripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 9/19/2018 2:35 PM 0 DLConversion.log
***************************************************************************************************
Started processing at [09/19/2018 14:35:02].
***************************************************************************************************
Running script version [1.0].
***************************************************************************************************
This function imports the on premises secured credentials file....
The on premises credentials file was imported successfully.
This function imports the Office 365 secured credentials file....
The Office 365 credentials file was imported successfully.
This function creates the powershell session to on premises Exchange....
The powershell session to on premises Exchange was created successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function creates the powershell session to AAD Connect....
The powershell session to AAD Connect was created successfully.
This function imports the powershell session to on premises Exchange....
WARNING: The names of some imported commands from the module 'tmp_u2zod0xm.0jy' include unapproved verbs that might
make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the
Verbose parameter. For a list of approved verbs, type Get-Verb.
Name : tmp_u2zod0xm.0jy
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_u2zod0xm.0jy\tmp_u2zod0xm.0jy.psm1
Description : Implicit remoting for https://webmail.domain.com/powershell
Guid : 2a209690-a2fd-4d0e-89e9-e52df5c5573e
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_u2zod0xm.0jy
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-ADPermission, Add-ADPermission], [Add-AvailabilityAddressSpace,
Add-AvailabilityAddressSpace], [Add-ContentFilterPhrase, Add-ContentFilterPhrase],
[Add-DatabaseAvailabilityGroupServer, Add-DatabaseAvailabilityGroupServer]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to on premises Exchange was imported successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_i53fb2xz.uuu' include unapproved verbs that might
make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the
Verbose parameter. For a list of approved verbs, type Get-Verb.
Name : tmp_i53fb2xz.uuu
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_i53fb2xz.uuu\tmp_i53fb2xz.uuu.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 20a82db7-7a4b-4034-95bc-6934f15f4c7b
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_i53fb2xz.uuu
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace],
[Add-o365DistributionGroupMember, Add-o365DistributionGroupMember],
[Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission], [Add-o365MailboxLocation,
Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
This function collects the on premises distribution list configuration....
The on premises distribution list information was collected successfully.
This function collects the Office 365 distribution list configuration....
The Office 365 distribution list information was collected successfully.
This function validates a cloud DLs saftey to migrate....
The DL is safe to proeced for conversion - source of authority is on-premises.
This function writes the on prmeises distribution list configuration to XML....
The on premises distribution list information was written to XML successfully.
This function writes the Office 365 distribution list configuration to XML....
The Office 365 distribution list information was written to XML successfully.
This function collections the on premises DL membership....
The DL membership was collected successfully.
This function writes the on prmeises distribution list membership configuration to XML....
The on premises distribution list membership information was written to XML successfully.
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
Begin processing a DL membership array.
This function builds an array of DL members or multivalued attributes....
Processing mail enabled DL member:
Journal Mailbox
Processing mail enabled DL member:
Brian Murphy
Processing mail enabled DL member:
Timothy McMichael
Processing mail enabled DL member:
Migrate1
Processing non-mailenabled DL member:
Team Manager
Processing mail enabled DL member:
Dynamic
The following object was intentionally skipped - object type not replicated to Exchange Online
Test Contact
The following SMTP address was added to the array:
journal@domain.org
The following SMTP address was added to the array:
brian@domain.com
The following SMTP address was added to the array:
tmcmichael@domain.org
The following SMTP address was added to the array:
Migrate1@domain.org
The following SMTP address was added to the array:
teammanager@domain.org
The following SMTP address was added to the array:
Dynamic@domain.org
The array was built successfully.
This function resets the Office 365 powershell sessions....
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_l1gyiiem.qhr' include unapproved verbs that might
make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the
Verbose parameter. For a list of approved verbs, type Get-Verb.
Name : tmp_l1gyiiem.qhr
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_l1gyiiem.qhr\tmp_l1gyiiem.qhr.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : ffbd7762-080a-48fa-88c0-d7cf5089d656
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_l1gyiiem.qhr
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace],
[Add-o365DistributionGroupMember, Add-o365DistributionGroupMember],
[Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission], [Add-o365MailboxLocation,
Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
All Office 365 powershell sessions have been refreshed.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
journal@domain.org
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
brian@domain.com
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
tmcmichael@domain.org
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
Migrate1@domain.org
The recipients were found in Office 365.
This function tests to see if any sub groups or groups assigned permissions have been migrated....
Now testing group...
Migrate1@domain.org
False
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
teammanager@domain.org
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
Dynamic@domain.org
The recipients were found in Office 365.
Begin processing a ManagedBy array.
This function builds an array of DL members or multivalued attributes....
ERROR: domain.local/Users/Test Manager
ERROR: A non-mail enabled or Office 365 object was found in ManagedBy.
ERROR: Script invoked without skipping invalid DL Member.
ERROR: The object must be removed or mail enabled.
ERROR: EXITING.
This function cleans up all powershell sessions....
All powershell sessions have been cleaned up successfully.
***************************************************************************************************
Finished processing at [09/19/2018 14:35:45].
***************************************************************************************************
===============================================================================
===============================================================================
Attempting to convert the distribution group Migrate without ignoring invalid managers or invalid members. The invoke includes both ignore values – allowing us to skip
PS C:\Scripts> .\ConvertDL.ps1 -dlToConvert Migrate -ignoreInvalidDLMember:$TRUE -ignoreInvalidManagedByMember:$TRUE
Directory: C:\Scripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 9/19/2018 2:54 PM 0 DLConversion.log
***************************************************************************************************
Started processing at [09/19/2018 14:54:59].
***************************************************************************************************
Running script version [1.0].
***************************************************************************************************
This function imports the on premises secured credentials file....
The on premises credentials file was imported successfully.
This function imports the Office 365 secured credentials file....
The Office 365 credentials file was imported successfully.
This function creates the powershell session to on premises Exchange....
The powershell session to on premises Exchange was created successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function creates the powershell session to AAD Connect....
The powershell session to AAD Connect was created successfully.
This function imports the powershell session to on premises Exchange....
WARNING: The names of some imported commands from the module 'tmp_nkc0cq2u.nri' include unapproved verbs that might make them less
discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of
approved verbs, type Get-Verb.
Name : tmp_nkc0cq2u.nri
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_nkc0cq2u.nri\tmp_nkc0cq2u.nri.psm1
Description : Implicit remoting for https://webmail.domain.com/powershell
Guid : 63c5f70a-44fa-47ed-95ef-749afa5a5d44
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_nkc0cq2u.nri
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-ADPermission, Add-ADPermission], [Add-AvailabilityAddressSpace, Add-AvailabilityAddressSpace],
[Add-ContentFilterPhrase, Add-ContentFilterPhrase], [Add-DatabaseAvailabilityGroupServer,
Add-DatabaseAvailabilityGroupServer]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to on premises Exchange was imported successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_qxckji5q.2cy' include unapproved verbs that might make them less
discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of
approved verbs, type Get-Verb.
Name : tmp_qxckji5q.2cy
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_qxckji5q.2cy\tmp_qxckji5q.2cy.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 4428cefd-6fa1-4ed9-9e49-baae4c962b8d
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_qxckji5q.2cy
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace], [Add-o365DistributionGroupMember,
Add-o365DistributionGroupMember], [Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission],
[Add-o365MailboxLocation, Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
This function collects the on premises distribution list configuration....
The on premises distribution list information was collected successfully.
This function collects the Office 365 distribution list configuration....
The Office 365 distribution list information was collected successfully.
This function validates a cloud DLs saftey to migrate....
The DL is safe to proeced for conversion - source of authority is on-premises.
This function writes the on prmeises distribution list configuration to XML....
The on premises distribution list information was written to XML successfully.
This function writes the Office 365 distribution list configuration to XML....
The Office 365 distribution list information was written to XML successfully.
This function collections the on premises DL membership....
The DL membership was collected successfully.
This function writes the on prmeises distribution list membership configuration to XML....
The on premises distribution list membership information was written to XML successfully.
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
Begin processing a DL membership array.
This function builds an array of DL members or multivalued attributes....
Processing mail enabled DL member:
Journal Mailbox
Processing mail enabled DL member:
Brian Murphy
Processing mail enabled DL member:
Timothy McMichael
Processing mail enabled DL member:
Migrate1
Processing non-mailenabled DL member:
Team Manager
Processing mail enabled DL member:
Dynamic
The following object was intentionally skipped - object type not replicated to Exchange Online
Test Contact
The following SMTP address was added to the array:
journal@domain.org
The following SMTP address was added to the array:
brian@domain.com
The following SMTP address was added to the array:
tmcmichael@domain.org
The following SMTP address was added to the array:
Migrate1@domain.org
The following SMTP address was added to the array:
teammanager@domain.org
The following SMTP address was added to the array:
Dynamic@domain.org
The array was built successfully.
This function resets the Office 365 powershell sessions....
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_1qvzwqrs.bux' include unapproved verbs that might make them less
discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of
approved verbs, type Get-Verb.
Name : tmp_1qvzwqrs.bux
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_1qvzwqrs.bux\tmp_1qvzwqrs.bux.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 87c6283a-a172-48b8-b31c-d5b966941fd5
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_1qvzwqrs.bux
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace], [Add-o365DistributionGroupMember,
Add-o365DistributionGroupMember], [Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission],
[Add-o365MailboxLocation, Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
All Office 365 powershell sessions have been refreshed.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
journal@domain.org
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
brian@domain.com
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
tmcmichael@domain.org
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
Migrate1@domain.org
The recipients were found in Office 365.
This function tests to see if any sub groups or groups assigned permissions have been migrated....
Now testing group...
Migrate1@domain.org
False
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
teammanager@domain.org
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
Dynamic@domain.org
The recipients were found in Office 365.
Begin processing a ManagedBy array.
This function builds an array of DL members or multivalued attributes....
The following object was intentionally skipped - object type not replicated to Exchange Online
domain.local/Users/Test Manager
Processing Managed By member:
The following SMTP address was added to the array:
bmoran@domain.org
The array was built successfully.
This function resets the Office 365 powershell sessions....
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_swg5mjit.e3j' include unapproved verbs that might make them less
discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of
approved verbs, type Get-Verb.
Name : tmp_swg5mjit.e3j
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_swg5mjit.e3j\tmp_swg5mjit.e3j.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : e769a4d9-fe17-4170-8634-ae2cecc1654c
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_swg5mjit.e3j
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace], [Add-o365DistributionGroupMember,
Add-o365DistributionGroupMember], [Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission],
[Add-o365MailboxLocation, Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
All Office 365 powershell sessions have been refreshed.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
bmoran@domain.org
The recipients were found in Office 365.
Begin processing a ModeratedBy array.
This function builds an array of DL members or multivalued attributes....
Processing ModeratedBy, GrantSendOnBehalfTo, AcceptMessagesOnlyFromSendersorMembers, RejectMessagesFromSendersOrMembers, or BypassModerationFromSendersOrMembers member:
The following SMTP address was added to the array:
tmcmichael@domain.org
The array was built successfully.
This function resets the Office 365 powershell sessions....
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_qt1dzaih.egn' include unapproved verbs that might make them less
discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of
approved verbs, type Get-Verb.
Name : tmp_qt1dzaih.egn
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_qt1dzaih.egn\tmp_qt1dzaih.egn.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 086dd663-c6d8-45b9-9836-7745e03dd255
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_qt1dzaih.egn
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace], [Add-o365DistributionGroupMember,
Add-o365DistributionGroupMember], [Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission],
[Add-o365MailboxLocation, Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
All Office 365 powershell sessions have been refreshed.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
tmcmichael@domain.org
The recipients were found in Office 365.
Begin processing a GrantSendOnBehalfTo array
This function builds an array of DL members or multivalued attributes....
Processing ModeratedBy, GrantSendOnBehalfTo, AcceptMessagesOnlyFromSendersorMembers, RejectMessagesFromSendersOrMembers, or BypassModerationFromSendersOrMembers member:
The following SMTP address was added to the array:
tmcmichael@domain.org
The array was built successfully.
This function resets the Office 365 powershell sessions....
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_asuxfjkc.4lz' include unapproved verbs that might make them less
discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of
approved verbs, type Get-Verb.
Name : tmp_asuxfjkc.4lz
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_asuxfjkc.4lz\tmp_asuxfjkc.4lz.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 53da7cd1-71c7-4510-aec5-d495c8c08987
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_asuxfjkc.4lz
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace], [Add-o365DistributionGroupMember,
Add-o365DistributionGroupMember], [Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission],
[Add-o365MailboxLocation, Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
All Office 365 powershell sessions have been refreshed.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
tmcmichael@domain.org
The recipients were found in Office 365.
Begin processing a AcceptMessagesOnlyFromSendersOrMembers array
This function builds an array of DL members or multivalued attributes....
Processing ModeratedBy, GrantSendOnBehalfTo, AcceptMessagesOnlyFromSendersorMembers, RejectMessagesFromSendersOrMembers, or BypassModerationFromSendersOrMembers member:
Processing ModeratedBy, GrantSendOnBehalfTo, AcceptMessagesOnlyFromSendersorMembers, RejectMessagesFromSendersOrMembers, or BypassModerationFromSendersOrMembers member:
The following SMTP address was added to the array:
bmoran@domain.org
The following SMTP address was added to the array:
Migrate1@domain.org
The array was built successfully.
This function resets the Office 365 powershell sessions....
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_v3xtlz25.hej' include unapproved verbs that might make them less
discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of
approved verbs, type Get-Verb.
Name : tmp_v3xtlz25.hej
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_v3xtlz25.hej\tmp_v3xtlz25.hej.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 019f80be-f9d7-4082-bf5b-955c059d170d
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_v3xtlz25.hej
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace], [Add-o365DistributionGroupMember,
Add-o365DistributionGroupMember], [Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission],
[Add-o365MailboxLocation, Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
All Office 365 powershell sessions have been refreshed.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
bmoran@domain.org
The recipients were found in Office 365.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
Migrate1@domain.org
The recipients were found in Office 365.
This function tests to see if any sub groups or groups assigned permissions have been migrated....
Now testing group...
Migrate1@domain.org
False
The recipients were found in Office 365.
Begin processing RejectMessagesFromSendersOrMembers array
This function builds an array of DL members or multivalued attributes....
Processing ModeratedBy, GrantSendOnBehalfTo, AcceptMessagesOnlyFromSendersorMembers, RejectMessagesFromSendersOrMembers, or BypassModerationFromSendersOrMembers member:
The following SMTP address was added to the array:
Migrate2@domain.org
The array was built successfully.
This function resets the Office 365 powershell sessions....
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_zmxben01.bs4' include unapproved verbs that might make them less
discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of
approved verbs, type Get-Verb.
Name : tmp_zmxben01.bs4
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_zmxben01.bs4\tmp_zmxben01.bs4.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : f13bceb8-a02e-4242-aef7-b63f0adb27d6
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_zmxben01.bs4
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace], [Add-o365DistributionGroupMember,
Add-o365DistributionGroupMember], [Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission],
[Add-o365MailboxLocation, Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
All Office 365 powershell sessions have been refreshed.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
Migrate2@domain.org
The recipients were found in Office 365.
This function tests to see if any sub groups or groups assigned permissions have been migrated....
Now testing group...
Migrate2@domain.org
False
The recipients were found in Office 365.
Begin processing BypassModerationFromSendersOrMembers array
This function builds an array of DL members or multivalued attributes....
Processing ModeratedBy, GrantSendOnBehalfTo, AcceptMessagesOnlyFromSendersorMembers, RejectMessagesFromSendersOrMembers, or BypassModerationFromSendersOrMembers member:
The following SMTP address was added to the array:
Migrate1@domain.org
The array was built successfully.
This function resets the Office 365 powershell sessions....
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_kqtp23ls.xwx' include unapproved verbs that might make them less
discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of
approved verbs, type Get-Verb.
Name : tmp_kqtp23ls.xwx
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_kqtp23ls.xwx\tmp_kqtp23ls.xwx.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 31e5aaad-348d-4513-bc4c-01e4cdfb5bc9
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_kqtp23ls.xwx
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace], [Add-o365DistributionGroupMember,
Add-o365DistributionGroupMember], [Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission],
[Add-o365MailboxLocation, Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
All Office 365 powershell sessions have been refreshed.
This function validates that all objects in the passed array exist in Office 365....
Testing user in Office 365...
Migrate1@domain.org
The recipients were found in Office 365.
This function tests to see if any sub groups or groups assigned permissions have been migrated....
Now testing group...
Migrate1@domain.org
False
The recipients were found in Office 365.
This function moves group to the non-sync OU
The group has been moved successfully.
Gets active directory domain controllers...
Succesfully obtained domain controllers.
Gets active directory domain...
Succesfully obtained domain.
Replicates the specified domain controller...
Syncing partition: DC=domain,DC=local
CALLBACK MESSAGE: SyncAll Finished.
SyncAll terminated with no errors.
Successfully replicated the domain controller.
Replicates the specified domain controller...
Syncing partition: DC=domain,DC=local
CALLBACK MESSAGE: SyncAll Finished.
SyncAll terminated with no errors.
Successfully replicated the domain controller.
Replicates the specified domain controller...
Syncing partition: DC=domain,DC=local
CALLBACK MESSAGE: SyncAll Finished.
SyncAll terminated with no errors.
Successfully replicated the domain controller.
Invoking AADConnect Delta Sync Remotely
This function triggers the ad connect process to sync changes...
PSComputerName : azure-adconnect.domain.local
RunspaceId : 764c99c8-6e48-415a-b319-9847cce42922
Result : Success
The AD Connect instance has been successfully initiated.
This function resets the Office 365 powershell sessions....
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_ffoelvjn.lws' include unapproved verbs that might make them less
discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of
approved verbs, type Get-Verb.
Name : tmp_ffoelvjn.lws
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_ffoelvjn.lws\tmp_ffoelvjn.lws.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 001ce520-4538-4f59-a5d4-710d8097b338
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_ffoelvjn.lws
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace], [Add-o365DistributionGroupMember,
Add-o365DistributionGroupMember], [Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission],
[Add-o365MailboxLocation, Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
All Office 365 powershell sessions have been refreshed.
Wating for original DL deletion from Office 365
Wating for original DL deletion from Office 365
Wating for original DL deletion from Office 365
The operation couldn't be performed because object 'Migrate@domain.org' couldn't be found on
'CO1PR06A002DC03.NAMPR06A002.prod.outlook.com'.
+ CategoryInfo : NotSpecified: (:) [Get-Recipient], ManagementObjectNotFoundException
+ FullyQualifiedErrorId : [Server=DM6PR06MB4026,RequestId=1f8fe3eb-6b61-4564-be56-c8af5d303a3a,TimeStamp=9/19/2018 3:00:02 PM] [Fail
ureCategory=Cmdlet-ManagementObjectNotFoundException] 24B7AD96,Microsoft.Exchange.Management.RecipientTasks.GetRecipient
+ PSComputerName : outlook.office365.com
This function resets the Office 365 powershell sessions....
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_3hao5uao.he4' include unapproved verbs that might make them less
discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of
approved verbs, type Get-Verb.
Name : tmp_3hao5uao.he4
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_3hao5uao.he4\tmp_3hao5uao.he4.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : f93cff62-1cce-4d83-bce9-991c54b5127e
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_3hao5uao.he4
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace], [Add-o365DistributionGroupMember,
Add-o365DistributionGroupMember], [Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission],
[Add-o365MailboxLocation, Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
All Office 365 powershell sessions have been refreshed.
This function creates the cloud DL with the minimum settings...
Universal
New! Office 365 Groups are the next generation of distribution lists.
Groups give teams shared tools for collaborating using email, files, a calendar, and more.
You can start right away using the New-UnifiedGroup cmdlet.
RunspaceId : 8ca722dd-6bea-470d-9fc9-36dc4c73148c
GroupType : Universal
SamAccountName : Migrate574691357943970
BypassNestedModerationEnabled : False
IsDirSynced : False
ManagedBy : {domainAdmin}
MemberJoinRestriction : Closed
MemberDepartRestriction : Open
MigrationToUnifiedGroupInProgress : False
ExpansionServer :
ReportToManagerEnabled : False
ReportToOriginatorEnabled : True
SendOofMessageToOriginatorEnabled : False
AcceptMessagesOnlyFrom : {}
AcceptMessagesOnlyFromDLMembers : {}
AcceptMessagesOnlyFromSendersOrMembers : {}
AddressListMembership : {\Default Global Address List, \All Recipients(VLV), \Groups(VLV), \All Groups(VLV)...}
AdministrativeUnits : {}
Alias : Migrate
ArbitrationMailbox : SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}
BypassModerationFromSendersOrMembers : {}
OrganizationalUnit : nampr06a002.prod.outlook.com/Microsoft Exchange Hosted
Organizations/domainSquad.onmicrosoft.com
CustomAttribute1 :
CustomAttribute10 :
CustomAttribute11 :
CustomAttribute12 :
CustomAttribute13 :
CustomAttribute14 :
CustomAttribute15 :
CustomAttribute2 :
CustomAttribute3 :
CustomAttribute4 :
CustomAttribute5 :
CustomAttribute6 :
CustomAttribute7 :
CustomAttribute8 :
CustomAttribute9 :
ExtensionCustomAttribute1 : {}
ExtensionCustomAttribute2 : {}
ExtensionCustomAttribute3 : {}
ExtensionCustomAttribute4 : {}
ExtensionCustomAttribute5 : {}
DisplayName : Migrate
EmailAddresses : {SMTP:Migrate@domain.org}
GrantSendOnBehalfTo : {}
ExternalDirectoryObjectId : d10bc5bd-01dc-4708-a98a-a9c2294149d6
HiddenFromAddressListsEnabled : False
LastExchangeChangedTime :
LegacyExchangeDN : /o=ExchangeLabs/ou=Exchange Administrative Group
(FYDIBOHF23SPDLT)/cn=Recipients/cn=002d4cd657784b01bccf8b85e5c35519-Migrate
MaxSendSize : Unlimited
MaxReceiveSize : Unlimited
ModeratedBy : {}
ModerationEnabled : False
PoliciesIncluded : {}
PoliciesExcluded : {{26491cfc-9e50-4857-861b-0cb8df22b5d7}}
EmailAddressPolicyEnabled : False
PrimarySmtpAddress : Migrate@domain.org
RecipientType : MailUniversalDistributionGroup
RecipientTypeDetails : MailUniversalDistributionGroup
RejectMessagesFrom : {}
RejectMessagesFromDLMembers : {}
RejectMessagesFromSendersOrMembers : {}
RequireSenderAuthenticationEnabled : True
SimpleDisplayName :
SendModerationNotifications : Always
UMDtmfMap : {emailAddress:6447283, lastNameFirstName:6447283, firstNameLastName:6447283}
WindowsEmailAddress : Migrate@domain.org
MailTip :
MailTipTranslations : {}
Identity : Migrate
Id : Migrate
IsValid : True
ExchangeVersion : 0.10 (14.0.100.0)
Name : Migrate
DistinguishedName : CN=Migrate,OU=domainSquad.onmicrosoft.com,OU=Microsoft Exchange Hosted
Organizations,DC=NAMPR06A002,DC=prod,DC=outlook,DC=com
ObjectCategory : NAMPR06A002.prod.outlook.com/Configuration/Schema/Group
ObjectClass : {top, group}
WhenChanged : 9/19/2018 3:00:16 PM
WhenCreated : 9/19/2018 3:00:16 PM
WhenChangedUTC : 9/19/2018 3:00:16 PM
WhenCreatedUTC : 9/19/2018 3:00:16 PM
OrganizationId : NAMPR06A002.prod.outlook.com/Microsoft Exchange Hosted
Organizations/domainSquad.onmicrosoft.com - NAMPR06A002.prod.outlook.com/ConfigurationUn
its/domainSquad.onmicrosoft.com/Configuration
Guid : b735426e-9551-4441-a710-803946ea176c
OriginatingServer : CO1PR06A002DC02.NAMPR06A002.prod.outlook.com
ObjectState : Unchanged
Distribution list created successfully in Exchange Online / Office 365.
This function updates the cloud DL settings to match on premise...
This does not update the multivalued attributes...
Distribution group properties updated successfully.
Processing DL Membership member to Office 365...
journal@domain.org
This function sets the multi-valued attributes
DLMembership
The mutilvalued attribute was updated successfully.
DLMembership
Processing DL Membership member to Office 365...
brian@domain.com
This function sets the multi-valued attributes
DLMembership
The mutilvalued attribute was updated successfully.
DLMembership
Processing DL Membership member to Office 365...
tmcmichael@domain.org
This function sets the multi-valued attributes
DLMembership
The mutilvalued attribute was updated successfully.
DLMembership
Processing DL Membership member to Office 365...
Migrate1@domain.org
This function sets the multi-valued attributes
DLMembership
The mutilvalued attribute was updated successfully.
DLMembership
Processing DL Membership member to Office 365...
teammanager@domain.org
This function sets the multi-valued attributes
DLMembership
The mutilvalued attribute was updated successfully.
DLMembership
Processing DL Membership member to Office 365...
Dynamic@domain.org
This function sets the multi-valued attributes
DLMembership
The mutilvalued attribute was updated successfully.
DLMembership
Processing Bypass Managed By member to Office 365...
bmoran@domain.org
This function sets the multi-valued attributes
ManagedBy
The mutilvalued attribute was updated successfully.
ManagedBy
Processing Moderated By member to Office 365...
tmcmichael@domain.org
This function sets the multi-valued attributes
ModeratedBy
The mutilvalued attribute was updated successfully.
ModeratedBy
Processing Grant Send On Behalf To Array member to Office 365...
tmcmichael@domain.org
This function sets the multi-valued attributes
GrantSendOnBehalfTo
The mutilvalued attribute was updated successfully.
GrantSendOnBehalfTo
Processing Accept Messages Only From Senders Or Members member to Office 365...
bmoran@domain.org
This function sets the multi-valued attributes
AcceptMessagesOnlyFromSendersOrMembers
The mutilvalued attribute was updated successfully.
AcceptMessagesOnlyFromSendersOrMembers
Processing Accept Messages Only From Senders Or Members member to Office 365...
Migrate1@domain.org
This function sets the multi-valued attributes
AcceptMessagesOnlyFromSendersOrMembers
The mutilvalued attribute was updated successfully.
AcceptMessagesOnlyFromSendersOrMembers
Processing Reject Messages From Senders Or Members member to Office 365...
Migrate2@domain.org
This function sets the multi-valued attributes
RejectMessagesFromSendersOrMembers
The mutilvalued attribute was updated successfully.
RejectMessagesFromSendersOrMembers
Processing Bypass Moderation From Senders Or Members member to Office 365...
Migrate1@domain.org
This function sets the multi-valued attributes
BypassModerationFromSendersOrMembers
The mutilvalued attribute was updated successfully.
BypassModerationFromSendersOrMembers
This function resets the Office 365 powershell sessions....
This function removes the Office 365 powershell sessions....
All powershell sessions have been cleaned up successfully.
This function creates the powershell session to Office 365....
The powershell session to Office 365 was created successfully.
This function imports the powershell session to Office 365....
WARNING: The names of some imported commands from the module 'tmp_w0eyp2oc.n3o' include unapproved verbs that might make them less
discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of
approved verbs, type Get-Verb.
Name : tmp_w0eyp2oc.n3o
Path : C:\Users\admin.domain\AppData\Local\Temp\tmp_w0eyp2oc.n3o\tmp_w0eyp2oc.n3o.psm1
Description : Implicit remoting for https://outlook.office365.com/powershell-liveID/
Guid : 1d8d7722-910f-43e6-ad74-8a8bb4e0a2e8
Version : 1.0
ModuleBase : C:\Users\admin.domain\AppData\Local\Temp\tmp_w0eyp2oc.n3o
ModuleType : Script
PrivateData : {ImplicitRemoting}
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Add-o365AvailabilityAddressSpace, Add-o365AvailabilityAddressSpace], [Add-o365DistributionGroupMember,
Add-o365DistributionGroupMember], [Add-o365MailboxFolderPermission, Add-o365MailboxFolderPermission],
[Add-o365MailboxLocation, Add-o365MailboxLocation]...}
ExportedVariables : {}
NestedModules : {}
The powershell session to Office 365 was imported successfully.
All Office 365 powershell sessions have been refreshed.
This function collects the new office 365 distribution list configuration....
The on premises distribution list information was collected successfully.
This function collects the new office 365 distribution list member configuration....
The on premises distribution list information was collected successfully.
This function writes the new Office 365 distribution list configuration to XML....
The on premises distribution list information was written to XML successfully.
This function writes the new Office 365 distribution list membership configuration to XML....
The on premises distribution list information was written to XML successfully.
This function cleans up all powershell sessions....
All powershell sessions have been cleaned up successfully.
===============================================================================