SharePointのリストをPowerShellで他のサイトに移行する

大抵のリストは「スキーマを含む CSV にエクスポート」で移行出来ますが、大量のリストを移行する場合は PowerShell での移行を試してみてください。

PnP.PowerShellでリストをテンプレートとして作成し、新しいサイトにテンプレートを適用することが出来ます。

ただし、アイテムに添付されているファイルは本手順では移行できません。

1.モジュールのインストール

下記のコマンドで「PnP.PowerShell」モジュールをインストールします。

Install-Module -Name PnP.PowerShell -Scope CurrentUser
Get-Module PnP.PowerShell -ListAvailable



2.Entra ID へのアプリ登録

「PnP Management Shell」マルチテナントアプリが削除されたため、今後は各テナントごとに Entra ID にシングルテナントアプリを登録して認証する必要があります。

経緯の詳細については下記を参照してください。
https://zenn.dev/maekawawawa/articles/3d8cc019cac17e

下記のコマンドでアプリを登録します。

Register-PnPEntraIDAppForInteractiveLogin -ApplicationName "PnP.PowerShell" -Tenant <ドメイン>.onmicrosoft.com

作成後に表示される「Client ID」をメモしておきます。
※Entra IDのアプリ一覧からも確認出来ます


3.リストテンプレートの作成

1.下記のコマンドでリストが存在するサイトに接続します。

$siteUrl = "https://<ドメイン>.sharepoint.com/sites/<サイト名>"
$clientId = "<アプリの Client ID>"
Connect-PnPOnline -Url $siteUrl -Interactive -ClientId $clientId


2.下記のコマンドでリストのテンプレートをエクスポートします。

Get-PnPList
Get-PnPSiteTemplate -Out $template -Handlers Lists -ListsToExtract $listName


3.下記のコマンドでエクスポートしたテンプレートにアイテムデータを追加します。

Add-PnPDataRowsToSiteTemplate -Path $template -List $listName



4.リストテンプレートの適用

1.下記のコマンドでリストをインポートするサイトに接続します。

$siteUrl = "https://<ドメイン>.sharepoint.com/sites/<サイト名>"
Connect-PnPOnline -Url $siteUrl -Interactive -ClientId $clientId


2.下記のコマンドでテンプレートを登録します。

Invoke-PnPSiteTemplate -Path $template



5.おまけ 添付ファイル有りアイテムの抽出

本手順では添付ファイルは移行出来ません。

もし添付ファイルを手動で移行する場合のために、どのアイテムに添付ファイルがあるか確認するコマンドを紹介しておきます。

$items = Get-PnPListItem -List $listName -Fields "Title","Attachments"
$itemsWithAttachments = $items | Where-Object { $_["Attachments"] -eq $true }

コメント

タイトルとURLをコピーしました