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

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

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

Se è stata completata una migrazione di Exchange a fasi per migrare le cassette postali locali di Exchange 2007 dell'organizzazione a Office 365 e si vuole gestire gli utenti basati sul cloud dall'organizzazione locale, usando Active Directory, occorre convertire le cassette postali locali in utenti abilitati alla posta elettronica. Perché? 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. Questo succede perché, durante il processo di migrazione, la proprietà TargetAddress nella cassetta postale locale viene popolata con l'indirizzo di routing remoto della cassetta postale nel cloud. Ciò significa che gli utenti devono connettersi alle cassette postali nel cloud per accedere alla posta elettronica.

Questo comportamento produce due problemi:

  • Se una persona usa Microsoft Outlook per aprire la cassetta postale, il servizio di individuazione automatica prova comunque a connettersi alla cassetta postale locale e l'utente non riuscirà a connettersi alla propria cassetta postale nel cloud. Se sono presenti utenti dei quali non è stata eseguita la migrazione nel cloud, non è possibile indirizzare il record CNAME di individuazione automatica al cloud fino a quando non sarà stata eseguita la migrazione di tutti gli utenti.

  • Se un'organizzazione rimuove Exchange dopo che è stata eseguita la migrazione di tutte le cassette postali locali nel cloud, le informazioni degli utenti relative alla messaggistica nella cassetta postale nel cloud andranno perse. Lo strumento di sincronizzazione della directory dei Microsoft Online Services rimuove i dati (ad esempio gli indirizzi proxy) dall'oggetto della cassetta postale nel cloud perché la cassetta postale locale non esiste più e lo strumento non può confrontarla con la cassetta postale nel cloud corrispondente.

La soluzione consiste nel convertire la cassetta postale locale in un utente abilitato alla posta elettronica nell'organizzazione locale dopo aver eseguito la migrazione della cassetta postale dell'utente nel cloud. Quando si converte una cassetta postale locale in un utente abilitato alla posta elettronica:

  • Gli indirizzi proxy da una cassetta postale basata sul cloud vengono copiati nel nuovo utente abilitato alla posta elettronica; se si rimuove Exchange, gli indirizzi proxy verranno comunque mantenuti in Active Directory.

  • Le proprietà dell'utente abilitato alla posta elettronica consentono allo Strumento di sincronizzazione di Azure Active Directory di associare l'utente abilitato alla posta elettronica alla relativa cassetta postale nel cloud.

  • 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

Gli script seguenti consentono di raccogliere informazioni sulle cassette postali basate sul cloud e di convertire le cassette postali di Exchange 2007 in utenti abilitati alla posta elettronica.

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

Copiare lo script seguente e assegnarvi il nome file ExportO365UserInfo.ps1.

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 Office 365 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 Office 365 Powershell Session." -ForeGroundColor Green
return
}
$session | Remove-PSSession
}
Write-Host "Please enter your Office 365 credentials" -ForeGroundColor Green
$cred = Get-Credential
$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $cred -Authentication Basic -AllowRedirection
$importresults = Import-PSSession -Prefix "Cloud" $s
}
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-Premise Email addresses for the users
foreach($user in $MailBoxList)
{
$UserInfo = New-Object System.Object
$CloudEmailAddress = $user.EmailAddresses | ?{($_ -match 'onmicrosoft') -and ($_ -cmatch '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 che segue converte le cassette postali locali di Exchange 2007 in utenti abilitati alla posta elettronica. Eseguire questo script dopo avere eseguito lo script per raccogliere informazioni dalle cassette postali nel cloud.

Copiare lo script sottostante in un file TXT e quindi salvare il file con il nome file Exchange2007MBtoMEU.ps1.

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-Premise and Cloud Legacy DN's as x500 proxies. If not present add them.
$CloudLegacyDNPresent = $false
$LegacyDNPresent = $false
foreach($Proxy in $UserInfo.ProxyAddresses)
{
if(("x500:$UserInfo.CloudLegacyDN") -ieq $Proxy)
{
$CloudLegacyDNPresent = $true
}
if(("x500:$UserInfo.LegacyDN") -ieq $Proxy)
{
$LegacyDNPresent = $true
}
}
if(-not $CloudLegacyDNPresent)
{
$X500Proxy = "x500:" + $UserInfo.CloudLegacyDN
Write-Host "Adding $X500Proxy to EmailAddresses" -ForegroundColor Green
$UserInfo.ProxyAddresses += $X500Proxy
}
if(-not $LegacyDNPresent)
{
$X500Proxy = "x500:" + $UserInfo.LegacyDN
Write-Host "Adding $X500Proxy to EmailAddresses" -ForegroundColor Green
$UserInfo.ProxyAddresses += $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 = @()
foreach($Address in $Mailbox.EmailAddresses)
{
$ProxyAddresses += $Address
}
$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 eseguire le operazioni seguenti:

    1. Fare clic su Azione > Trova

    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 seguenti proprietà dell'utente abilitato alla posta elettronica vengano popolate con le informazioni corrette.

    • legacyExchangeDN

    • mail

    • msExchMailboxGuid

    • proxyAddresses

    • targetAddress

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa al programma Office Insider

Queste informazioni sono risultate utili?

Grazie per i tuoi commenti e suggerimenti

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×