メインコンテンツにスキップ

PowerShell で複数のメールボックスをコピーする

PowerShell を使用して、マッピングファイルから複数の Microsoft 365 メールボックスをバッチ単位でコピーする方法について説明します。

注:

PowerShell 統合には、ShareGate Migrate の Pro または Enterprise サブスクリプションが必要です。Essentials プランでは利用できません。

2026年1月末、Microsoft は IDCRL cookie の非推奨化を開始しました。これにより、ほとんどの Microsoft 365 テナントでは、パラメーター -Browser および -ModernAuth を使用する Browser および Modern authentication の方法のみが機能するようになります。詳細については、Microsoft 365 の "Other user" 認証における重要な変更を参照してください。

PowerShell を使用して、マッピングファイルから複数の Microsoft 365 メールボックスをコピーします。この方法では、メールボックスをバッチ単位で処理し、各バッチの後にレポートをエクスポートできるため、大規模なメールボックス移行が管理しやすくなります。

操作手順

メールボックスの移行には、マッピングファイルと、そのファイルを読み込んでメールボックスをバッチ単位でコピーする PowerShell スクリプトが必要です。

マッピングファイルを設定する

マッピングファイルは、各移行元メールボックスと移行先を対応付ける CSV ファイルです。移行を実行する前に設定し、対応関係を確認・調整してください。

PowerShell を使用する場合

次のスクリプトを実行すると、マッピングファイルが自動的に生成されます。ShareGate Migrate は、表示名によって移行元と移行先のメールボックスを照合します。

$source = Connect-MicrosoftOnline
$destination = Connect-MicrosoftOnline

Export-MailboxMappings -SourceConnection $source -DestinationConnection $destination -Path "C:\MyMappings\"

更新する "C:\MyMappings\" を、マッピングファイルを保存したいドライブ上のフォルダーに変更してください。使用できるパラメーターについては、Export-MailboxMappingsを参照してください。

移行先に一致するものがないメールボックスは、CSV 内で空欄のままになります。続行する前に、ファイルを確認し、不足している対応関係を入力してください。

ShareGate Migrate から行う場合

  1. Copy mailboxes - マッピングの手順に従って操作を設定し、マッピング画面まで進みます。

  2. Export mappings アイコンをクリックします。

  3. CSV ファイルを保存し、そのパスを控えておきます。

マッピングファイルを用意したら、それを開いて対応関係を確認します。移行を実行する前に、CSV を編集して移行元と移行先の対応を追加、削除、調整できます。

スクリプトを作成する

次のスクリプトを、任意の PowerShell アプリケーションにコピーして貼り付けます。$mappings$csv 内の -Path の値を、前のセクションで保存したマッピングファイルを指すように変更してください。

$sourceConnection = Connect-MicrosoftOnline
$destinationConnection = Connect-MicrosoftOnline

$options = New-MailboxCopyOptions -IncludeEmails
$mappings = Import-MailboxMappings -SourceConnection $sourceConnection -DestinationConnection $destinationConnection -Path "C:\MyMappings\SharegateMailboxesMapping.csv"

$csv = Import-Csv -Path "C:\MyMappings\SharegateMailboxesMapping.csv"

# Initialize the starting index and the batch size
$index = 0
$batchSize = 16

while ($index -lt $csv.Count) {
# Select the current batch
$guids = $csv | Select-Object -Skip $index -First $batchSize -ExpandProperty "Source user id"

# Fetch the mailboxes
$mailboxes = Get-Mailbox -Id $guids -Connection $sourceConnection -AllowMultiple

# Copy the mailboxes
$result = Copy-Mailbox -SourceConnection $sourceConnection -DestinationConnection $destinationConnection -CopyOptions $options -MappingSettings $mappings -Mailboxes $mailboxes

# Export the report
Export-Report -SessionId $result.SessionId

# Increment index for next batch
$index += $batchSize
}

お使いの環境で動作するようにスクリプトを調整してください。以下にいくつかのガイドラインを示します。

  • $sourceConnection$destinationConnection: 移行元および移行先の Microsoft 365 テナントに接続します。認証オプションについては、Connect-MicrosoftOnlineを参照してください。

  • $options: コピーに含めるコンテンツを設定します。-IncludeEmails を、お使いの移行に応じたオプションに置き換えてください。使用できるパラメーターについては、New-MailboxCopyOptionsを参照してください。

  • $mappings$csv: どちらも同じマッピングファイルを指す必要があります。前のセクションで保存したファイルに合わせて、-PathImport-Csv -Path を更新してください。

  • $batchSize: バッチごとに処理するメールボックスの数です。16から始めて、環境のパフォーマンスに応じて調整してください。

  • $guids: CSV から現在のバッチの移行元ユーザー ID を抽出します。

  • $mailboxes: 現在のバッチのメールボックスオブジェクトを取得します。複数の ID を渡す場合は -AllowMultiple パラメーターが必要です。詳細については、Get-Mailboxを参照してください。

  • $result: コピー操作の結果を保持します。これには、Export-Report で使用するセッション ID も含まれます。

  • Export-Report: 各バッチの完了後に、そのバッチの Migration report をエクスポートします。詳細については、Export-Reportを参照してください。

適切に調整し、テストが完了したら、スクリプトを実行してください。

考慮事項

  • -ModernAuth を使用する Modern authentication は、Microsoft 365 で最も安全な認証方法であり、多要素認証(MFA)が強制されていない限り、UsernamePassword の変数と組み合わせて使用できます。さまざまな認証オプションについて学ぶには、または必要に応じて Browser authentication に切り替えるには、Connect-MicrosoftOnlineを参照してください。

  • Migration reportsは、バッチごとに生成されます。スクリプトは Export-Report を使用して、各バッチのレポートを自動的にエクスポートします。

  • PowerShell を使用して移行をスケジュールし、業務時間外に実行してパフォーマンスを最適化することもできます。

  • 増分移行を実行するには、最初のコピーの後にスクリプトを再実行し、前回の実行以降に追加または変更された項目のみを同期します。

  • バッチサイズ: 適切なバッチサイズは、メールボックスのサイズやネットワークの状況によって異なります。16から始めて、パフォーマンスに応じて調整してください。バッチを小さくすると、問題が発生した場合の監視やトラブルシューティングが容易になります。

  • スクリプトエラーとテスト: 環境全体で実行する前に、少数のメールボックスでスクリプトをテストしてください。テストを行うことで、多数のユーザーに影響が及ぶ前に潜在的な問題を特定できます。

この記事はAIによって翻訳されています。ご不明な点がある場合は、英語の原文をご確認ください。

こちらの回答で解決しましたか?