【SharePoint Online】モダンページをPowerShellで作成してみる【PnP PowerShell】

今回はモダンページを大量に作成しまくる時用に、PowerShellでページを作成する方法を書いていきたいと思います。
サンプルではニュース用ページを作成していますが、プロパティを変えれば通常のページなども作成できます。
サイトを跨いでテンプレートページを作成する際などに非常に便利なので備忘含めてやっていきましょう。

事前準備

今回はPnP PowerShellを利用しますので、以下から事前にインストールしておく必要があります。
色々なインストール方法がありますが、どれでも構いませんのでインストールしてください。
https://docs.microsoft.com/ja-jp/powershell/sharepoint/sharepoint-pnp/sharepoint-pnp-cmdlets?view=sharepoint-ps

インストールができたら以下のソースを確認してください。

ソース

CSV

スクリプト内ではプロパティをCSVに書き込んでそれを読み込む想定で作成されています。
以下のように作成しましょう。

PageNameProperty1Property2HeaderImageThumbnail
NewPage1Top NewsNotificationhttps://[yoursite]/chouchou1.jpghttps://[yoursite]/chouchou2.jpg
NewPage2AnnouncementIT

解説

主要コマンド

今回利用したコマンドは以下3つです。
・Add-PnPClientSidePage
・Set-PnPListItem
・Set-PnPClientSidePage
簡単にプロパティを解説します。

Add-PnPClientSidePage

このコマンドでページを作成することができます。
https://docs.microsoft.com/ja-jp/powershell/module/sharepoint-pnp/add-pnpclientsidepage?view=sharepoint-ps

以下今回利用したオプション
-Name
⇒作成するページ名を設定します。Titleにも設定されます。
-LayoutType
⇒ページのレイアウトを指定できます。
 Article,Home,RepostPage,SingleWebPartAppPageを選択することができます。
 通常の場合はArticleを指定すればいいでしょう。
-PromoteAs
⇒ページを用途別に昇格させることができます。
 HomePage,NewsArticle,None,Templateを選択することができます。

Set-PnPListItem

リストアイテムのプロパティを更新することができます。
https://docs.microsoft.com/ja-jp/powershell/module/sharepoint-pnp/set-pnplistitem?view=sharepoint-ps

以下今回利用したオプション
-List
⇒操作するアイテムが存在するリスト名を指定します。
-Identity
⇒操作するアイテムのIDを指定します。
-Values
⇒操作するアイテムのフィールドを指定し、値を更新します。
 詳しくは上述の-values参照

Set-PnPClientSidePage

ページのパラメータを設定することができます。
Set-PnPListItemと似ていますが、例えばニュースページのサムネや、ヘッダー画像など列情報としては確認できないパラメータを更新することができます。
https://docs.microsoft.com/ja-jp/powershell/module/sharepoint-pnp/set-pnpclientsidepage?view=sharepoint-ps

以下今回利用したオプション
-ThumbnailUrl
⇒ニュース記事として作成した場合のサムネ画像を設定します。

注意点

Set-PnPClientSidePageのページを確認すると、[-ServerRelativeImageUrl]というパラメータが用意されていますが、現状稼働しないようです。
https://github.com/pnp/PnP-PowerShell/issues/2739
なので、44,45行目のように[ImageServerRelativeUrl]に直接値を格納して更新しています。

    $createPage = Get-PnPClientSidePage $page.PageListItem.FieldValues.FileLeafRef
    $createPage.PageHeader.ImageServerRelativeUrl = $csv.HeaderImage

終わりに

今回は以上となります。
結構シンプルながら実用的で、サイトを一気に作成する際などにも利用できますし、
同様のテンプレートを各サイトで作成したい場合などにも利用できますね。

次回はページ作成+Webパーツを配置して値を設定するところを試してみたいと思います。

それではまた。