SharePoint Onlineのサイトページを他のサイトコレクションにコピーする

2022.01.18
SharePoint Onlineのサイトページを他のサイトコレクションにコピーする

皆様初めまして。MS開発部の福田です。

突然ですがSharePoint Onlineのサイトページをコピーしたいと思ったことはありませんか?
SharePoint Onlineではサイトページを作成しそれらを複製することができますが、標準の機能だと同じサイトコレクション内にしかコピーすることができません。
「部署ごとにチームサイトを作っているけど作成したサイトページを他部署にも掲載したい…。」
「せっかく作ったモックサイトのページを本番用のテナントにそのまま移行したい…。」
といったときにはもう一度サイトページを作成する必要がありました。

そこで今回はPnP PowerShellを利用する、サイトページを他テナントやサイトコレクションにコピーできるスクリプトをご紹介します。

PnP PowerShellとは

PnP PowerShellとはMicrosoft365のSharePoint Online、Microsoft Teams、Microsoft Flowで動作するコマンドレットを提供するPowerShellモジュールです。
コマンドレットを実行することにより情報取得やカスタムをすることが可能です。

PnP PowerShellを利用する

PnP PowerShellを利用するにはPnP PowerShellモジュールをインストールする必要があります。
以下の手順でインストール可能です。
  1. Windows PowerShellを管理者として実行する。
  2. 以下のコマンドレットを実行する。
Install-Module -Name PnP.PowerShell

サイトページをコピーするPowerShellスクリプトを作成する

必要な権限
  • サイトページのコピー元サイトコレクション、コピー先サイトコレクションの双方に編集以上の権限があるMicrosoft365アカウント

PowerShellスクリプト
基本のスクリプトは以下の通りです。  
‘Read-Host’によって、PowerShellの画面からコピー元とコピー先のサイトコレクション名、コピーするページ名を変数に入力します。  
以下の画像の赤枠線部はユーザーが入力する箇所です。

PowerShellにてユーザーが入力する項目

 
‘Get-Credential’でログインするOffice365アカウントのユーザー名とパスワードを入力します。

ユーザー情報の入力

 
入力したサイトコレクション名、ページ名、ユーザー情報をもとに、‘Connect-PnPOnline’にてコピー元のサイトコレクションにアクセスします。
ユーザーのローカル環境に一時ファイル(***.tmp)を作成し、‘Export-PnPPage’によって一時ファイルにコピーするサイトページを出力します。
続いてコピー先のサイトコレクションにアクセスします。
アクセスすることができたら’Invoke-PnPSiteTemplate’によって一時ファイルをサイトコレクションに適用します。

サイトページのコピーイメージ

  一連の処理が完了すると、’Write-Host’によりコンソール上に「処理が完了しました。」の文字が10秒間出力されます。 コピー先のサイトコレクションのサイトページ一覧を確認し、コピーしたページが存在すれば複製完了です。   ユーザー情報の入力ミス等があった場合、コンソール上にエラーが出力されます。
サイトページのコピーができないもの
コピー元とコピー先のサイトコレクションで「全幅のセクション」に配置できるWebパーツが異なり、コピー先の「全幅のセクション」には配置できないWebパーツがサイトページに含まれている場合、エラーが発生します。
以下のキャプチャは全幅のセクションを配置したサイトページです。追加できるWebパーツのうち、「Show Like」Webパーツはコピー元のサイトコレクションでのみ使えるWebパーツです。

全幅のセクションを配置した状態

「Show Like」Webパーツを配置したサイトページ(Original.aspx)


「Show Like」Webパーツを配置した状態で、「Show Like」Webパーツを全幅のセクションに配置できないサイトコレクションにコピーしようとすると、エラーが発生します。

全幅のセクションにコピー先で利用できないWebパーツを配置したサイトページをコピーする際に発生するエラー

 
この状態ではサイトページの内容をコピーする際にエラーが発生したため、コピー元と同じ名前の空白のページが作成されます。

コピー先に作成された空白ページ(Original.aspx)

全幅のセクション以外のセクションにコピー先に存在しないWebパーツを配置した場合、エラーは発生せず、ページの内容もコピー可能です。 ただし、該当するWebパーツが配置されていた箇所は空欄になります。
また、サイトコレクション内を参照するリンクやパスを含むWebパーツはコピーの際にリンクやパス内のサイトコレクションのURLがコピー先のサイトコレクションのURLに置き換わります。コピー先にリンク先やパスで指定したファイル等がない場合は、リンク及びパスが無効になります。    

サイトテンプレートとの併用

SharePoint Onlineではサイトテンプレートを利用してサイトコレクションを作成できます。
Microsoft側で用意されている既存のサイトテンプレートだけではなく、ユーザーがオリジナルのサイトテンプレートを作成することも可能です。
サイトテンプレートにはサイトのテーマやリスト、ドキュメントライブラリの設定等が含まれますが、リストやドキュメントライブラリのアイテムは含まれないため、今回紹介したPowerShellスクリプトと合わせて使うことでサイトコレクションの作成が容易になるのではないでしょうか?

サイトテンプレートの詳しい使い方、作成方法につきましては、Microsoftのドキュメント及び弊社の記事をご覧ください。

Microsoftドキュメント
DeepComブログ
   

最後に

いかがでしたでしょうか。
今回ご紹介したのはPnP PowerShellにて提供されているコマンドレットを使ったPowerShellのスクリプトになります。 他のコマンドレットを利用することでサイトページ以外のコピーができたり、ループ処理を追加することで複数ページを一括でコピーできたりするなど様々な形に応用が可能となっております。
皆様が便利なようにカスタムしてご活用ください。
 
ディープコムのSharePointに関するサービス一覧
ディープコムのSharePointに関するプロダクト一覧
   

以上、最後までご愛読いただき
ありがとうございました。

お問い合わせは、
以下のフォームへご連絡ください。

お問い合わせ

  • この記事の
    著者
  • この著者の
    最新記事
福田

この著者の保持資格

PAGETOP