Convertire le cassette postali di Exchange 2007 in utenti abilitati alla posta elettronica in Exchange Online

Dopo aver completato una migrazione a fasi, convertire le cassette postali locali in utenti abilitati alla posta elettronica in modo che gli utenti locali possano connettersi automaticamente alle cassette postali cloud.

Perché convertire le cassette postali in utenti abilitati alla posta elettronica?

È necessario convertire le cassette postali locali di cui è stata eseguita la migrazione in utenti abilitati alla posta elettronica (MEU) in modo da poter gestire gli utenti basati sul cloud dall'organizzazione locale usando Active Directory.

Dopo una migrazione a fasi di Exchange di una cassetta postale nel cloud si verifica quanto segue:

  • Un utente ha una cassetta postale locale e una cassetta postale nel cloud.
  • La posta elettronica inviata alla cassetta postale locale dell'utente viene inoltrata alla cassetta postale nel cloud. Ciò si verifica perché durante il processo di migrazione, la proprietà TargetAddress nella cassetta postale locale contiene l'indirizzo di routing remoto della cassetta postale cloud. Gli utenti devono connettersi alle cassette postali cloud per accedere alla posta elettronica.

Questo comportamento causa i problemi seguenti:

  • L'utente non sarà in grado di connettersi alla propria cassetta postale cloud in Microsoft Outlook. Il servizio di individuazione automatica nell'organizzazione locale tenta ancora di connettersi alla cassetta postale locale. Non è possibile indirizzare il record CNAME di individuazione automatica locale al cloud fino a quando non è stata eseguita la migrazione di tutti gli utenti.

  • Le informazioni utente relative alla messaggistica nelle cassette postali cloud vengono perse se si deseleziona Exchange dopo la migrazione di tutte le cassette postali al cloud. La sincronizzazione della directory rimuove i dati dall'oggetto cassetta postale cloud, ad esempio gli indirizzi proxy, perché la cassetta postale locale non esiste più. la sincronizzazione della directory non può corrispondere ai dati alla cassetta postale cloud corrispondente.

La soluzione consiste nel convertire la cassetta postale locale dell'utente in un utente abilitato alla posta elettronica (MEU) dopo la migrazione della cassetta postale nel cloud. Quando si converte una cassetta postale locale in una MEU, si verificano le azioni seguenti:

  • Gli indirizzi proxy della cassetta postale basata sul cloud vengono copiati nel nuovo MEU. Se si deseleziona Exchange, questi indirizzi proxy vengono ancora conservati in Active Directory.
  • Le proprietà del MEU consentono la sincronizzazione della directory in modo che corrisponda al MEU con la cassetta postale cloud corrispondente.
  • Il servizio di individuazione automatica usa l'utente abilitato alla posta elettronica per connettere Outlook alla cassetta postale nel cloud dopo che l'utente avrà creato un nuovo profilo di Outlook.

Script di PowerShell per creare utenti abilitati alla posta elettronica

Usare gli script in questa sezione per raccogliere informazioni sulle cassette postali basate sul cloud e per convertire le cassette postali di Exchange 2007 in MEU.

Lo script di PowerShell raccoglie le informazioni dalle cassette postali cloud e le salva in un file CSV. Eseguire prima questo script.

Copiare lo script nel Blocco note e salvare il file come ExportO365UserInfo.ps1.

Nota

  • Prima di eseguire lo script di PowerShell, è necessario installare il modulo Exchange Online PowerShell. Per istruzioni, vedere Installare e gestire il modulo Exchange Online PowerShell. Il modulo usa l'autenticazione moderna.

  • In genere, si possono usare gli script così come sono se la propria organizzazione è Microsoft 365 o Microsoft 365 GCC. Se l’organizzazione è Office 365 Germania, Microsoft 365 GCC High o Microsoft 365 DoD è necessario modificare la rigaConnect-ExchangeOnline nello script. In particolare, è necessario usare il parametro ExchangeEnvironmentName e il valore appropriato per il tipo di organizzazione. Per ulteriori informazioni, vedere gli esempi in Connessione a 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

Lo script di Visual Basic converte le cassette postali di Exchange 2003 locali in MEU. Eseguire questo script dopo aver eseguito lo script di PowerShell per raccogliere informazioni dalle cassette postali cloud.

Copiare lo script nel Blocco note e salvare il file come 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

Procedura di configurazione per convertire le cassette postali locali in utenti abilitati alla posta elettronica

Seguire questa procedura per completare il processo.

  1. Copiare ExportO365UserInfo.ps1, Exchange2007MBtoMEU.ps1 e il file CSV usato per eseguire il batch di migrazione nella stessa directory del server locale.

  2. Rinominare il file CSV di migrazione in migration.csv.

  3. In Exchange Management Shell eseguire il comando seguente. Lo script presuppone che il file CSV si trovi nella stessa directory e che sia denominato migration.csv.

    .\ExportO365UserInfo.ps1
    

    Verrà richiesto di usare la sessione esistente o di aprire una nuova sessione.

  4. Digitare n e premere INVIO per aprire una nuova sessione.

    Lo script viene eseguito e quindi salva il file Cloud.csv nella cartella di lavoro corrente.

  5. Immettere le credenziali di amministratore dell'organizzazione basata sul cloud e quindi fare clic su OK.

  6. Eseguire il comando seguente in una nuova sessione di Exchange Management Shell. Questo comando presuppone che ExportO365UserInfo.ps1 e Cloud.csv si trovino nella stessa directory.

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

    Ad esempio:

    .\Exchange2007MBtoMEU.ps1 DC1.contoso.com
    

    Lo script converte le cassette postali locali in utenti abilitati alla posta elettronica per tutti gli utenti inclusi nel file Cloud.csv.

  7. Verificare di avere creato i nuovi utenti abilitati alla posta elettronica. In Utenti e computer di Active Directory seguire questa procedura:

    1. Fare clic su Ricerca azioni>.

    2. Fare clic sulla scheda Exchange .

    3. Selezionare Mostra solo destinatari di Exchange, quindi selezionare Utenti con indirizzi e-mail esterni.

    4. Fare clic su Trova ora.

      Le cassette postali convertite in utenti abilitati alla posta elettronica vengono elencate in Risultati della ricerca.

  8. Usare Utenti e computer di Active Directory, ADSI Edit o Ldp.exe per verificare che le proprietà MEU seguenti siano popolate con le informazioni corrette.

    • Legacyexchangedn
    • mail
    • msExchMailboxGuid
    • Proxyaddresses
    • Targetaddress