Invoke-Office365SafetyCheck.ps1

<#
    .SYNOPSIS
 
    This function confirms that the distribution list specified and found in Office 365 is DirSynced=TRUE
     
    .DESCRIPTION
 
    This function confirms that the distribution list specified and found in Office 365 is DirSynced=TRUE
 
    .PARAMETER O365DLConfiguration
 
    The DL configuration obtained by the service.
 
    .PARAMETER azureADDLConfiguration
 
    .OUTPUTS
 
    No returns.
 
    .EXAMPLE
 
    invoke-office365safetycheck -o365dlconfiguration o365dlconfiguration -azureADDLConfiguration azureDLConfiguration
 
    #>

    Function Invoke-Office365SafetyCheck
     {
        [cmdletbinding()]

        Param
        (
            [Parameter(Mandatory = $true)]
            $o365dlconfiguration,
            [Parameter(Mandatory = $true)]
            $azureADDLConfiguration,
            [Parameter(Mandatory = $false)]
            $isCloudOnly = $FALSE
        )

        #Output all parameters bound or unbound and their associated values.

        write-functionParameters -keyArray $MyInvocation.MyCommand.Parameters.Keys -parameterArray $PSBoundParameters -variableArray (Get-Variable -Scope Local -ErrorAction Ignore)

        Out-LogFile -string "********************************************************************************"
        Out-LogFile -string "BEGIN INVOKE-OFFICE365SAFETYCHECK"
        Out-LogFile -string "********************************************************************************"

        #Comapre the isDirSync attribute.

        if ($isCloudOnly -eq $FALSE)
        {
            try 
            {
                Out-LogFile -string ("Distribution list isDirSynced = "+$o365dlconfiguration.isDirSynced)

                if ($o365dlconfiguration.isDirSynced -eq $FALSE)
                {
                    out-logfile -string $o365DLConfiguration.isDirSynced
                    out-logfile -string "Exchange Online is reporting that the distribution list is not directory synced. Testing azure..."

                    if ($azureADDLConfiguration.OnPremisesSyncEnabled -eq $FALSE)
                    {
                        out-logfile -string $azureADDLConfiguration.OnPremisesSyncEnabled
                        Out-LogFile -string "The distribution list requested is not directory synced and cannot be migrated." -isError:$TRUE
                    }
                    elseif ($azureADDLConfiguration.dirSyncEnabled -eq $null)
                    {
                        out-logfile -string "DirSyncEnabled NULL in AzureAD - not synced."
                        out-logfile -string "The distribution list requested is not directory synced and cannot be migrated." -isError:$TRUE
                    }
                    else 
                    {
                        out-logfile -string $azureADDLConfiguration.OnPremisesSyncEnabled
                        out-logfile -string "Azure is reporting the list is directory synchronized. Allow the migration to proceed."
                    }
                }
                else 
                {
                    out-logfile -string ("Exchange: "+$o365dlconfiguration.isDirSynced)
                    out-logfile -string ("Azure: "+$azureADDLConfiguration.OnPremisesSyncEnabled)
                    Out-LogFile -string "The distribution list requested is directory synced."
                }
            }
            catch 
            {
                Out-LogFile -string $_ -isError:$TRUE
            }
        }
        else
        {
            out-logfile -string "Testing to ensure dir sync is disabled and group is a mail enabled security or distribution."

            try 
            {
                Out-LogFile -string ("Distribution list isDirSynced = "+$o365dlconfiguration.isDirSynced)

                if ($o365dlconfiguration.isDirSynced -eq $TRUE)
                {
                    out-logfile -string $o365DLConfiguration.isDirSynced
                    out-logfile -string "Exchange Online is reporting that the distribution list is directory synced. Testing azure..."

                    if ($azureADDLConfiguration.OnPremisesSyncEnabled -eq $TRUE)
                    {
                        out-logfile -string $azureADDLConfiguration.OnPremisesSyncEnabled
                        Out-LogFile -string "The distribution list requested is directory synced and cannot be converted." -isError:$TRUE
                    }
                }
                else 
                {
                    out-logfile -string ("Exchange: "+$o365dlconfiguration.isDirSynced)
                    out-logfile -string ("Azure: "+$azureADDLConfiguration.OnPremisesSyncEnabled)
                    Out-LogFile -string "The distribution list requested is directory synced."
                }
            }
            catch 
            {
                Out-LogFile -string $_ -isError:$TRUE
            }
        }
        
        if (($office365DLConfiguration.recipientType -ne "MailUniversalDistributionGroup") -and ($office365DLConfiguration.recipientType -ne "MailUniversalSecurityGroup"))
        {
            out-logfile -string "The email address specified does not belong to a mail universal distribution group or mail universal security group." -isError:$TRUE
        }
        else
        {
            out-logfile -string "The recipient in Office 365 is a valid type proceed with migration or conversion."
        }
        
        Out-LogFile -string "END INVOKE-OFFICE365SAFETYCHECK"
        Out-LogFile -string "********************************************************************************"
    }