Konvertieren von Exchange 2007-Postfächern in E-Mail-aktivierte Benutzer in Exchange Online

Nachdem Sie eine mehrstufige Migration abgeschlossen haben, konvertieren Sie die lokalen Postfächer in E-Mail-aktivierte Benutzer, damit die lokalen Benutzer automatisch eine Verbindung mit ihren Cloudpostfächern herstellen können.

Gründe zum Konvertieren von Postfächern in E-Mail-aktivierte Benutzer

Sie müssen die migrierten lokalen Postfächer in E-Mail-aktivierte Benutzer (MEUs) konvertieren, damit Sie cloudbasierte Benutzer aus Ihrer lokalen Organisation mithilfe von Active Directory verwalten können.

Zwei Dinge geschehen, nachdem ein Postfach bei einer mehrstufigen Exchange-Migration in die Cloud migriert wurde:

  • Ein Benutzer verfügt über ein lokales Postfach und ein Cloudpostfach.
  • An das lokale Postfach des Benutzers gesendete E-Mails werden an sein Cloudpostfach weitergeleitet. Dies geschieht, weil während des Migrationsprozesses die TargetAddress-Eigenschaft des lokalen Postfachs die Remoteroutingadresse des Cloudpostfachs enthält. Benutzer müssen eine Verbindung mit ihren Cloudpostfächern herstellen, um auf ihre E-Mail zugreifen zu können.

Dieses Verhalten führt zu den folgenden Problemen:

  • Der Benutzer kann keine Verbindung mit dem Cloudpostfach in Microsoft Outlook herstellen. Der AutoErmittlungsdienst in der lokalen Organisation versucht weiterhin, eine Verbindung mit dem lokalen Postfach herzustellen. Sie können Ihren lokalen AutoErmittlungs-CNAME-Eintrag erst dann auf die Cloud verweisen, wenn alle Benutzer migriert wurden.

  • Messagingbezogene Benutzerinformationen zu Cloudpostfächern gehen verloren, wenn Sie Exchange außer Betrieb setzen, nachdem alle Postfächer in die Cloud migriert wurden. Die Verzeichnissynchronisierung entfernt Daten aus dem Cloudpostfachobjekt (z. B. Proxyadressen), da das lokale Postfach nicht mehr vorhanden ist. die Verzeichnissynchronisierung kann die Daten nicht mit dem entsprechenden Cloudpostfach abgleichen.

Die Lösung besteht darin, das lokale Postfach des Benutzers in einen E-Mail-aktivierten Benutzer (MEU) zu konvertieren, nachdem das Postfach in die Cloud migriert wurde. Wenn Sie ein lokales Postfach in ein MEU konvertieren, werden die folgenden Aktionen ausgeführt:

  • Die Proxyadressen aus dem cloudbasierten Postfach werden in die neue MEU kopiert. Wenn Sie Exchange außer Betrieb setzen, werden diese Proxyadressen weiterhin in Active Directory beibehalten.
  • Die Eigenschaften des MEU ermöglichen die Verzeichnissynchronisierung, um die MEU mit dem entsprechenden Cloudpostfach abzugleichen.
  • Der AutoErmittlungsdienst verwendet den E-Mail-aktivierten Benutzer, um Outlook mit dem Cloudpostfach zu verbinden, nachdem der Benutzer ein neues Outlook-Profil erstellt hat.

PowerShell-Skripts zum Erstellen E-Mail-aktivierter Benutzer

Verwenden Sie die Skripts in diesem Abschnitt, um Informationen zu den cloudbasierten Postfächern zu sammeln und die Exchange 2007-Postfächer in MEUs zu konvertieren.

Das PowerShell-Skript sammelt Informationen aus Ihren Cloudpostfächern und speichert sie in einer CSV-Datei. Führen Sie dieses Skript zuerst aus.

Kopieren Sie das Skript in Editor, und speichern Sie die Datei als ExportO365UserInfo.ps1.

Hinweis

  • Bevor Sie das PowerShell-Skript ausführen, müssen Sie das Exchange Online PowerShell-Modul installieren. Anweisungen finden Sie unter Installieren und Verwalten des Exchange Online PowerShell-Moduls. Das Modul verwendet die moderne Authentifizierung.

  • Normalerweise können Sie das Skript unverändert verwenden, wenn Ihr Unternehmen Microsoft 365 oder Microsoft 365 GCC verwendet. Wenn Ihr Unternehmen Office 365 Deutschland, Microsoft 365 GCC High oder Microsoft 365 DoD verwendet, müssen Sie die Connect-ExchangeOnline-Zeile im Skript bearbeiten. Insbesondere müssen Sie den Parameter ExchangeEnvironmentName verwenden und den entsprechenden Wert für Ihren Organisationstyp. Weitere Informationen finden Sie in den Beispielen unter Verbinden mit 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

Das Visual Basic-Skript konvertiert lokale Exchange 2003-Postfächer in MEUs. Führen Sie dieses Skript aus, nachdem Sie das PowerShell-Skript ausgeführt haben, um Informationen aus den Cloudpostfächern zu sammeln.

Kopieren Sie das Skript in Editor, und speichern Sie die Datei als 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

Einrichten von Schritten zum Konvertieren lokaler Postfächer in E-Mail-aktivierte Benutzer

Gehen Sie wie folgt vor, um den Vorgang abzuschließen.

  1. Kopieren Sie "ExportO365UserInfo.ps1", "Exchange2007MBtoMEU.ps1" und die zum Ausführen des Migrationsbatches verwendete CSV-Datei auf Ihrem lokalen Server in dasselbe Verzeichnis.

  2. Benennen Sie die CSV-Migrationsdatei in "migration.csv" um.

  3. Führen Sie in der Exchange-Verwaltungsshell den folgenden Befehl aus. Bei dem Skript wird davon ausgegangen, dass sich die CSV-Datei in demselben Verzeichnis befindet und die Datei den Namen "migration.csv" aufweist.

    .\ExportO365UserInfo.ps1
    

    Sie werden aufgefordert, die vorhandene Sitzung zu verwenden oder eine neue Sitzung zu öffnen.

  4. Geben Sie n ein, und drücken Sie EINGABE, um eine neue Sitzung zu öffnen.

    Das Skript wird ausgeführt, das die Datei "Cloud.csv" im aktuellen Arbeitsverzeichnis speichert.

  5. Geben Sie die Anmeldeinformationen eines Administrators für Ihre cloudbasierte Organisation ein, und klicken Sie dann auf OK.

  6. Führen Sie in einer neuen Sitzung der Exchange-Verwaltungsshell den folgenden Befehl aus. Bei diesem Befehl wird davon ausgegangen, dass sich "ExportO365UserInfo.ps1" und "Cloud.csv" in demselben Verzeichnis befinden.

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

    Beispiel:

    .\Exchange2007MBtoMEU.ps1 DC1.contoso.com
    

    Das Skript konvertiert lokale Postfächer für alle in "Cloud.csv" enthaltenen Benutzer in E-Mail-aktivierte Benutzer.

  7. Überprüfen Sie, ob die neuen E-Mail-aktivierten Benutzer erstellt wurden. Führen Sie in Active Directory-Benutzer und -Computer die folgenden Schritte aus:

    1. Klicken Sie auf Aktionssuche>.

    2. Klicken Sie auf die Registerkarte Exchange .

    3. Wählen Sie Nur Exchange-Empfänger anzeigen und dann Benutzer mit externer E-Mail-Adresse aus.

    4. Klicken Sie auf Jetzt suchen.

      Die Postfächer, die in E-Mail-aktivierte Benutzer konvertiert wurden, werden unter Suchergebnisse aufgelistet.

  8. Verwenden Sie Active Directory-Benutzer und -Computer, ADSI-Bearbeitung oder Ldp.exe, um zu überprüfen, ob die folgenden MEU-Eigenschaften mit den richtigen Informationen aufgefüllt sind.

    • Legacyexchangedn
    • mail
    • Msexchmailboxguid
    • proxyAddresses
    • Targetaddress