Exchange Onlineで Exchange 2007 メールボックスをメールが有効なユーザーに変換する
段階的な移行が完了したら、オンプレミスのメールボックスをメールが有効なユーザーに変換して、オンプレミスのユーザーがクラウド メールボックスに自動的に接続できるようにします。
メールボックスをメールが有効なユーザーに変換する理由
移行されたオンプレミスメールボックスをメール対応ユーザー (MEU) に変換して、Active Directory を使用してオンプレミス組織のクラウドベースのユーザーを管理できるようにする必要があります。
Exchange の段階的な移行でメールボックスをクラウドに移行すると、2 つのことが起こります。
- ユーザーは、オンプレミス メールボックスとクラウド メールボックスを持ちます。
- ユーザーのオンプレミス メールボックスに送信されたメールは、そのユーザーのクラウド メールボックスに転送されます。 これは、移行プロセス中に、オンプレミス メールボックスの TargetAddress プロパティにクラウド メールボックスのリモート ルーティング アドレスが含まれているために発生します。 ユーザーが電子メールにアクセスするには、クラウド メールボックスに接続する必要があります。
この動作により、次の問題が発生します。
ユーザーは、Microsoft Outlook でクラウド メールボックスに接続できません。 オンプレミス組織の自動検出サービスは、引き続きオンプレミスのメールボックスへの接続を試みます。 すべてのユーザーが移行されるまで、オンプレミスの自動検出 CNAME レコードをクラウドにポイントすることはできません。
すべてのメールボックスがクラウドに移行された後に Exchange を使用停止すると、クラウド メールボックスのメッセージング関連のユーザー情報が失われます。 オンプレミスのメールボックスが存在しなくなったため、ディレクトリ同期によってクラウド メールボックス オブジェクト (プロキシ アドレスなど) からデータが削除されます。 ディレクトリ同期は、対応するクラウド メールボックスにデータを一致させるできません。
解決策は、メールボックスがクラウドに移行された後、ユーザーのオンプレミス メールボックスをメールが有効なユーザー (MEU) に変換することです。 オンプレミスのメールボックスを MEU に変換すると、次のアクションが実行されます。
- クラウドベースのメールボックスのプロキシ アドレスは、新しい MEU にコピーされます。 Exchange を使用停止した場合でも、これらのプロキシ アドレスは Active Directory に保持されます。
- MEU のプロパティを使用すると、ディレクトリ同期を MEU と対応するクラウド メールボックスと一致させることができます。
- ユーザーが新しい Outlook プロファイルを作成すると、自動検出サービスは、MEU を使用して Outlook をクラウド メールボックスに接続します。
MEU を作成する PowerShell スクリプト
このセクションのスクリプトを使用して、クラウドベースのメールボックスに関する情報を収集し、Exchange 2007 メールボックスを MEU に変換します。
PowerShell スクリプトは、クラウド メールボックスから情報を収集し、CSV ファイルに保存します。 このスクリプトを最初に実行します。
スクリプトをメモ帳にコピーし、ファイルをExportO365UserInfo.ps1として保存します。
注:
PowerShell スクリプトを実行する前に、Exchange Online PowerShell モジュールをインストールする必要があります。 手順については、「Exchange Online PowerShell モジュールのインストールと保守」を参照してください。 モジュールでは、先進認証が使用されます。
Microsoft 365 または Microsoft 365 GCC 組織の場合は、通常、スクリプト as-is を使用できます。 Office 365 Germany、Microsoft 365 GCC High、または Microsoft 365 DoD 組織の場合、スクリプトの
Connect-ExchangeOnline
行を編集する必要があります。 具体的には、ExchangeEnvironmentName パラメーターと、所属組織の種類に適した値を使用する必要があります。 詳細については、「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
Visual Basic スクリプトは、オンプレミスの Exchange 2003 メールボックスを MEU に変換します。 PowerShell スクリプトを実行してクラウド メールボックスから情報を収集した後、このスクリプトを実行します。
スクリプトをメモ帳にコピーし、ファイルを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
オンプレミス メールボックスを MEU に変換するセットアップ手順
次の手順でプロセスを完了します。
ExportO365UserInfo.ps1、Exchange2007MBtoMEU.ps1、移行バッチの実行に使用した CSV ファイルを、オンプレミス サーバーの同じディレクトリにコピーします。
移行の CSV ファイル名を migration.csv に変更します。
Exchange 管理シェル で次のコマンドを実行します。 スクリプトは、CSV ファイルが同じディレクトリ内にあり、migration.csvという名前であることを前提としています。
.\ExportO365UserInfo.ps1
既存のセッションを使用するか、新しいセッションを開くかを確認するメッセージが表示されます。
「n」と入力し、 Enter キーを押して新しいセッションを開きます。
スクリプトを実行すると、現在の作業ディレクトリに Cloud.csv ファイルが保存されます。
クラウドベースの組織の管理者の資格情報を入力し、[ OK] をクリックします。
新しい Exchange 管理シェル セッションで次のコマンドを実行します。 このコマンドは、ExportO365UserInfo.ps1 と Cloud.csv が同じディレクトリにあることを前提としています。
.\Exchange2007MBtoMEU.ps1 <FQDN of on-premises domain controller>
次に例を示します。
.\Exchange2007MBtoMEU.ps1 DC1.contoso.com
スクリプトによって、Cloud.csv に含まれているすべてのユーザーのオンプレミス メールボックスが MEU に変換されます。
新しい MEU が作成されたことを確認します。 Active Directory ユーザーとコンピューターで、次の手順を実行します。
[アクション検索] をクリックします>。
[ Exchange ] タブをクリックします。
[ Exchange 受信者のみを表示する] を選び、[ 外部メール アドレスを持つユーザー] を選びます。
[ 検索開始] をクリックします。
MEU に変換されたメールボックスの一覧が [ 検索結果] に表示されます。
Active Directory ユーザーとコンピューター、ADSI Edit、または Ldp.exe を使用して、次の MEU プロパティに正しい情報が入力されていることを確認します。
- Legacyexchangedn
- msExchMailboxGuid
- proxyAddresses
- targetAddress