sharepoint サイトコレクション管理者を操作する
2024-12-14
azblob://2024/12/12/eyecatch/2024-12-14-set-sharepoint-site-collection-admin-000.jpg

目的

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で統一していくべきなのか?)

普段全サイトに管理者を追加するなんてやらないけどいざ依頼されたりすると手動ではとてもやれないのでこういうスクリプトをすぐ取り出せると円滑に仕事進められるかも(ググったりしても前提がバラバラだったりうまくいかないこと経験あるよね)