Compartilhar via


Converter caixas de correio do Exchange 2007 em usuários habilitados para email em Exchange Online

Depois de concluir uma migração em etapas, converta as caixas de correio locais em usuários habilitados para email para que os usuários locais possam se conectar automaticamente às suas caixas de correio de nuvem.

Por que converter as caixas de correio em usuários habilitados para email?

Você precisa converter as caixas de correio locais migradas em MEUs (usuários habilitados para email) para que você possa gerenciar usuários baseados em nuvem de sua organização local usando o Active Directory.

Depois que uma caixa de correio é migrada para a nuvem em uma migração em estágios do Exchange, acontecem duas coisas:

  • Um usuário tem uma caixa de correio local e uma caixa de correio na nuvem.
  • Os emails enviados para a caixa de correio local do usuário são encaminhados para a caixa de correio na nuvem. Isso acontece porque, durante o processo de migração, a propriedade TargetAddress na caixa de correio local contém o endereço de roteamento remoto da caixa de correio da nuvem. Os usuários precisam se conectar às suas caixas de correio de nuvem para acessar seus emails.

Esse comportamento resulta nos seguintes problemas:

  • O usuário não poderá se conectar à caixa de correio de nuvem no Microsoft Outlook. O serviço autodiscover na organização local ainda tenta se conectar à caixa de correio local. Você não pode apontar seu registro CNAME de descoberta automática local para a nuvem até que todos os usuários tenham sido migrados.

  • As informações de usuário relacionadas a mensagens em caixas de correio de nuvem serão perdidas se você desativar o Exchange depois que todas as caixas de correio tiverem sido migradas para a nuvem. A sincronização de diretório remove dados do objeto de caixa de correio de nuvem (por exemplo, endereços proxy), porque a caixa de correio local não existe mais. A sincronização do diretório não pode corresponder os dados à caixa de correio de nuvem correspondente.

A solução é converter a caixa de correio local do usuário em um MEU (usuário habilitado para email) depois que a caixa de correio tiver sido migrada para a nuvem. Quando você converte uma caixa de correio local em um MEU, as seguintes ações ocorrem:

  • Os endereços proxy da caixa de correio baseada em nuvem são copiados para o novo MEU. Se você desativar o Exchange, esses endereços proxy ainda serão mantidos no Active Directory.
  • As propriedades do MEU permitem que a sincronização de diretório corresponda ao MEU com sua caixa de correio de nuvem correspondente.
  • O serviço Descoberta Automática usa o MEU para conectar o Outlook à caixa de correio de nuvem depois que o usuário cria um novo perfil do Outlook.

Scripts do PowerShell para criar MEUs

Use os scripts nesta seção para coletar informações sobre as caixas de correio baseadas em nuvem e converter as caixas de correio do Exchange 2007 em MEUs.

O script do PowerShell coleta informações de suas caixas de correio de nuvem e as salva em um arquivo CSV. Execute primeiro este script.

Copie o script no Bloco de Notas e salve o arquivo como ExportO365UserInfo.ps1.

Observação

  • Antes de executar o script do PowerShell, você precisa instalar o módulo Exchange Online PowerShell. Para obter instruções, consulte Instalar e manter o módulo Exchange Online PowerShell. O módulo usa autenticação moderna.

  • Normalmente, é possível usar o script como está se sua organização for Microsoft 365 ou Microsoft 365 GCC. Se a organização for Office 365 Alemanha, Microsoft 365 GCC High ou Microsoft 365 DoD, você precisará editar a linha Connect-ExchangeOnlineno script. Especificamente, você precisa usar o parâmetro ExchangeEnvironmentName e o valor apropriado para o seu tipo de organização. Para saber mais, confira Conectar-se ao Exchange Online usando o PowerShell Remoto.

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

O script do Visual Basic converte caixas de correio locais do Exchange 2003 em MEUs. Execute esse script depois de executar o script do PowerShell para coletar informações das caixas de correio da nuvem.

Copie o script no Bloco de Notas e salve o arquivo como 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

Etapas de configuração para converter as caixas de correio locais em MEUs

Siga estas etapas para concluir o processo.

  1. Copie ExportO365UserInfo.ps1, Exchange2007MBtoMEU.ps1 e o arquivo CSV usado para executar o lote de migração para o mesmo diretório do seu servidor local.

  2. Renomeie o arquivo CSV de migração para migration.csv.

  3. No Shell de Gerenciamento do Exchange, execute o seguinte comando. O script pressupõe que o arquivo CSV esteja no mesmo diretório e nomeado como migration.csv.

    .\ExportO365UserInfo.ps1
    

    Você deverá usar a sessão existente ou abrir uma nova sessão.

  4. Digite n e pressione Enter para abrir uma nova sessão.

    O script é executado e, em seguida, salva o arquivo Cloud.csv na pasta de trabalho atual.

  5. Insira as credenciais de administrador para a sua organização na nuvem e, em seguida, clique em OK.

  6. Execute o seguinte comando em uma nova sessão do Shell de Gerenciamento do Exchange. Esse comando supõe que ExportO365UserInfo.ps1 e Cloud.csv estejam na mesma pasta.

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

    Por exemplo:

    .\Exchange2007MBtoMEU.ps1 DC1.contoso.com
    

    O script converte caixas de correio locais em MEUs para todos os usuários incluídos no Cloud.csv.

  7. Verifique se os novos MEUs foram criados. Em Usuários e Computadores do Active Directory, siga as seguintes etapas:

    1. Clique em Localizar ações>.

    2. Clique na guia Exchange .

    3. Selecione Mostrar apenas destinatários do Exchangee, então, selecione Usuários com endereço de email externo.

    4. Clique em Localizar agora.

      As caixas de correio que foram convertidas em MEUs são listadas nos Resultados da pesquisa.

  8. Use Usuários e Computadores do Active Directory, EDIÇÃO ADSI ou Ldp.exe para verificar se as propriedades MEU a seguir estão preenchidas com as informações corretas.

    • Legacyexchangedn
    • mail
    • msExchMailboxGuid
    • proxyAddresses
    • Targetaddress