1. 主要ページへ移動
  2. メニューへ移動
  3. ページ下へ移動

QES ブログ

記事公開日

【PowerShell】PnP PowerShell を利用して SharePoint リストを操作しよう③

  • このエントリーをはてなブックマークに追加
こんにちは。DXソリューション営業本部の佐々木です。
本ブログでは、社内PCまたはサーバから PowerShell コマンドを実行して SharePoint リストのデータを読み書きする方法について掲載します。

前回の記事では、SharePoint Online と PnP PowerShell を接続するまでの手順をご紹介しました。
まだご覧になっていない方は、以下のリンクからご確認ください。

はじめに

本ブログは、PowerShell コマンドを実行して SharePoint リストのデータを読み書きする方法について、以下の3回に分けて掲載します。
 連載 概要 記載内容
第1回 PowerShell モジュールの概要と
利用環境の構築手順について
PowerShell と PnP PwerShell モジュールの
インストール方法
第2回 SharePoint Online と
PnP PowerShell の連携
Microsoft Entra ID アプリケーション登録と
サインイン用の電子証明書作成
第3回 PowerShell コマンドによる
スクリプトの実行
PnP PowerShell モジュールを利用した
スクリプトの作成・実行

今回は第3弾として、PnP PowerShell コマンドを用いて SharePointリスト を操作する方法をご紹介します。

事前準備

PowerShell を介した SharePoint Online への接続

まずは PowerShell (7.4以降) コマンドから SharePoint サイトに接続をします。

PowerShellコマンド
 connect-PnPOnline サイトURL -Tenant テナント名 -ClientID アプリケーション(クライアント)ID -CertificatePath “格納した証明書のパス” -CertificatePassword (ConvertTo-SecureString -String 証明書パスワード -AsPlainText -Force)

サイトURL:アクセスするSharePointサイトのURL(例:https://example.sharepoint.com/sites/sitename)
テナント名Microsoft Entra テナントに関連付けられている組織のプライマリドメイン名(プライマリドメイン名は こちらの方法 から確認できます)
アプリケーション(クライアント)ID:前段で登録したアプリのアプリケーション(クライアント)ID
格納した証明書のパス:前段で出力された電子証明書(pfxファイル)が格納されたパス
証明書パスワード:Register-PnPEntraIDAppコマンドで設定した証明書のパスワード

各パラメータの詳細は Connect-PnPOnline を参照してください。

a553_1.png
コマンド実行後にエラー文が表示されなければ SharePoint サイトへの接続が成功しています。
以降に紹介するコマンドは、SharePoint サイト接続中にのみ実行ができます。

SharePoint リストの操作

リストのアイテムを取得

PowerShellコマンド
 Get-PnPListItem -List リスト名 [-Id <Int32>]

リスト名:アイテムを取得したいリストの名前

a553_2.png
取得したリストのアイテムが表示されます。

a553_3.png
ID取得したリストの内、該当する「ID」のアイテムのみが表示されます。

他にもクエリに基づいて条件に合うアイテムを取得することができます。
詳細は Get-PnPListItem 
を参照してください。

リストにアイテムを追加

PowerShellコマンド
 Add-PnPListItem -List リスト名 -Values @{ 列名=xxx; 列名=“yyy”}

リスト名:アイテムを追加したいリストの名前
列名:フィールドの内部名

a553_4.png
追加したリストのアイテムが表示されます。

a553_5.png
Get-PnPListItemコマンドより追加したアイテムがリストに反映されていることを確認できます。

他にもバッチ処理により複数のアイテムを追加することができます。
詳細は Add-PnPListItem 
を参照してください。

リストのアイテムを更新

PowerShellコマンド
 Set-PnPListItem -List リスト名 -Identity ID -Values @{ 列名=xxx; 列名=“yyy”}

リスト名:アイテムを追加したいリストの名前
ID:SharePointリストのID列に設定されている値
列名:フィールドの内部名

a553_6.png
更新したリストのアイテムが表示されます。

a553_7.png
Get-PnPListItemコマンドより更新したアイテムがリストに反映されていることを確認できます。

他にもバッチ処理により複数のアイテムを更新することができます。
また、Get-PnPListItem と併せて使用することで、特定のアイテムのみ更新させることができます。
詳細は Set-PnPListItem 
を参照してください。

リストのアイテムを削除

PowerShellコマンド
 Remove-PnPListItem -List リスト名 -Identity ID

リスト名アイテムを追加したいリストの名前
ID:SharePointリストのID列に設定されている値

a553_8.png
アイテムを削除するかの確認が行われ、[Yes]を選択すると削除処理が行われます。
Forceパラメータを指定すると削除確認の質問をスキップできます。

a553_9.png
Get-PnPListItemコマンドより削除したアイテムがリストに反映されていることを確認できます。

他にもバッチ処理により複数のアイテムを削除することができます。
また、Get-PnPListItem と併せて使用することで、特定のアイテムのみ削除させることができます。
詳細は Remove-PnPListItem 
を参照してください。

SharePointリスト操作のスクリプト

前提条件

・ローカル環境に存在するcsvファイルのデータをSharePointリストと連携
・オンプレミスデータゲートウェイは利用不可
・Microsoft Entra 管理センターよりアプリの登録は利用可能

実装例

DataIntegrationTest.ps1
  1. #接続先のSharePointサイトURLを設定
  2. $SiteUrl = "https://xxx.sharepoint.com/sites/siteURL"
  3. #利用する環境のテナント名を設定
  4. $Tenantname = "xxx"
  5. #アプリ(クライアント)IDを設定
  6. $ClientID = "yyy"
  7. #グローバル管理者から提供された証明書(.pfx)ファイルの格納パスを設定
  8. $CertificatePath = "C:\aaa\bbb\ccc.pfx"
  9. #グローバル管理者から提供された証明書のパスワードを設定
  10. $CertificatePassword = ConvertTo-SecureString -String connectPW -AsPlainText -Force
  11. #ShrePointListの名前を設定
  12. $Listname = "SampleListName"
  13.  
  14. #csvファイルの読み込み(オンプレミスデータ格納ファイル)
  15. $CsvFilePath = "Test.csv"
  16. $Csv = Import-CSV $CsvFilePath
  17.   
  18. #SharePointListのアイテム追加フラグ
  19. $Csv = $Csv | Select-Object *, @{ Name = 'AddFlag'; Expression = {'true'}}
  20. #SharePointListのアイテム削除フラグ
  21. $DeleteFlag = $false
  22.  
  23. #グローバル管理者が作成した証明書を取得後、以下コマンドからSharePointサイトにアクセス
  24. connect-PnPOnline $SiteUrl -Tenant $Tenantname -ClientID $ClientID -CertificatePath $CertificatePath -CertificatePassword $CertificatePassword
  25.  
  26. #Sharepointリストを取得
  27. $SampleList = Get-PnPListItem -List $Listname
  28.  
  29. #SharePointListのアイテムとcsvファイルのデータに同一のものがあるかチェック
  30. foreach ($list in $SampleList)
  31. {
  32.     foreach ($Csvline in $Csv)
  33.     {
  34.         #同一のものがあればSharePointListのアイテムを更新
  35.         if ($list.FieldValues.Title -eq $Csvline.title)
  36.         {
  37.             Set-PnPListItem -List $Listname -Identity $list.FieldValues.ID -Value @{Title=$Csvline.title; Update=$Csvline.update}
  38.             $DeleteFlag = $false
  39.             break
  40.         }
  41.         else
  42.         {
  43.             $DeleteFlag = $true
  44.         }
  45.     }
  46.     #SharePointListのアイテムがcsvファイルのデータにない場合、リストから削除する
  47.     if ($DeleteFlag)
  48.     {
  49.         Remove-PnPListItem -List $Listname -Identity $list.FieldValues.ID -Force
  50.         $DeleteFlag = $false
  51.     }
  52. }
  53. #csvファイルのデータがSharePointListのアイテムに未登録の場合、新規登録を行う
  54. foreach ($Csvline in $Csv)
  55. {
  56.     if ($Csvline.AddFlag)
  57.     {
  58.         $ResultData = SetTable($Csvline)
  59.         #SherePointListへアイテムを追加
  60.         Add-PnPListItem -List $Listname -Values @{Title=$Csvline.title; Update=$Csvline.update}
  61.     }
  62. }
  63.  
  64. #SharePointサイトから切断
  65. Disconnect-PnPOnline

まとめ

今回は、SharePointリストを操作するコマンドと スクリプトの実装例についてご紹介しました。
本記事で紹介したスクリプトはリストを操作するコマンドを主に使用しておりますが、エラー処理やログの出力機能を追加することでプログラムの監視やデバックに役立てることができます。
また、PnP PowerShell には SharePointリストの操作以外にもMicrosoft 365製品のセットアップ、構成、保守に利用できます。
利用可能なコマンドレットについて、不明点があればご相談ください。

QES では Power Platform の開発支援、QAサポート、開発者教育、ガバナンス整備など、組織で Power Platform を活用するためのサポートを包括的にご提供しています。Power Platform 活用についてご興味がある/利用中だが課題を感じていらっしゃるお客様はまずはお気軽にお問い合わせください。


このブログで参照されている、Microsoft、Windows、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。

  • このエントリーをはてなブックマークに追加

お問い合わせ

Contact

ご質問やご相談、サービスに関する詳細など、何でもお気軽にご連絡ください。下記のお問い合わせフォームよりお気軽に送信ください。

お問い合わせ

資料ダウンロード

Download

当社のサービスに関する詳細情報を掲載した資料を、下記のページよりダウンロードいただけます。より深く理解していただける内容となっております。ぜひご活用ください。

資料ダウンロード