【SharePoint】PnP.PowerShellだけでアプリの設定がどこまでできるか - ライブラリ編

こんにちは！
M365（特にSharePoint,Power Automate,Power Apps,Teams）に関する記事やちょっとした小ネタなどをご紹介していきます。

# はじめに
PnP.PowerShellコマンドのみを利用してリスト／ライブラリの作成・設定から、列、ビューの設定などをどこまで実装できるかを検証してみたシリーズの第2弾は、ドキュメント ライブラリの作成と設定となります。

※過去の記事は、末尾の「[関連記事](#関連記事)」のリンクからご覧ください。

# 検証環境
・Windows PowerShellバージョン：5.1
・PnP.PowerShellモジュール：1.12.0
・M365ライセンス：Office 365 E1

# 検証内容
＜前提＞
・SharePointサイトが作成済みであること（今回はモダンチームサイトを利用）
・PnP.PowerShellモジュールがインストール済みであること

:::note info
PnP.PowerShellモジュールのインストール、サイトへの接続方法は、以下のサイトを参照ください。
[SharePoint サイトのデザイン - PnP PowerShell コマンドレット](https://learn.microsoft.com/ja-jp/sharepoint/dev/declarative-customization/site-design-pnppowershell)
:::

## ライブラリの作成と設定
ライブラリの新規作成および設定変更は、リストと同様に「New-PnPList」、「Set-PnPList」コマンドを利用します。
それぞれのコマンドで指定出来るオプション、指定出来ないオプションをカテゴリ別に表にまとめました。「New-PnPList」で指定出来ないものは、ライブラリ作成後に「Set-PnPList」で追加設定を行う必要があります。

・[New-PnPListコマンドレット](https://pnp.github.io/powershell/cmdlets/New-PnPList.html)
・[Set-PnPListコマンドレット](https://pnp.github.io/powershell/cmdlets/Set-PnPList.html)

### ①リスト名、説明、ナビゲーションの列挙

＜ 設定画面（GUI）＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587034/cf283d01-2b3b-b74e-1aa3-7168d6e44477.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587034/4a9a3f9b-8174-c191-e73f-084a9d4a48b9.png)

| 設定項目1 | 設定項目2 | New-PnPList | Set-PnPList |
|:-----------|:------------|:------------:|:------------:|
| 名前と説明 | 名前 | ○<br>Title | ○<br>Title |
|           | 説明 | × | ○<br>Description |
| ナビゲーション | このリストをサイド<br>リンク バーに表示する | ○<br>OnQuickLaunch | × |
| その他 | 内部名（Webアドレス） | ○<br>URL | ○<br>Path |
|  | アプリの種類 | ○<br>Template<br>(GenericList,DocumentLibrary<br>など) | × |

:::note info
表の見方は以下の通りです。
・該当列のコマンドで指定出来る場合は「○」、出来ないものは「×」となります。
・○の下に記載している単語は、指定するオプション名となります。
※コマンド実行例も併せてご確認ください。

```powershell
# New-PnPList 実行例
New-PnPList -Title "検証用ライブラリ01" -Url "testlib01" -Template DocumentLibrary -OnQuickLaunch

# Set-PnPList 実行例
Set-PnPList -Identity "検証用ライブラリ01" -Title "検証用ライブラリ02" -Path "testlib02" -Description "検証用のライブラリです"
```
:::

### ②バージョン設定（ライブラリの場合）
＜ 設定画面（GUI）＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587034/002f208f-71ed-45f3-3d10-a191c65874ab.png)

| 設定項目1 | 設定項目2 | New-PnPList | Set-PnPList |
|:-----------|:------------|:------------:|:------------:|
| コンテンツの承認 | 承認を必須にする | × | ○<br>EnableModeration |
| アイテムの<br>バージョン履歴 | 編集するたびに<br>バージョンを作成する | ○<br>EnableVersioning | ○<br>EnableVersioning<br>または<br>EnableMinorVersions ※1 |
|  | 次の数のメジャーバージョンを保存 | × | ○<br>MajorVersions |
|  | 次の数のメジャーバージョンの下書きを保存 | × | ○<br>MinorVersions ※2 |
| 下書きアイテムのセキュリティ<br>※3 | 下書きアイテムを<br>表示できるユーザー | × | ○<br>DraftVersionVisibility<br>(Approver,Author,Reader) |
| チェックアウトを必須にする | 編集前のチェックアウト | × | ○<br>ForceCheckout |

※1 メジャーバージョンの作成有無は「EnableVersioning」でTrueまたはFalseを指定し、マイナーバージョンも含める場合は「EnableMinorVersions $true」を指定します。
※2 コンテンツの承認が有効またはマイナーバージョンの作成が有効な場合のみ、設定値が反映されます。
※3 コンテンツの承認が無効の場合は設定不可となります。また、マイナーバージョンの作成が有効な場合は「Auther」「Reader」のみ選択可能となります。

### ③詳細設定（ライブラリの場合）
＜ 設定画面（GUI）＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587034/870aca8f-c566-ee2c-1900-a1baff31bde2.png)


| 設定項目1 | 設定項目2 | New-PnPList | Set-PnPList |
|:-----------|:------------|:------------:|:------------:|
| コンテンツタイプ | コンテンツタイプの管理を許可 | ○<br>EnableContentTypes | ○<br>EnableContentTypes |
| ドキュメントのテンプレート | テンプレートのURL | × | － |
| ブラウザーで開くドキュメント | 既定の表示方法 | × | ○<br>DefaultItemOpenInBrowser<br>※1 |
| 独自の送信先 | 送信先名 | × | － |
|  | URL | × | － |
| フォルダー | [新しいフォルダー] の表示 | × | ○<br>EnableFolderCreation |
| 検索 | リストアイテムの検索結果表示 | × | ○<br>NoCrawl |
| 既定以外のビューの<br>インデックス化 | 既定以外のビューの検索結果表示 | × | △<br>CrawlNonDefaultViews<br>※2 |
| ドキュメントライブラリ インデックスの再作成 |  | × | 不明 |
| オフライン クライアントの<br>使用制限 | ダウンロードの許可 | × | ×<br>ExcludeFromOfflineClient<br>※3 |
| サイト リソース ライブラリ | リソースライブラリとして設定 | × | 不明 |
| クイック プロパティの編集 | [クイック編集]と[詳細] の利用 | × | ○<br>DisableGridEditing |
| ダイアログ ボックス |  | × | 不明 |
| インデックスの自動管理 |  | × | 不明 |
| リストの表示 |  | × | ○<br>ListExperience<br>(Auto,NewExperience,ClassicExperience) |

※1 Set-PnPListで指定可能なパラメータなし。後述のコマンド処理により設定が可能。
　指定はTrue/Falseで行います。既定値の「サーバーの既定値を使用する（ブラウザーで開く）」を指定する値は見つかりませんでした。
  　また、Get-PnPListを実行すると「DefaultItemOpenInBrowser」の値はブランクとなり、「DefaultItemOpenUseListSetting」がTrueとなります。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587034/a108aa49-b7ae-1131-d2cd-5ea8f0be9fdb.png)

※2 コマンド自体は正常に実行されますが、パラメータには反映されませんでした。後述のコマンド処理により設定が可能。
※3 オプション名は記載のものと推測されますが、コマンドを実行してもパラメータに反映されませんでした。後述のコマンド処理でも同様に反映不可となりました。

:::note info
上記の※1、※2で記載した別方法によるコマンド処理は以下となります。この処理を利用することで、Set-PnPListで直接指定が出来ないものも、一部設定が可能でした。

```powershell
$list = Get-PnPList -Identity "ライブラリの表示名"

# ※1（ブラウザーで開くドキュメント）の場合
# $True=ブラウザーが既定、$False=クライアントアプリケーションが既定
$list.DefaultItemOpenInBrowser = $false

# ※2（既定のビュー以外のインデックス化）の場合
$list.CrawlNonDefaultViews = $false

$list.Update()
Invoke-PnPQuery
```

【参考】[モダンリストとライブラリのエクスペリエンスをオプトアウトする](https://learn.microsoft.com/ja-jp/sharepoint/dev/transform/modernize-userinterface-lists-and-libraries-optout#opting-out-at-list-level)
:::

### ④ライブラリの権限
＜ 設定画面（GUI）＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3587034/43e011ef-24bb-3b95-9d8c-d8642bcfa32c.png)

| 設定項目1 | 設定項目2 | New-PnPList | Set-PnPList |
|:-----------|:------------|:------------:|:------------:|
| このリストに対する権限 | 権限の継承／中止 | × | ○<br>(BreakRoleInheritance [中止]),<br>ResetRoleInheritance [継承]) |

※ BreakRoleInheritanceを指定して実行すると、権限の継承中止に加え、それまで付与されていたSharePointグループも削除される場合がありますので、実行後にGUIでも確認することをお奨めします。

# 最後に
リストに比べると、バージョン管理の設定項目が増えていたり、ファイル操作に関する設定項目が見られるのがライブラリの特徴かと思います。
リスト同様に、ほとんどの項目はPowerShellでも設定が出来そうでしたが、テンプレートのURLなどファイル自体の修正が必要なものなどは、GUIから実施したほうが良さそうでした。

# 関連記事
第1回：[【SharePoint】PnP.PowerShellだけでアプリの設定がどこまでできるか - リスト編](https://qiita.com/yuki_asa/items/3765ae7dcd972ba4a6c5)