PowerShell を使用して SharePoint に移行する

この記事では、SharePoint 移行ツール (SPMT) 移行エンジンに基づく新しい PowerShell コマンドレットについて説明します。 ファイルを SharePoint 2010 および SharePoint 2013 オンプレミスのドキュメント ライブラリとリスト アイテムから Microsoft 365 に移動するために使用できます。 SharePoint 移行に関連するすべての現在の PowerShell コマンドレットの詳細については、 Microsoft SharePoint 移行ツールコマンドレット リファレンスを参照してください。

PowerShell コマンドレットは、SharePoint 移行ツールと同じ機能を提供します。

注:

これらの PowerShell コマンドレットは、現在、中国の 21Vianet が運用している Office 365 のユーザーには使用できません。

システム要件

最適なパフォーマンスのために推奨される要件

説明 推奨事項
CPU 64 ビット クアッド コア プロセッサ以上
RAM 16 GB
ローカル ストレージ ハード ディスク:150 GB の空き容量
オペレーティング システム Windows Server 2016 Standard または Datacenter
Windows Server 2012 R2
Windows 10 クライアント
.NET Framework 4.6.2
Microsoft Visual C++ 2015 再頒布可能パッケージ OneNote の移行に必要です

重要

最大 400 文字のファイル パスの移行をサポートするには、PowerShell 5.0x および .NET Framework 4.6.2 以降が必要です。

最小要件 (パフォーマンスの低下が予想されます)

説明 最小要件
CPU 64 ビット 1.4 GHz 2 コア プロセッサ以上
RAM 8 GB
ローカル ストレージ ハード ディスク:150 GB の空き容量
ネットワーク カード 高速インターネット接続
オペレーティング システム Windows Server 2008 R2
Windows 7
Windows 8 または 8.1
.NET Framework 4.6.2
Microsoft Visual C++ 2015 再頒布可能パッケージ OneNote の移行に必要です。
PowerShell PowerShell 5.x は、最大 400 文字のファイル パスの移行をサポートするために必要です。 PowerShell 6.0 以降はサポートされていません。

始める前に

  1. 既存の Active Directory または Microsoft 365 にアカウントを追加するためのその他のオプションのいずれかを使用して、Microsoft 365 を準備します。 詳細については、「Microsoft 365 とオンプレミス環境との統合」と「Microsoft 365 Apps for business にユーザーを追加する」を参照してください。

  2. [フォルダー] を開きます。

    $env:UserProfile\Documents\WindowsPowerShell\Modules\Microsoft.SharePoint.MigrationTool.PowerShell

    内部に DLL があることを確認し、OneDrive を使用している場合は WindowsPowershell フォルダを OneDrive / ドキュメントにコピーする必要があるかもしれません。

  3. この場所から以下の PowerShell コマンドを実行します。

    Import-Module Microsoft.SharePoint.MigrationTool.PowerShell
    

移行セッションを作成および初期化する

  • Register-SPMTMigration
    このコマンドレットは、移行セッションを作成して初期化します。 初期化では、セッション レベルで移行設定が構成されます。 特定の設定パラメーターが定義されていない場合は、既定の設定が使用されます。 セッションが登録されたら、セッションにタスクを追加して移行を開始できます。

移行タスクを追加する

  • Add-SPMTTask
    このコマンドレットを使用して、登録されている移行セッションに新しい移行タスクを追加します。 現在、使用できるタスクには、ファイル共有タスク、SharePoint タスク、JSON 定義タスクの 3 種類があります。 注: 重複するタスクは許可されません。

タスクを削除する

  • Remove-SPMTTask
    このコマンドレットを使用して、登録済みの移行から既存の移行タスクを削除します。

移行を開始する

  • Start-SPMTMigration
    このコマンドレットは、登録されている SPMT 移行を開始します。

現在のセッションのオブジェクトを返す

  • Get-SPMTMigration
    現在のセッションの オブジェクトを返します。 これには、現在のタスクの状態と現在のセッション レベルの設定が含まれます。 現在のタスクの状態には、次のものが含まれます。
    • スキャンされたファイルの数
    • 移行されたファイルの数
    • 移行エラー メッセージ

現在の移行を停止する

  • Stop-SPMTMigration
    このコマンドレットは、現在の移行をキャンセルします。

コンソールに移行状況の詳細を表示する

  • Show-SPMTMigration
    NoShow モードで移行を開始すると、Show-SPMTMigration コマンドレットを実行すると、タスク ID、データ ソースの場所、ターゲットの場所、移行の状態がコンソールに表示されます。 Ctrl + C キーを押すと 、NoShow モードに戻ります。

移行セッションを削除する

  • Unregister-SPMTMigration
    移行セッションを削除するには、このコマンドレットを使用します。

サンプル シナリオ

例 1: IT 管理者が SharePoint オンプレミス タスクを追加し、バック グラウンドで移行を開始します。

#Define SharePoint 2013 data source#
$SourceSiteUrl = "http://YourOnPremSite/"
$OnPremUserName = "Yourcomputer\administrator"
$OnPremPassword = ConvertTo-SecureString -String "OnPremPassword" -AsPlainText -Force
$SPCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $OnPremUserName, $OnPremPassword
$SourceListName = "SourceListName"

#Define SharePoint target#
$SPOUrl = "https://contoso.sharepoint.com"
$UserName = "admin@contoso.onmicrosoft.com"
$PassWord = ConvertTo-SecureString -String "YourSPOPassword" -AsPlainText -Force
$SPOCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $UserName, $PassWord
$TargetListName = "TargetListName"

#Define File Share data source#
$FileshareSource = "YourFileShareDataSource"

#Import SPMT Migration Module#
Import-Module Microsoft.SharePoint.MigrationTool.PowerShell

#Register the SPMT session with SharePoint credentials#
Register-SPMTMigration -SPOCredential $SPOCredential -Force

#Add two tasks into the session. One is SharePoint migration task, and another is File Share migration task.#
Add-SPMTTask -SharePointSourceCredential $SPCredential -SharePointSourceSiteUrl $SourceSiteUrl  -TargetSiteUrl $SPOUrl -MigrateAll
Add-SPMTTask -FileShareSource $FileshareSource -TargetSiteUrl $SPOUrl -TargetList $TargetListName

#Start Migration in the console. #
Start-SPMTMigration

例 2: IT 管理者がバックグラウンドで「NoShow モード」で実行している移行をフォアグラウンドにして、次のコマンドレットを実行することを望んでいます。これにより、移行の進行状況がコンソールに表示されます。

Show-SPMTMigration

例 3:IT 管理は、.csv ファイルを読み込むことによって一括移行を実行したいと考えています。 この例のサンプル ファイルは SPMT.csv です。

Load CSV;
$csvItems = import-csv "C:\spmt.csv" -Header c1,c2,c3,c4,c5,c6
ForEach ($item in $csvItems)
{
    Write-Host $item.c1
    Add-SPMTTask -FileShareSource $item.c1 -TargetSiteUrl $item.c4 -TargetList $item.c5 -TargetListRelativePath $item.c6
}

Spmt のファイルには、2つの移行タスクが定義されています。

D:\MigrationTest\Files\Average_1M\c,,,https://SPOSite.sharepoint.com,Documents,Test
C:\work\Powershell\negative,,,https://SPOSite.sharepoint.com/,Documents,DocLibrary_SubfolderName

1つの JSON ファイルの読み込みでの一括移行のコードスニペット:

#Load JSON:
$jsonItems = Get-Content -Raw -Path  "C:\spmt.json" | ConvertFrom-Json
ForEach ($taskItem in $jsonItems.Tasks)
{
    $jsonString = ConvertTo-Json $taskItem -Depth 100
    Add-SPMTTask -JsonDefinition $jsonString -SharePointSourceCredential $onpremCredential
}

Spmt. json のファイルでは、3つの移行タスクが定義されています。

{
   "Tasks":[
      {
         "SourcePath":"http://On-prem/sites/test",
         "TargetPath":"https://YourSPO.sharepoint.com",
         "Items":{
            "Lists":[
               {
                  "SourceList":"list-01",
                  "TargetList":"list-01"
               }
            ],
            "SubSites":[

            ]
         }
      },
      {
         "SourcePath":"http://On-prem/sites/test",
         "TargetPath":"https://YourSPO.sharepoint.com",
         "Items":{
            "Lists":[
               {
                  "SourceList":"list-02",
                  "TargetList":"list-02"
               }
            ],
            "SubSites":[

            ]
         }
      },
      {
         "SourcePath":"http://On-prem/sites/test",
         "TargetPath":"https://YourSPO.sharepoint.com",
         "Items":{
            "Lists":[
               {
                  "SourceList":"doclib-01",
                  "TargetList":"doclib-01"
               }
            ],
            "SubSites":[

            ]
         }
      }
   ]
}

例4: 移行の進行状況を表示します。

これらのサンプルは、移行プロジェクトの進行状況を表示する方法を示しています。 Get-SPMTMigration は、現在のセッションのオブジェクトを返します。 これには、現在のタスク状態と現在のセッション レベル設定が含まれます。 現在のタスクの状態は次のとおりです。

  • スキャンされたファイルの数
  • 除外されたファイルの数
  • 移行されたファイルの数
  • 失敗したファイルの数
  • 現在のタスクの移行の進行状況 (0 - 100)
  • 現在のタスク状態
  • 移行エラー メッセージがある場合。

# Start migration in the background
Start-SPMTMigration -NoShow

# Get the object of current migration
$session = Get-SPMTMigration

# Query migration status every 5 seconds until migration is finished
while ($session.Status -ne "Finished")
{
Write-Host $session.Status

    # Query migration progress of each tasks
    Foreach ($taskStatus in $session.StatusOfTasks)
    {
        $taskStatus.MigratingProgressPercentage
}

    Start-Sleep -Seconds 5
}