sharepoint サイトコレクション管理者を操作する
目的
Blogで少し昔のネタを書こうと思ってもまとまらないことが多々あり、今回は最近使ったスクリプトをネタにする
一括でできなければ膨大な時間がかかるものなのでその時間を短縮できたということで
テナント上のすべてのサイトのサイトコレクション管理者に特定のユーザーを追加する方法をまとめる もちろんPowershell
前提となる権限
sharepointサイトを複数操作するため、実行ユーザーにテナントのsharepoint管理者、またはそれを内包する上位権限が必須
前提となる環境
- Powershellは管理者権限で実行
- Powershell上でモジュール導入とPowershellメジャーバージョンが5であることを確認
# モジュール導入
> Install-Module -Name Microsoft.Online.SharePoint.PowerShell
> Import-Module Microsoft.Online.SharePoint.PowerShell
# Major version 5 を確認
> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 1 19041 5129
実行処理
まずはコード全体
# sharepoint管理センターURLを指定
> $adminUrl = "https://ex-admin.sharepoint.com"
# 追加したいユーザーのメールアドレス
> $userEmail = "mail"
# ログイン
> Connect-SPOService -Url $adminUrl
# テナント上のサイトをすべて取得
> $sites = Get-SPOSite -Limit All
# サイトを取得できているか表示確認
> $sites
# エラー情報を格納するリスト
> $failedSites = @()
# 各サイトに対して処理を実行
>foreach ($site in $sites) {
> Write-Host "Processing site: $($site.Url)"
> try {
> Set-SPOUser -Site $site.Url -LoginName $userEmail -IsSiteCollectionAdmin $true
> Write-Host "Successfully added Site Collection Admin to $($site.Url)"
> } catch {
> Write-Host "Error adding to $($site.Url): $_"
> # エラー情報をオブジェクトとしてリストに追加
> $failedSites += [PSCustomObject]@{
> SiteUrl = $site.Url
> ErrorMessage = $_.Exception.Message
> }
> }
>}
注意点
- adminUrlは-adminのつく管理センターのURLを指定します
- テナント上のサイトをすべて取得したら表示して確認しましょう
- 最後に$failedSitesを実行すると追加に失敗したサイトとエラー内容を確認できる
おまけ
ついでにいつも手動でやっている権限グループへの追加をPowershellで実施できることも確認した
#PnPを使用するためPowershellバージョンが7以上か確認
> $PSVersionTable.PSVersion
Major Minor Patch PreReleaseLabel BuildLabel
----- ----- ----- --------------- ----------
7 4 6
# 1度だけ実行
> Install-Module -Name PnP.PowerShell
> Import-Module PnP.PowerShell
# 対象のサイトを指定
> $siteUrl = "https://yourtenant.sharepoint.com/sites/f-fujita-test"
# 追加するユーザーを指定
> $userEmail = "user@domain.com"
# ログイン
> Connect-PnPOnline -Url $siteUrl -UseWebLogin
# 指定したサイトに存在するグループを確認
> Get-PnPGroup | Select Title
Title
-----
f-fujita-test メンバー
f-fujita-test 閲覧者
f-fujita-test 所有者
# 追加するグループを指定
> $groupName = "Titleから対象のグループを指定"
# グループに追加
> Add-SPOUser -Site $siteUrl -LoginName $userEmail -Group $groupName
注意点
- おまけはPowershell7で実施
- Connect-PnPOnlineはオプションによってはエラーとなるものもあった
まとめ
Powershell5で実施したけどもうすこしがんばれば7で再現できるかもしれないと思いつつうまくいった手順をのせた(PnPで統一していくべきなのか?)
普段全サイトに管理者を追加するなんてやらないけどいざ依頼されたりすると手動ではとてもやれないのでこういうスクリプトをすぐ取り出せると円滑に仕事進められるかも(ググったりしても前提がバラバラだったりうまくいかないこと経験あるよね)