Share via


Convertir des boîtes aux lettres Exchange 2007 en utilisateurs à extension messagerie dans Exchange Online

Une fois que vous avez effectué une migration intermédiaire, convertissez les boîtes aux lettres locales en utilisateurs à extension messagerie afin que les utilisateurs locaux puissent se connecter automatiquement à leurs boîtes aux lettres cloud.

Pourquoi convertir des boîtes aux lettres en utilisateurs à extension messagerie ?

Vous devez convertir les boîtes aux lettres locales migrées en utilisateurs à extension messagerie (MEU) afin de pouvoir gérer les utilisateurs cloud de votre organisation locale à l’aide d’Active Directory.

Après la migration d'une boîte aux lettres vers le cloud dans le cadre d'une migration Exchange intermédiaire, deux événements se produisent :

  • Un utilisateur dispose d'une boîte aux lettres locale et d'une boîte aux lettres cloud.
  • Les messages envoyés à la boîte aux lettres locale sont transférés vers la boîte aux lettres cloud. Cela se produit car pendant le processus de migration, la propriété TargetAddress de la boîte aux lettres locale contient l’adresse de routage distante de la boîte aux lettres cloud. Les utilisateurs doivent se connecter à leurs boîtes aux lettres cloud pour accéder à leur messagerie.

Ce comportement entraîne les problèmes suivants :

  • L’utilisateur ne pourra pas se connecter à sa boîte aux lettres cloud dans Microsoft Outlook. Le service de découverte automatique dans l’organisation locale tente toujours de se connecter à sa boîte aux lettres locale. Vous ne pouvez pas pointer votre enregistrement CNAME de découverte automatique locale vers le cloud tant que tous les utilisateurs n’ont pas été migrés.

  • Les informations utilisateur liées à la messagerie sur les boîtes aux lettres cloud sont perdues si vous désactivez Exchange une fois que toutes les boîtes aux lettres ont été migrées vers le cloud. La synchronisation d’annuaires supprime les données de l’objet de boîte aux lettres cloud (par exemple, les adresses proxy), car la boîte aux lettres locale n’existe plus. La synchronisation d’annuaires ne peut pas faire correspondre les données à la boîte aux lettres cloud correspondante.

La solution consiste à convertir la boîte aux lettres locale de l’utilisateur en utilisateur à extension messagerie (MEU) après la migration de la boîte aux lettres vers le cloud. Lorsque vous convertissez une boîte aux lettres locale en meU, les actions suivantes se produisent :

  • Les adresses proxy de la boîte aux lettres basée sur le cloud sont copiées dans la nouvelle MEU. Si vous désactivez Exchange, ces adresses proxy sont toujours conservées dans Active Directory.
  • Les propriétés de meU permettent à la synchronisation d’annuaires de faire correspondre l’utilisateur meu à sa boîte aux lettres cloud correspondante.
  • Le service de découverte automatique utilise l'utilisateur à extension messagerie pour connecter Outlook à la boîte aux lettres cloud une fois que l'utilisateur a créé un profil Outlook.

Scripts PowerShell pour la création d'utilisateurs à extension messagerie

Utilisez les scripts de cette section pour collecter des informations sur les boîtes aux lettres cloud et convertir les boîtes aux lettres Exchange 2007 en meU.

Le script PowerShell collecte des informations à partir de vos boîtes aux lettres cloud et les enregistre dans un fichier CSV. Exécutez ce script en premier.

Copiez le script dans le Bloc-notes et enregistrez le fichier en tant que ExportO365UserInfo.ps1.

Remarque

  • Avant d’exécuter le script PowerShell, vous devez installer le module PowerShell Exchange Online. Pour obtenir des instructions, consultez Installer et gérer le module PowerShell Exchange Online. Le module utilise l’authentification moderne.

  • En règle générale, vous pouvez utiliser le script comme si votre organisation faisait partie de Microsoft 365 ou Microsoft 365 GCC. Si votre organisation fait partie de Office 365 Allemagne, Microsoft 365 GCC High, ou Microsoft 365 DoD, vous devez modifier Connect-ExchangeOnlinela ligne du script. Plus précisément, vous devez utiliser le paramètre ExchangeEnvironmentName et la valeur appropriée pour votre type d’organisation. Pour plus d'informations, consultez les exemples dans Connexion à Exchange Online PowerShell.

Param($migrationCSVFileName = "migration.csv")
function O365Logon
{
    #Check for current open O365 sessions and allow the admin to either use the existing session or create a new one
    $session = Get-PSSession | ?{$_.ConfigurationName -eq 'Microsoft.Exchange'}
    if($session -ne $null)
    {
        $a = Read-Host "An open session to Exchange Online PowerShell already exists. Do you want to use this session?  Enter y to use the open session, anything else to close and open a fresh session."
        if($a.ToLower() -eq 'y')
        {
            Write-Host "Using existing Exchange Online Powershell session." -ForeGroundColor Green
            return
        }
        Disconnect-ExchangeOnline -Confirm:$false
    }
    Import-Module ExchangeOnlineManagement
    Connect-ExchangeOnline -Prefix "Cloud"
}
function Main
{
    #Verify the migration CSV file exists
    if(!(Test-Path $migrationCSVFileName))
    {
        Write-Host "File $migrationCSVFileName does not exist." -ForegroundColor Red
        Exit
    }
    #Import user list from migration.csv file
    $MigrationCSV = Import-Csv $migrationCSVFileName

    #Get mailbox list based on email addresses from CSV file
    $MailBoxList = $MigrationCSV | %{$_.EmailAddress} | Get-CloudMailbox
    $Users = @()

    #Get LegacyDN, Tenant, and On-Premises Email addresses for the users
    foreach($user in $MailBoxList)
    {
        $UserInfo = New-Object System.Object

        $CloudEmailAddress = $user.EmailAddresses | ?{($_ -match 'onmicrosoft') -and ($_ -match 'smtp:')}
        if ($CloudEmailAddress.Count -gt 1)
        {
            $CloudEmailAddress = $CloudEmailAddress[0].ToString().ToLower().Replace('smtp:', '')
            Write-Host "$user returned more than one cloud email address. Using $CloudEmailAddress" -ForegroundColor Yellow
        }
        else
        {
            $CloudEmailAddress = $CloudEmailAddress.ToString().ToLower().Replace('smtp:', '')
        }

        $UserInfo | Add-Member -Type NoteProperty -Name LegacyExchangeDN -Value $user.LegacyExchangeDN
        $UserInfo | Add-Member -Type NoteProperty -Name CloudEmailAddress -Value $CloudEmailAddress
        $UserInfo | Add-Member -Type NoteProperty -Name OnPremiseEmailAddress -Value $user.PrimarySMTPAddress.ToString()
        $UserInfo | Add-Member -Type NoteProperty -Name MailboxGUID -Value $user.ExchangeGUID
        $Users += $UserInfo
    }
    #Check for existing csv file and overwrite if needed
    if(Test-Path ".\cloud.csv")
    {
        $delete = Read-Host "The file cloud.csv already exists in the current directory. Do you want to delete it?  Enter y to delete, anything else to exit this script."
        if($delete.ToString().ToLower() -eq 'y')
        {
            Write-Host "Deleting existing cloud.csv file" -ForeGroundColor Red
            Remove-Item ".\cloud.csv"
        }
        else
        {
            Write-Host "Will NOT delete current cloud.csv file. Exiting script." -ForeGroundColor Green
            Exit
        }
    }
    $Users | Export-CSV -Path ".\cloud.csv" -notype
    (Get-Content ".\cloud.csv") | %{$_ -replace '"', ''} | Set-Content ".\cloud.csv" -Encoding Unicode
    Write-Host "CSV File Successfully Exported to cloud.csv" -ForeGroundColor Green
}
O365Logon
Main

Le script Visual Basic convertit les boîtes aux lettres Exchange 2003 locales en meU. Exécutez ce script après avoir exécuté le script PowerShell pour collecter des informations à partir des boîtes aux lettres cloud.

Copiez le script dans le Bloc-notes et enregistrez le fichier en tant que Exchange2007MBtoMEU.vbs.

param($DomainController = [String]::Empty)
function Main
{
    #Script Logic flow
    #1. Pull User Info from cloud.csv file in the current directory
    #2. Lookup AD Info (DN, mail, proxyAddresses, and legacyExchangeDN) using the SMTP address from the CSV file
    #3. Save existing proxyAddresses
    #4. Add existing legacyExchangeDN's to proxyAddresses
    #5. Delete Mailbox
    #6. Mail-Enable the user using the cloud email address as the targetAddress
    #7. Disable RUS processing
    #8. Add proxyAddresses and mail attribute back to the object
    #9. Add msExchMailboxGUID from cloud.csv to the user object (for offboarding support)

    if($DomainController -eq [String]::Empty)
    {
        Write-Host "You must supply a value for the -DomainController switch" -ForegroundColor Red
        Exit
    }

    $CSVInfo = Import-Csv ".\cloud.csv"
    foreach($User in $CSVInfo)
    {
        Write-Host "Processing user" $User.OnPremiseEmailAddress -ForegroundColor Green
        Write-Host "Calling LookupADInformationFromSMTPAddress" -ForegroundColor Green
        $UserInfo = LookupADInformationFromSMTPAddress($User)

        #Check existing proxies for On-Premises and Cloud Legacy DN's as x500 proxies. If not present add them.
        if($UserInfo.ProxyAddresses -notcontains ("X500:"+$UserInfo.CloudLegacyDN))
        {
            $X500Proxy = "x500:" + $UserInfo.CloudLegacyDN
            Write-Host "Adding $X500Proxy to EmailAddresses" -ForegroundColor Green
            $UserInfo.ProxyAddresses.Add($X500Proxy)
        }
        if($UserInfo.ProxyAddresses -notcontains ("X500:"+$UserInfo.LegacyDN))
        {
            $X500Proxy = "x500:" + $UserInfo.LegacyDN
            Write-Host "Adding $X500Proxy to EmailAddresses" -ForegroundColor Green
            $UserInfo.ProxyAddresses.Add($X500Proxy)
        }

        #Disable Mailbox
        Write-Host "Disabling Mailbox" -ForegroundColor Green
        Disable-Mailbox -Identity $UserInfo.OnPremiseEmailAddress -DomainController $DomainController -Confirm:$false

        #Mail Enable
        Write-Host "Enabling Mailbox" -ForegroundColor Green
        Enable-MailUser  -Identity $UserInfo.Identity -ExternalEmailAddress $UserInfo.CloudEmailAddress -DomainController $DomainController

        #Disable RUS
        Write-Host "Disabling RUS" -ForegroundColor Green
        Set-MailUser -Identity $UserInfo.Identity -EmailAddressPolicyEnabled $false -DomainController $DomainController

        #Add Proxies and Mail
        Write-Host "Adding EmailAddresses and WindowsEmailAddress" -ForegroundColor Green
        Set-MailUser -Identity $UserInfo.Identity -EmailAddresses $UserInfo.ProxyAddresses -WindowsEmailAddress $UserInfo.Mail -DomainController $DomainController

        #Set Mailbox GUID. Need to do this via S.DS as Set-MailUser doesn't expose this property.
        $ADPath = "LDAP://" + $DomainController + "/" + $UserInfo.DistinguishedName
        $ADUser = New-Object -TypeName System.DirectoryServices.DirectoryEntry -ArgumentList $ADPath
        $MailboxGUID = New-Object -TypeName System.Guid -ArgumentList $UserInfo.MailboxGUID
        [Void]$ADUser.psbase.invokeset('msExchMailboxGUID',$MailboxGUID.ToByteArray())
        Write-Host "Setting Mailbox GUID" $UserInfo.MailboxGUID -ForegroundColor Green
        $ADUser.psbase.CommitChanges()

        Write-Host "Migration Complete for" $UserInfo.OnPremiseEmailAddress -ForegroundColor Green
        Write-Host ""
        Write-Host ""
    }
}

function LookupADInformationFromSMTPAddress($CSV)
{
    $Mailbox = Get-Mailbox $CSV.OnPremiseEmailAddress -ErrorAction SilentlyContinue

    if($Mailbox -eq $null)
    {
        Write-Host "Get-Mailbox failed for" $CSV.OnPremiseEmailAddress -ForegroundColor Red
        continue
    }

    $UserInfo = New-Object System.Object

    $UserInfo | Add-Member -Type NoteProperty -Name OnPremiseEmailAddress -Value $CSV.OnPremiseEmailAddress
    $UserInfo | Add-Member -Type NoteProperty -Name CloudEmailAddress -Value $CSV.CloudEmailAddress
    $UserInfo | Add-Member -Type NoteProperty -Name CloudLegacyDN -Value $CSV.LegacyExchangeDN
    $UserInfo | Add-Member -Type NoteProperty -Name LegacyDN -Value $Mailbox.LegacyExchangeDN
    $ProxyAddresses = New-Object Microsoft.Exchange.Data.ProxyAddressCollection
    $ProxyAddresses = $Mailbox.EmailAddresses
    $UserInfo | Add-Member -Type NoteProperty -Name ProxyAddresses -Value $ProxyAddresses
    $UserInfo | Add-Member -Type NoteProperty -Name Mail -Value $Mailbox.WindowsEmailAddress
    $UserInfo | Add-Member -Type NoteProperty -Name MailboxGUID -Value $CSV.MailboxGUID
    $UserInfo | Add-Member -Type NoteProperty -Name Identity -Value $Mailbox.Identity
    $UserInfo | Add-Member -Type NoteProperty -Name DistinguishedName -Value (Get-User $Mailbox.Identity).DistinguishedName

    $UserInfo
}
Main

Étapes de configuration pour convertir des boîtes aux lettres locales en utilisateurs à extension messagerie

Suivez ces étapes pour achever le processus.

  1. Copiez ExportO365UserInfo.ps1, Exchange2007MBtoMEU.ps1 et le fichier CSV utilisé pour exécuter le lot de migration dans le même annuaire sur votre serveur local.

  2. Renommez le fichier CSV de migration migration.csv.

  3. Exécutez la commande suivante dans l'Environnement de ligne de commande Exchange Management Shell. Le script suppose que le fichier CSV se trouve dans le même répertoire et qu’il est nommé migration.csv.

    .\ExportO365UserInfo.ps1
    

    Vous devez utiliser la session existante ou en ouvrir une nouvelle.

  4. Tapez n, puis appuyez sur Entrée pour ouvrir une nouvelle session.

    Le script s'exécute et enregistre le fichier Cloud.csv dans l'annuaire de travail en cours.

  5. Entrez les informations d'identification d'administrateur pour votre organisation cloud, puis cliquez sur OK.

  6. Exécutez la commande suivante dans une nouvelle session de l'environnement de ligne de commande Exchange Management Shell. Cette commande suppose que les fichiers ExportO365UserInfo.ps1 et Cloud.csv se trouvent dans le même annuaire.

    .\Exchange2007MBtoMEU.ps1 <FQDN of on-premises domain controller>
    

    Par exemple :

    .\Exchange2007MBtoMEU.ps1 DC1.contoso.com
    

    Le script convertit les boîtes aux lettres locales en utilisateurs à extension messagerie pour tous les contacts répertoriés dans le fichier Cloud.csv.

  7. Vérifiez que les nouveaux utilisateurs à extension messagerie ont été créés. Dans Utilisateurs et ordinateurs Active Directory, procédez comme suit :

    1. Cliquez sur Action>Rechercher.

    2. Cliquez sur l’onglet Exchange .

    3. Sélectionnez Afficher uniquement les destinataires Exchange, puis Utilisateurs avec une adresse e-mail externe.

    4. Cliquez sur Rechercher maintenant.

      Les boîtes aux lettres converties en utilisateurs à extension messagerie sont répertoriées sous Résultats de la recherche.

  8. Utilisez Utilisateurs et ordinateurs Active Directory, ADSI Edit ou Ldp.exe pour vérifier que les propriétés MEU suivantes sont remplies avec les informations correctes.

    • legacyExchangeDN
    • mail
    • msExchMailboxGuid
    • proxyAddresses
    • targetAddress