使用 PowerShell 管理 SharePoint 用户和组

此文章适用于 Microsoft 365 企业版和 Office 365 企业版。

如果你是处理大量用户帐户或组列表的 SharePoint 管理员,并希望使用更简单的方式来管理它们,则可以使用适用于 Microsoft 365 的 PowerShell。

在开始之前,本文中的过程要求连接到 SharePoint。 有关说明,请参阅 连接到 SharePoint PowerShell

获取网站、组和用户的列表

开始管理用户和组之前,你需要获取网站、组和用户的列表。 然后可以使用此信息完成本文中的示例。

使用此命令获取租户中的网站列表:

Get-SPOSite

使用此命令获取租户中的组列表:

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

使用此命令获取租户中的用户列表:

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

将用户添加到站点管理员组

使用 Set-SPOUser cmdlet 将用户添加到网站集上的网站管理员列表。

$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

若要使用这些命令,请将引号内的所有内容(包括 < 和 > 字符)替换为正确的名称。

例如,这组命令将 Opal Castillo (用户名 opalc) 添加到 ContosoTest 网站集的 Contoso 租户中的网站管理员列表:

$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 ,我们使用 cmdlet 将用户添加到网站集上的 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

例如,让我们将 Glen Rife (用户名 glenr) 添加到 contosoTest 网站集的 contoso 租户中的审核员组:

$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 cmdlet 创建新的 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 可以使用 cmdlet 更新组属性(如权限级别)。

例如,让我们向 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 命令行管理程序和 CSV 文件,这是快速而简单的。 在此任务中,使用 Windows PowerShell 从网站集安全组中删除用户。 然后,使用 CSV 文件从不同网站中删除大量用户。

我们将使用“Remove-SPOUser”cmdlet 从网站集组中删除单个 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

例如,让我们从 contosotest 网站集的 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 文件是自动执行此任务的最快方法。

基本过程是,创建具有与 Windows PowerShell 脚本所需的参数对应的标头(列)的 CSV 文件。 可以在 Excel 中轻松创建此类列表,然后将其导出为 CSV 文件。 然后使用 Windows PowerShell 脚本循环访问 CSV 文件中的记录(行),将用户添加到组,将组添加到网站。

例如,让我们创建一个 CSV 文件来定义一组网站集、组和权限。 接下来,我们将创建一个 CSV 文件,以使用用户填充组。 最后,我们将创建并运行创建和填充组的Windows PowerShell脚本。

第一个 CSV 文件将一个或多个组添加到一个或多个网站集,并具有以下结构:

头:

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

第二个 CSV 文件将一个或多个用户添加到一个或多个组,并具有以下结构:

头:

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

然后必须将这两个 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-SPOSiteGroupAdd-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

这会获取这三个站点的数据,并将其写入本地驱动器上的文本文件。 参数 –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 变量通过命令的所有三个运行来保留其值。

但是,如果要对每个网站进行此操作,应该怎么做? 通过使用以下命令,您无需键入所有这些网站就可以进行操作:

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

PowerShell for Microsoft 365 入门