次の方法で共有


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 の空き容量
オペレーティング システム R2
Windows 10 クライアント
.NET Framework 4.6.2 のWindows Server 2016 StandardまたはDatacenter
Windows Server 2012
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 以降はサポートされていません。

長いパスの問題の回避策

SPMT PowerShell を使用すると、パスが 260 文字を超えるソース ファイルでスキャン エラーが発生する可能性があります。 この問題を解決するには、システム レジストリを変更して、PowerShell で長いパス ファイルを読み取ることができます。

[Register エディター] を開き、["Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework"] に移動し、新しいキー "AppContext"を追加します。 次に、キーの下に 2 つの文字列値を追加します。

  • 値名: Switch.System.IO.BlockLongPaths 値データ: false

  • 値名: Switch.System.IO.UseLegacyPathHandling 値データ: false

始める前に

  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 フォルダーを $env:UserProfile\OneDrive - Microsoft\Documents にコピーする必要があります。

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

    Import-Module Microsoft.SharePoint.MigrationTool.PowerShell
    

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

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

移行タスクを追加する

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

タスクを削除する

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

移行を開始する

このコマンドレットは、登録された SPMT 移行を開始します。

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

現在のセッションのオブジェクトを返します。 このコマンドレットには、現在のタスクの状態と現在のセッション レベルの設定が含まれています。 現在のタスクの状態には、次のものが含まれます。

S - スキャンされたファイルの数

  • 移行されたファイルの数
    • 移行エラー メッセージ

現在の移行を停止する

このコマンドレットは、現在の移行を取り消します。

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

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

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

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

サンプル シナリオ

例 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
}