この記事では、SharePoint 移行ツール (SPMT) 移行エンジンに基づく PowerShell コマンドレットについて説明します。 SharePoint Server オンプレミスのドキュメント ライブラリとリスト アイテム、およびファイル共有から Microsoft 365 にファイルを移動するために使用できます。 SharePoint の移行に関連する現在のすべての PowerShell コマンドレットについては、 Microsoft SharePoint 移行ツール コマンドレット リファレンスを参照してください。
PowerShell コマンドレットは、SharePoint 移行ツールと同じ機能を提供します。
注:
これらの PowerShell コマンドレットは、現在、中国の 21Vianet が運用する Office 365 のユーザーは利用できません。
システム要件
最適なパフォーマンスのために推奨される要件
| 説明 | 推奨事項 |
|---|---|
| CPU | 64 ビット、4 コア プロセッサ以上 |
| RAM | 16 GB |
| ローカル ストレージ | ハード ディスク:150 GB の空き容量 |
| オペレーティング システム | Windows Server 2025 Standard または Datacenter Windows Server 2022 Standard または Datacenter Windows Server 2019 Standard またはDatacenter Windows Server 2016 Standard または Datacenter Windows Server 2012 R2 Standard、Datacenter Windows 10 または 11 のクライアント .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 の空き容量 |
| ネットワーク カード | 高速インターネット接続 |
| オペレーティング システム | 2008 R2 または 2012 Windows Server Windows 7、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 で長いパス ファイルを読み取れるようにします。
レジスタ エディターを開き、["Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework"] に移動し、新しいキー "AppContext"を追加します。 次に、キーの下に 2 つの文字列値を追加します。
値の名前:
Switch.System.IO.BlockLongPaths値のデータ:false値の名前:
Switch.System.IO.UseLegacyPathHandling値のデータ:false
始める前に
既存の Active Directory または Microsoft 365 にアカウントを追加するためのその他のオプションのいずれかを使用して、Microsoft 365 を準備します。 詳細については、「Microsoft 365 とオンプレミス環境の統合」および「Microsoft 365 Apps for business にユーザーを追加する」を参照してください。
フォルダー (
$env:UserProfile\Documents\WindowsPowerShell\Modules\Microsoft.SharePoint.MigrationTool.PowerShell) を開きます。 その中に DLL があることを確認します。 OneDrive を使用している場合は、WindowsPowershell フォルダーを$env:UserProfile\OneDrive - <Organization Name>\Documentsにコピーする必要があります。この場所から、次の PowerShell コマンドを実行します。
Import-Module Microsoft.SharePoint.MigrationTool.PowerShell
移行セッションを作成および初期化する
このコマンドレットは、移行セッションを作成して初期化します。 初期化は、セッション レベルで移行設定を構成します。 特定の設定パラメータが定義されていない場合は、デフォルト設定が使用されます。 セッションが登録されたら、タスクをセッションに追加して移行を開始できます。
移行タスクを追加する
このコマンドレットを使用して、登録済みの移行セッションに新しい移行タスクを追加します。 現在、許可されているタスクには、ファイル共有タスク、SharePoint タスク、JSON 定義タスクの 3 種類があります。
注: タスクの重複は許可されていません。
タスクを削除する
このコマンドレットを使用して、登録済みの移行から既存の移行タスクを削除します。
移行を開始する
このコマンドレットは、登録済みの SPMT 移行を開始します。
現在のセッションのオブジェクトを返す
現在のセッションのオブジェクトを返します。 このコマンドレットには、現在のタスクの状態と現在のセッション レベルの設定が含まれます。 現在のタスクのステータスは次のとおりです。
- スキャンされたファイルの数
- 移行されたファイルの数
- 移行エラー メッセージ
現在の移行を停止する
このコマンドレットは、現在の移行を取り消します。
コンソールに移行状況の詳細を表示する
- Show-SPMTMigration
NoShow モードで移行を開始した場合、Show-SPMTMigration コマンドレットを実行すると、コンソールにタスク ID、データ ソースの場所、ターゲットの場所、移行状態が表示されます。 Ctrl+C キーを選択すると、ディスプレイが NoShow モードに戻ります。
移行セッションを削除する
移行セッションを削除するには、このコマンドレットを使用します。
サンプル シナリオ
例 1: IT 管理者は SharePoint オンプレミス タスクを追加し、バックグラウンドで移行を開始します。
#Define SharePoint Server 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 $SPCredential
}
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
}