わけあって SharePoint Online のリストに大量にアイテムを作成しなければならない機会があり、PowerShell を利用してアイテム作成のスクリプトを作成することにしました。

そのときに利用したのが、コミュニティがオープンソースで提供している PnP PowerShell ライブラリです。Microsoft が直接提供するものではありませんが、SharePoint Online や Microsoft Teams、Azure AD など、Microsoft 365 を利用・管理する上で欠かせないいくつかのサービスに対して PowerShell からの操作を可能にします。

PnP PowerShell
https://pnp.github.io/powershell/

今回は、この PnP PowerShell を利用して、SharePoint Online のリストにアイテムを作成することにしました。

PnP PowerShell のインストール

まずは PnP PowerShell モジュールを、PowerShell を実行する環境にインストールしておく必要があります。管理者モードで PowerShell を起動し、Install-Module のコマンドを利用して簡単にインストールすることができます。

Install-Module -Name PnP.PowerShell

モジュールがダウンロードされ、問題なくインストールが終われば完了です。

SharePoint Online にアイテムを作成する

それでは、さっそく PnP PowerShell を利用して SharePoint Online にアイテムを作成します。

# リストが存在するサイトの URL
$url = "https://contoso.sharepoint.com/sites/sitename"

# リストの表示名
$listName = "有名人の誕生日"

# SharePoint Online に接続
Connect-PnPOnline -Url $url -Interactive

# アイテムの情報を格納するハッシュテーブルの作成
$data = @{}

# アイテムの情報を設定
$data.Add("Title", "岸田今日子")
$data.Add("_x8a95__x751f__x65e5_", "1930/4/29")

# アイテムをリストに作成
Add-PnPListItem -List $listName -Values $data

# SharePoint Online から切断
Disconnect-PnPOnline

これがアイテム作成時の基本形になるかと思います。

まず、$url$listName には、それぞれリストが存在するサイトの URL とリストの表示名を設定しておきます。Connect-PnPOnline が実行されると、サイトに対して接続情報が作成されますが、このとき認証画面が開きますので、普段利用している多要素認証にも対応しています。このときサインインに利用したユーザーが、アイテム作成時の作成者となります。

作成するアイテムの情報は、ハッシュテーブルに格納しておくのが便利です。そのため、@{} で空のハッシュテーブルを作成しておきます。ハッシュテーブルにデータを追加するために、Add メソッドを利用しますが、最初の引数はリスト列の内部名、2 つ目の引数が登録したいデータになります。列の種類に応じて、データの記述方法が異なるのですが、そのあたりは別の記事で紹介したいと思います。

このデータを元に Add-ListItem が実行されると、SharePoint Online のリストにアイテムが作成されます。最後に、Disconnect-PnPOnline を実行し、SharePoint Online から切断しておきます。

さいごに

今回のような簡単な処理であれば、これまでも利用していた CSOM を用いた PowerShell スクリプトでも難しくなく作成できます。しかし、少し複雑になっていくと、PnP PowerShell を利用することで断然シンプルに短く処理を記述していくことができると思いました。

これからは、機会を見つけて PnP PowerShell を試していこうかと思います。