Oh! 365 blog

Office 365 と生きていく

Set-SPOSite のグループサイトコレクションに対する制限事項と PnP を使用した回避方法

グループサイトコレクション (Office 365 グループに関連づいたサイトコレクション) に対して Set-SPOSite コマンドを使用してプロパティを変更する場合、変更可能なプロパティに制限があります。

以下のようなエラーが出た場合は、本記事を参考にしてください。

Set-SPOSite : https://contoso.sharepoint.com/sites/testsite is a Groups site collection. The valid parameters for this type of site collection are...

例えば、Teams で新しいチームを作成した場合、Office 365 グループとチーム、および、Office 365 に関連づいたサイトコレクションがプロビジョニングされます。このグループサイトコレクションの設定を Set-SPOSite コマンドを使用して変更しようとした場合に、プロパティによってはコマンド実行時にエラーが発生します。回避方法は、CSOM や PnP モジュールする方法となります。

エラーについて


実際に変更不能なプロパティを指定して Set-SPOSite コマンドを実行すると、以下のようなエラーが発生します。

Set-SPOSite : https://XXXXXX.sharepoint.com/sites/XXXXXX is a Groups site collection. The valid parameters for this type of site collection are '-Identity', '-AllowSelfServiceUpgrade', '-DefaultLinkPermission', '-DefaultSharingLinkType', '-DenyAddAndCustomizePages', '-DisableCompanyWideSharingLinks', '-DisableSharingForNonOwners', '-LockState', '-Owner', '-ResourceQuota', '-ResourceQuotaWarningLevel', '-SandboxedCodeActivationCapability', '-SharingCapability', '-ShowPeoplePickerSuggestionsForGuestUsers', '-StorageQuota', '-StorageQuotaReset', and '-StorageQuotaWarningLevel'.

列挙されているプロパティのみが変更可能なプロパティを示します。エラーメッセージで検索すると Github にフィードバックされており、制限事項であることが言及されています。

フィードバックがいくつか報告されたため、Github のドキュメントにもグループサイトコレクションに対して有効なパラメータの記載があります。


対処方法

PnP コマンドを使用する手順を紹介します。

SPO 用の PnP モジュールが未インストールの環境の場合はモジュールをインストールします。

Install-Module SharePointPnPPowerShellOnline

例えば、Microsoft Automate (旧 Flow) や Power Apps などの有効化/無効化したい場合は以下のようになります。

# URL を指定して接続します。
Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/365groupsite -Credentials (Get-Credential)


# サイトのコンテキストを取得します。
$clientcontect = Get-PnPContext


# 変更したいサイトのプロパティを指定します。
$clientcontect.Site.DisableAppViews = $true;
$clientcontect.Site.DisableFlows = $true;

 

# ExcuteQuery を実行します。
Invoke-PnPQuery


おわりに


PnP のコミュニティが活発に開発を進めてくれているおかげで、本当に簡単になりました。上で使ったコマンドのリファレンスを以下に紹介しておきます。

docs.microsoft.com

docs.microsoft.com

余談ですが、今回使用した Invoke-PnPQuery コマンドをたどっていくと、PnP Core の ExecuteQueryRetry メソッドが使用されていました。

github.com

docs.microsoft.com

リトライ処理や待機時間の指定などができるようですが、Retry-After の値を考慮した実装ではないようです。多くのサイトコレクションに対して一括で処理したいなどの場合は、スロットリングに対応するベストプラクティスに従って、応答ヘッダから Retry-After の値をとるようにした方がベターだと思います。PnP プロジェクトはオープンソースであり、ソースコードもすべて公開されているので、興味があれば実装を見てみると楽しいですよ。

今回の投稿は以上です。