PowerShell を使用して SharePoint ユーザーとグループを管理する

この記事は、Microsoft 365 Enterprise および Office 365 Enterprise の両方に適用されます。

ユーザー アカウントまたはグループの大規模なリストを操作し、それらを簡単に管理する方法を必要とする SharePoint 管理者は、PowerShell for Microsoft 365 を使用できます。

開始する前に、この記事の手順で SharePoint に接続する必要があります。 手順については、「SharePoint PowerShell に接続する」を参照してください。

サイト、グループ、ユーザーの一覧を取得する

ユーザーとグループを管理する前に、サイト、グループ、ユーザーの一覧を取得する必要があります。 この情報は、この記事の例全体を通して使用できます。

次のコマンドを使用して、テナント内のサイトの一覧を取得します。

Get-SPOSite

次のコマンドを使用して、テナント内のグループの一覧を取得します。

Get-SPOSite | ForEach {Get-SPOSiteGroup -Site $_.Url} | Format-Table

次のコマンドを使用して、テナント内のユーザーの一覧を取得します。

Get-SPOSite | ForEach {Get-SPOUser -Site $_.Url}

サイト コレクション管理者グループにユーザーを追加する

コマンドレットを Set-SPOUser 使用して、サイト コレクションのサイト管理者の一覧にユーザーを追加します。

$tenant = "<tenant name, such as litwareinc for litwareinc.com>"
$site = "<site name>"
$user = "<user account name, such as opalc>"
Set-SPOUser -Site https://$tenant.sharepoint.com/sites/$site -LoginName $user@$tenant.com -IsSiteCollectionAdmin $true

これらのコマンドを使用するには、 および > 文字を含む<引用符内のすべてを正しい名前に置き換えます。

たとえば、この一連のコマンドは、Contoso テナントの ContosoTest サイト コレクションのサイト コレクション管理者の一覧に Opal Castillo (ユーザー名 opalc) を追加します。

$tenant = "contoso"
$site = "contosotest"
$user = "opalc"
Set-SPOUser -Site https://$tenant.sharepoint.com/sites/$site -LoginName $user@$tenant.com -IsSiteCollectionAdmin $true

これらのコマンドをコピーしてメモ帳に貼り付け、$tenant、$site、$userの変数値を環境の実際の値に変更し、これを SharePoint 管理シェル ウィンドウに貼り付けて実行できます。

他のサイト コレクション グループにユーザーを追加する

このタスクでは、 コマンドレットを Add-SPOUser 使用して、サイト コレクション上の SharePoint グループにユーザーを追加します。

$tenant = "<tenant name, such as litwareinc for litwareinc.com>"
$site = "<site name>"
$user = "<user account name, such as opalc>"
$group = "<group name name, such as Auditors>"
Add-SPOUser -Group $group -LoginName $user@$tenant.com -Site https://$tenant.sharepoint.com/sites/$site

たとえば、contoso テナントの ContosoTest サイト コレクションの Auditors グループに、Glen Rife (ユーザー名 glenr) を追加します。

$tenant = "contoso"
$site = "contosotest"
$user = "glenr"
$group = "Auditors"
Add-SPOUser -Group $group -LoginName $user@$tenant.com -Site https://$tenant.sharepoint.com/sites/$site

サイト コレクション グループを作成する

コマンドレットを New-SPOSiteGroup 使用して、新しい SharePoint グループを作成し、サイト コレクションに追加します。

$tenant = "<tenant name, such as litwareinc for litwareinc.com>"
$site = "<site name>"
$group = "<group name name, such as Auditors>"
$level = "<permission level, such as View Only>"
New-SPOSiteGroup -Group $group -PermissionLevels $level -Site https://$tenant.sharepoint.com/sites/$site

アクセス許可レベルなどのグループ プロパティは、コマンドレットを使用 Set-SPOSiteGroup して後で更新できます。

たとえば、contoso テナント内の contosotest サイト コレクションに、表示のみのアクセス許可を持つ監査グループを追加します。

$tenant = "contoso"
$site = "contosotest"
$group = "Auditors"
$level = "View Only"
New-SPOSiteGroup -Group $group -PermissionLevels $level -Site https://$tenant.sharepoint.com/sites/$site

グループからユーザーを削除する

場合によっては、あるサイトまたはすべてのサイトからユーザーを削除する必要があります。 たとえば、従業員がある部署から別の部署に異動した場合や、退職した場合などが該当します。 これは、ある従業員に対して UI で簡単に行うことができますが、あるサイトから別のサイトに完全な部門を移動する必要がある場合、これは簡単には行われません。

ただし、SharePoint Management Shell ファイルと CSV ファイルを使用すると、これは高速で簡単です。 このタスクでは、まず、Windows PowerShell を使用して、サイト コレクションのセキュリティ グループから 1 人のユーザーを削除します。 次に、CSV ファイルを使用して、複数の異なるサイトから多数のユーザーを削除します。

'Remove-SPOUser' コマンドレットを使用して、サイト コレクション グループから 1 人の Microsoft 365 ユーザーを削除して、コマンド構文を確認できるようにします。 構文の外観を次に示します。

$tenant = "<tenant name, such as litwareinc for litwareinc.com>"
$site = "<site name>"
$user = "<user account name, such as opalc>"
$group = "<group name name, such as Auditors>"
Remove-SPOUser -LoginName $user@$tenant.com -Site https://$tenant.sharepoint.com/sites/$site -Group $group

たとえば、contoso テナントの contosotest サイト コレクションのサイト コレクション監査グループから Bobby Overby を削除します。

$tenant = "contoso"
$site = "contosotest"
$user = "bobbyo"
$group = "Auditors"
Remove-SPOUser -LoginName $user@$tenant.com -Site https://$tenant.sharepoint.com/sites/$site -Group $group

現在参加しているすべてのグループから Bobby を削除するとします。 これを行う方法を次に示します。

$tenant = "contoso"
$user = "bobbyo"
Get-SPOSite | ForEach {Get-SPOSiteGroup –Site $_.Url} | ForEach {Remove-SPOUser -LoginName $user@$tenant.com -Site $_.Url}

警告

これは単なる例です。 たとえば、ユーザーが退職した場合など、ユーザーをすべてのグループから実際に削除しなければならないのでない限り、このコマンドを使用しないでください。

ユーザーおよびグループの大規模なリストの管理を自動化する

SharePoint サイトに多数のアカウントを追加し、アクセス許可を付与するには、Microsoft 365 管理センター、個々の PowerShell コマンド、または PowerShell と CSV ファイルを使用できます。 これらの選択肢の中では、CSV ファイルがこのタスクを自動化する最も簡単な方法になります。

基本的なプロセスは、CSV を作成し、ヘッダー (列) を Windows PowerShell スクリプトに必要なパラメーターに対応させることです。 Excel でこのようなリストを簡単に作成し、CSV ファイルとしてエクスポートできます。 次に、Windows PowerShell スクリプトを使用して CSV ファイル内のレコード (行) を反復処理し、ユーザーをグループに追加し、グループをサイトに追加します。

たとえば、サイト コレクション、グループ、アクセス許可のグループを定義する CSV ファイルを作成します。 次に、グループにユーザーを設定する CSV ファイルを作成します。 最後に、グループを作成して設定するWindows PowerShell スクリプトを作成して実行します。

最初の CSV ファイルは、1 つ以上のグループを 1 つ以上のサイト コレクションに追加します。このファイルの構造は以下のとおりです。

ヘッダー:

Site,Group,PermissionLevels

項目:

https://tenant.sharepoint.com/sites/site,group,level

ファイルの例を次に示します。

Site,Group,PermissionLevels
https://contoso.sharepoint.com/sites/contosotest,Contoso Project Leads,Full Control
https://contoso.sharepoint.com/sites/contosotest,Contoso Auditors,View Only
https://contoso.sharepoint.com/sites/contosotest,Contoso Designers,Design
https://contoso.sharepoint.com/sites/TeamSite01,XT1000 Team Leads,Full Control
https://contoso.sharepoint.com/sites/TeamSite01,XT1000 Advisors,Edit
https://contoso.sharepoint.com/sites/Blog01,Contoso Blog Designers,Design
https://contoso.sharepoint.com/sites/Blog01,Contoso Blog Editors,Edit
https://contoso.sharepoint.com/sites/Project01,Project Alpha Approvers,Full Control

2 番目の CSV ファイルは、1 つ以上のユーザーを 1 つ以上のグループに追加します。このファイルの構造は以下のとおりです。

ヘッダー:

Group,LoginName,Site

項目:

group,login,https://tenant.sharepoint.com/sites/site

ファイルの例を次に示します。

Group,LoginName,Site
Contoso Project Leads,bobbyo@contoso.com,https://contoso.sharepoint.com/sites/contosotest
Contoso Auditors,allieb@contoso.com,https://contoso.sharepoint.com/sites/contosotest
Contoso Designers,bonniek@contoso.com,https://contoso.sharepoint.com/sites/contosotest
XT1000 Team Leads,dorenap@contoso.com,https://contoso.sharepoint.com/sites/TeamSite01
XT1000 Advisors,garthf@contoso.com,https://contoso.sharepoint.com/sites/TeamSite01
Contoso Blog Designers,janets@contoso.com,https://contoso.sharepoint.com/sites/Blog01
Contoso Blog Editors,opalc@contoso.com,https://contoso.sharepoint.com/sites/Blog01
Project Alpha Approvers,robinc@contoso.com,https://contoso.sharepoint.com/sites/Project01

次の手順では、2 つの CSV ファイルをドライブに保存する必要があります。 CSV ファイルを使用し、アクセス許可とグループ メンバーシップを追加するコマンドの例を次に示します。

Import-Csv C:\O365Admin\GroupsAndPermissions.csv | ForEach {New-SPOSiteGroup -Group $_.Group -PermissionLevels $_.PermissionLevels -Site $_.Site}
Import-Csv C:\O365Admin\Users.csv | ForEach {Add-SPOUser -Group $_.Group –LoginName $_.LoginName -Site $_.Site}

スクリプトは CSV ファイルの内容をインポートし、列の値を使用して New-SPOSiteGroup コマンドと Add-SPOUser コマンドのパラメーターを設定します。 この例では、このファイルをドライブ C の O365Admin フォルダーに保存していますが、任意の場所に保存できます。

次に、同じ CSV ファイルを使用して、異なるサイト内のいくつかのグループの多数のユーザーを削除しましょう。 コマンドの例を次に示します。

Import-Csv C:\O365Admin\Users.csv | ForEach {Remove-SPOUser -LoginName $_.LoginName -Site $_.Site -Group $_.Group}

ユーザー レポートを生成する

いくつかのサイトのレポートを取得し、それらのサイトのユーザー、アクセス許可レベル、およびその他のプロパティを表示することができます。 以下に、構文の一例を示します。

$tenant = "<tenant name, such as litwareinc for litwareinc.com>"
$site = "<site name>"
Get-SPOUser -Site https://$tenant.sharepoint.com/sites/$site | select * | Format-table -Wrap -AutoSize | Out-File c\UsersReport.txt -Force -Width 360 -Append

上記のコードは、3 つのサイトのデータを取得して、ローカル ドライブ上のテキスト ファイルに書き込みます。 パラメーター –Append は、既存のファイルに新しいコンテンツを追加します。

たとえば、Contoso1 テナントの ContosoTest サイト、TeamSite01 サイト、および Project01 サイトでレポートを実行します。

$tenant = "contoso"
$site = "contosotest"
Get-SPOUser -Site https://$tenant.sharepoint.com/sites/$site | Format-Table -Wrap -AutoSize | Out-File c:\UsersReport.txt -Force -Width 360 -Append
$site = "TeamSite01"
Get-SPOUser -Site https://$tenant.sharepoint.com/sites/$site |Format-Table -Wrap -AutoSize | Out-File c:\UsersReport.txt -Force -Width 360 -Append
$site = "Project01"
Get-SPOUser -Site https://$tenant.sharepoint.com/sites/$site | Format-Table -Wrap -AutoSize | Out-File c:\UsersReport.txt -Force -Width 360 -Append

$site変数のみを変更する必要がありました。 $tenant変数は、コマンドの 3 つの実行すべてを通じて値を保持します。

一方、この操作をすべてのサイトに対して行うとしたら、どうなるでしょうか。 以下のコードを使用すれば、すべての Web サイトを入力することなく、このコマンドを使用できます。

Get-SPOSite | ForEach {Get-SPOUser –Site $_.Url} | Format-Table -Wrap -AutoSize | Out-File c:\UsersReport.txt -Force -Width 360 -Append

このレポートはかなり単純ですが、コードを追加すれば、より具体的なレポートや、その他の詳細情報が含まれるレポートを作成できます。 ただし、これは SharePoint 管理シェルを使用して SharePoint 環境内のユーザーを管理する方法を示す必要があります。

関連項目

SharePoint PowerShell に接続する

PowerShell を使用して SharePoint を管理する

PowerShell で Microsoft 365を管理する

Microsoft 365 用 PowerShell の使用を開始する