【PowerShell】PnP.PowerShell を使用して SharePoint Online のリストを操作する

PnP.PowerShell を使用してリストを操作します。

---
## **関連記事**

- [【PowerShell】SharePoint クライアント オブジェクト モデル (CSOM) を使用した SharePoint Online の操作](https://qiita.com/MakotoIshikawa/items/af3793f3a388eb05aaea)

---
# 準備

## Module のインストール

[PowerShell Gallery](https://www.powershellgallery.com/) からModule をインストールします。

### [PnP.PowerShell](https://www.powershellgallery.com/packages/PnP.PowerShell)

```powershell
# PnP PowerShell のインストールと更新
if((Get-Module PnP.PowerShell -ListAvailable | measure).Count -eq 0) {
    Install-Module PnP.PowerShell -Force
} else {
    Update-Module PnP.PowerShell
}
Get-Command -Module PnP.PowerShell | select Name, Version
```

:::note warn
注意 2024/9/9 現在
PnP PowerShell で使用する独自の EntraID アプリケーションを登録することが必須のステップになりました。
:::

https://pnp.github.io/powershell/articles/registerapplication.html

```powershell
Register-PnPEntraIDAppForInteractiveLogin -ApplicationName "PnPXXX(任意の名前でOK)" -Tenant [yourtenant].onmicrosoft.com -Interactive
```

登録されたアプリケーションの Client Id が出力されます。
アプリケーションの Client Id は接続時に指定しますので、こちらは控えておきましょう。

https://sonorite-sxs.jp/2024/10/08/pnp-powershell%e3%81%ae%e4%bb%95%e6%a7%98%e5%a4%89%e6%9b%b4%e3%81%ab%e4%bc%b4%e3%81%86%e6%8e%a5%e7%b6%9a%e3%82%a8%e3%83%a9%e3%83%bc%e5%af%be%e5%87%a6%e6%96%b9%e6%b3%95/

#  操作

## SharePoint Web サイトの操作

### サイトに接続する

登録したアプリケーションの Client Id が必要になります。 

```powershell
# SharePoint サイトの URL
$SiteUrl = "https://${Tenant}/sites/$SiteName"
# 資格情報取得
$Credentials = Get-Credential
# SharePoint 管理センターに接続
Connect-PnPOnline -Url $SiteUrl -Credentials $Credentials -ClientId $ClientId
```

## SharePoint リストの操作

### すべての SharePoint リストを取得する

```powershell
Get-PnPList
```

### リストを作成および更新する

```powershell
# カスタムリスト作成
$ListName = 'Announcements'
$newList = New-PnPList -Title $ListName -Template GenericList

Set-PnPList -Identity $ListName -Description 'New Description'
```

### リストを削除する

```powershell
$ListName = 'Announcements'
Remove-PnPList -Identity $ListName
```

### リストからアイテムを取得する

```powershell
# リストアイテム情報取得
$ListName = 'Announcements'
$Id = 2
Get-PnPListItem -List $ListName -Id $Id
```

### 新しいリストアイテムを作成する

```powershell
$ListName = 'Announcements'
Add-PnPListItem -List $ListName -Values @{ Title='My New Item!'; Body='Hello World!' }
```

- [【PowerShell】CSV ファイルの内容をカスタムリストのリストアイテムとして追加する - Qiita](https://qiita.com/MakotoIshikawa/items/8f5eeaa209a193534dbe)

### リストアイテムに添付ファイルを追加する

```powershell
$item = Get-PnPListItem -List $ListName -Id $Id
[System.IO.FileInfo] $file = 'C:\Data\test.txt'
$at = New-Object Microsoft.SharePoint.Client.AttachmentCreationInformation
$at.FileName =  $file.Name
$at.ContentStream = $file.OpenRead()
$item.AttachmentFiles.Add($at)
Invoke-PnPQuery
```

- [【PowerShell】フォルダを指定してリストアイテムに添付ファイルを追加する - Qiita](https://qiita.com/MakotoIshikawa/private/a67ab47a0bbdedebc7b6)

---

# 参考サイト

- [PnP PowerShell](https://pnp.github.io/powershell/)
- [SharePoint Online: Add Attachment to List Item using PowerShell - SharePoint Diary](https://www.sharepointdiary.com/2017/02/sharepoint-online-add-attachment-to-list-item-using-powershell.html)
- [PnP PowerShellの仕様変更に伴う接続エラー対処方法](https://sonorite-sxs.jp/2024/10/08/pnp-powershell%e3%81%ae%e4%bb%95%e6%a7%98%e5%a4%89%e6%9b%b4%e3%81%ab%e4%bc%b4%e3%81%86%e6%8e%a5%e7%b6%9a%e3%82%a8%e3%83%a9%e3%83%bc%e5%af%be%e5%87%a6%e6%96%b9%e6%b3%95/)
- [PnP PowerShell で使用する Entra ID アプリケーションの登録](https://pnp.github.io/powershell/articles/registerapplication.html)