购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 如何使用PowerShell管理Office 365的角色和组

除了用户管理,角色和组的管理也是系统管理员的必备技能。因为,随着用户数量的增加,管理的工作量也会增大,所以各种管理职责需要由不同的管理人员承担,这就促使我们把各种管理权限分配出去。用户数量的增加还带来另外一个问题,就是用户管理复杂程度的增加。通过按照不同部门、地域创建不同的组,把用户放到这些组里进行管理可以显著提高管理的效率。

2.3.1 如何管理Office 365的角色

1. 角色的查看

随着微软不断添加新的应用到Office 365中,新的管理员角色也会随之增加。例如Teams Service Administrator目前只能使用PowerShell命令进行查询,还未出现在Office 365管理中心的角色列表中。在用户属性对话框的“角色”项下,单击“编辑”按钮,并在随后弹出的“编辑用户角色”对话框中,目前只列出了10种管理员角色,分为“全局管理员”和“自定义的管理员”两大类,后者又进一步分为9种更为具体的角色。而Office 365的全部角色列表可以使用下面的PowerShell命令获得。命令和输出结果如下:

O365 PS > Get-MsolRole | Select-Object Name

我们将命令结果中的这36个角色进行分类,并对重点的角色进行详细的介绍。

(1)全局管理员是租户中具有最高特权的管理员角色,这个角色的成员可以查看、配置或修改这个租户中所有应用的属性,也可以将其他管理员角色分配给其他用户。按照最佳管理实践,应该将全局管理员角色分配给企业中的多个用户。因为,如果租户中仅有的一个全局管理员因为各种情况无法登录时,由于其拥有最高的管理权限,所以只有全局管理员才能进行管理工作便无法正常进行。要想为其他用户分配全局管理员角色,操作者本身首先也要是一个全局管理员。

在Office 365管理中心的Office 365角色列表的“编辑用户角色”对话框中,我们可以看到的角色名称是“全局管理员”或Global Administrator,而使用Get-MsolRole命令列出的全部角色列表中却找不到这个角色。实际上,全局管理员在使用PowerShell命令为其他用户分配该角色的时候,该角色对应的角色名称是Company Administrator。为其他用户分配全局管理员角色的命令如下:

O365 PS > Add-MsolRoleMember -RoleName "Company Administrator" `

>> -RoleMemberEmailAddress "user10@office365ps.partner.onmschina.cn"

上述命令成功执行后,用户user 10会被分配全局管理员的角色。我们在使用PowerShell命令为用户分配角色时,要留意角色和角色名称之间的差异。密码管理员这个角色在PowerShell中的角色名称是Helpdesk Administrator。

(2)有一类角色通过角色的名称就能了解它们的作用,它们是管理Office 365各项应用的管理员角色,拥有在各自应用中的管理员权限,可对相关应用中的设置进行修改,例如,Exchange Service Administrator、SharePoint Service Administrator、Lync Service Administrator、Power BI Service Administrator、Teams Service Administrator、CRM Service Administrator等。

(3)有一类角色虽然不是某项应用的管理员角色,但是它们承担了某些公共的管理职责,例如对用户进行管理,对账单进行管理等。表2-1中列举了其中几个重要的角色。

表2-1

(4)角色Customer LockBox Access Approver很少被提起,为了能了解这个角色的作用,我们首先需要知道什么是Lockbox Requests。当用户使用Office 365遇到问题时,微软的技术支持工程师为了进行排错,有可能会接触到用户的数据,而LockBox Requests就是让用户可以对微软工程师访问其数据的行为进行控制,但是,并不是每次Office 365问题排错都会用到LockBox Access,如果微软工程师没有机会接触到用户的数据,就没有LockBox Access的问题。角色Customer LockBox Access Approver就是为批准LockBox Requests而设立的。另外,LockBox只出现在Office 365 E5的产品订阅中。

(5)角色Device Managers已经不再使用了,而Partner Tier1 Support和Partner Tier2 Support这两个角色不是通用角色,我们也不要轻易使用。

2. 角色的分配

(1)在Office 365管理中心中为用户分配管理员角色的步骤如下。

① 在Office 365管理中心左侧的导航栏中单击“用户”按钮,在弹出的扩展菜单上单击“活跃用户”按钮。

② 在活跃用户列表中选择要分配管理员角色的用户。

③ 在页面右侧弹出的用户属性对话框中的“角色”项中单击“编辑”按钮。

④ 在弹出的“编辑用户角色”对话框中,通过选择“全局管理员”或选择“自定义的管理员”各个角色左侧的复选框,将管理员角色分配给该用户,如图2-23所示。

图2-23

要想同时给多个用户分配相同的管理员角色,我们就需要在“活跃用户”的列表中,选择那些即将被赋予管理员角色的用户显示姓名左侧的复选框;然后,在页面右侧弹出的“批量操作”菜单中单击“编辑用户角色”按钮,如图2-24所示。

图2-24

在使用PowerShell命令为多个用户分配相同的管理员角色时,我们要注意,如果我们将多个用户名以逗号分隔字符串的形式赋给RoleMemberEmailAddress参数,会收到以下报错信息。命令和输出结果如下:

O365 PS > Add-MsolRoleMember -RoleName "Helpdesk Administrator" `

>> -RoleMemberEmailAddress "user18@office365ps.partner.onmschina.cn, `

>> user19@office365ps.partner.onmschina.cn, `

>> user20@office365ps.partner.onmschina.cn"

上述问题并不是因为权限不足导致的,因为我们创建到Office 365租户的连接时,使用的是全局管理员的用户凭据。

我们可以使用PowerShell循环结构来解决上述问题。命令如下:

O365 PS > $MemberEmail = @("user18@office365ps.partner.onmschina.cn", `

>> "user19@office365ps.partner.onmschina.cn", `

>> "user20@office365ps.partner.onmschina.cn")

O365 PS > $MemberEmail | % {Add-MsolRoleMember `

>> -RoleName "Helpdesk Administrator" -RoleMemberEmailAddress $_}

首先把用户的邮件地址放到一个字符串数组中,接着再利用循环结构为他们逐一分配密码管理员的角色。

(2)在Office 365管理中心的活跃用户列表中,我们无法很直观地进行角色的批量撤销操作。当我们选择被分配了相同或不同管理角色的多个用户显示姓名左侧的复选框,并在页面右侧弹出的“批量操作”菜单中单击“编辑用户角色”按钮,弹出“编辑角色”对话框后,在该对话框中,会显示角色依然是“用户(没有管理员访问权限)”,如图2-25所示。

图2-25

这时,虽然这些用户在对话框中显示没有被赋予管理员的角色,但是如果我们单击“保存”按钮,分配给这些用户的所有角色都将被撤销。为了避免误操作,我们可以一次只选中一个用户,在页面右侧弹出的用户属性对话框中的“角色”项下,单击“编辑”按钮,然后在弹出的“编辑用户角色”对话框中,选择“用户(没有管理员访问权限)”选项,来撤销该用户的管理员角色。

使用Remove-MsolRoleMember命令来进行用户角色的批量撤销操作,相比而言可控性更好。命令如下:

O365 PS > $MemberEmail = @("user18@office365ps.partner.onmschina.cn", `

>> "user19@ office365ps.partner.onmschina.cn")

O365 PS > $MemberEmail | % {Remove-MsolRoleMember `

>> -RoleName "Helpdesk Administrator"-RoleMemberType User `

>> -RoleMemberEmailAddress $_}

因为RoleMemberEmailAddress参数不接受逗号分隔形式的字符串,我们还是用PowerShell循环来进行批量撤销的操作,最后我们可以用Get-MsolRoleMember命令确认删除的结果。

(3)在Office 365管理中心中很难查看被分配了特定管理员角色的用户,例如,有哪些用户被分配了密码管理员的角色。使用PowerShell命令却可以轻松搞定。这里有一点需要注意,Get-MsolRoleMember命令只接受RoleObjectId参数,而不是RoleName,所以需要将RoleName转化成RoleObjectId。命令和输出结果如下:

O365 PS > Get-MsolRoleMember `

>> -RoleObjectId (Get-MsolRole -RoleName "Helpdesk Administrator").ObjectId |

>> Select-Object EmailAddress, DisplayName

2.3.2 如何管理Office 365的安全组

1. 安全组的管理命令

打开Office 365管理中心,在左侧的导航栏中单击“组”按钮,在弹出的扩展菜单中选择“组”,如图2-26所示。

图2-26

(1)在组列表页面单击“+添加组”按钮,然后在页面右侧弹出的“添加组”对话框中,通过下拉列表框选择“安全”组类型,并键入组名称,最后单击“添加”按钮添加组,如图2-27所示。

图2-27

在添加组的对话框中创建安全组时,我们无法指定组的所有者(创建Office 365类型的组的时候,可以同时选择组的所有者)。只有在该组创建后,在组列表中选择这个安全组的组名左侧的复选框,并在页面右侧弹出的组属性对话框中单击“所有者”项下的“编辑”按钮,才能添加组的所有者,如图2-28所示。

图2-28

相比而言,使用PowerShell命令添加安全组的同时就可以方便地为这个安全组指定所有者。注意:用ManagedBy参数指定组的所有者时,如果使用了用户的显示名称或用户的电子邮件地址,均会报如下的错误。命令和输出结果如下:

O365 PS > New-MsolGroup -DisplayName "secHR" `

>> -ManagedBy "admin@office365ps.partner.onmschina.cn"

使用之前介绍过的Get-MsolUser命令获取即将成为该组管理员的用户对象标识,接着把这个对象标识作为参数值赋给ManagedBy参数,可以解决以上问题。命令的输出结果显示secHR安全组已经建立。命令和输出结果如下:

O365 PS > New-MsolGroup -DisplayName "secHR" -ManagedBy (Get-MsolUser `

>> -UserPrincipalName "admin@office365ps.partner.onmschina.cn").ObjcectId

注意

如果仅安装了Microsoft Azure Active Directory Module for Windows PowerShell模块,使用模块中的New-MsolGroup命令,是无法创建“Office 365”、“通讯组列表”和“启用邮件的安全”这三种类型的组的。至于如何创建这三种类型的组,我们会在后面使用PowerShell管理Exchange Online的部分进行介绍。

(2)在组列表上,可以通过选择“查看”下拉列表框中的组类型来显示不同类型组的列表,而通过在“搜索”文本框中键入部分或完整的组名来查找特定名称的组,如图2-29所示。

图2-29

若要用PowerShell命令的方式来获取租户内的组信息,可以仅使用Get-MsolGroup命令,不带任何参数,来列出租户中所有的组。命令和输出结果如下:

O365 PS > Get-MsolGroup

注意:与New-MsolGroup命令只能用来创建新的安全组不同,Get-MsolGroup命令不仅会列出本租户中的安全组,还会一并列出所有其他类型的组,而我们可以用GroupType这个参数来控制结果中仅显示所有的安全组。命令和输出结果如下:

O365 PS > Get-MsolGroup -GroupType Security

在Office 365管理中心的组列表上的搜索文本框中键入部分组名进行搜索的时候,这个搜索字符串需要从特定组名称的头部开始进行截取,否则,将不会返回正确的搜索结果。类似地,如果使用Get-MsolGroup命令搭配SearchString参数查找有特定名称的组时,也需要保证这个被赋给SearchString参数的字符串是从特定组名称的头部开始截取的。然而,如果我们换一种思路来解决这个问题,即可让该搜索字符串是名称字符串中的任意子集。命令和输出结果如下:

O365 PS > Get-MsolGroup -GroupType Security |

>> Where-Object { $_.DisplayName -match "HR"}

(3)我们可以使用Remove-MsolGroup命令来移除不再需要的安全组,唯一需要注意的是,被移除的组是用组的ObjectId来表示的,而非组的名称。命令和输出结果如下:

O365 PS > Remove-MsolGroup `

>> -ObjectId (Get-MsolGroup -SearchString "secHR").ObjectId

2. 安全组的组成员管理

(1)在Office 365管理中心中向特定的安全组添加成员的方法如下:在组列表页面选择该安全组的组名左侧的复选框,接着在页面右侧弹出的组属性对话框中单击成员项下的“编辑”按钮,并在随后弹出的组成员管理对话框中单击“+添加成员”按钮,如图2-30所示。

图2-30

在选择组的成员时,可以在“搜索以添加成员”文本框中键入用户标识或用户的显示姓名,来快速定位需要添加到这个安全组的成员,如图2-31所示。

图2-31

以上方法只能按照用户名进行搜索。要想把销售部的所有同事添加到secSales组,我们事先需要按照每个用户所属的组对用户进行分类,然后才能在成员搜索文本框中通过逐个搜索用户名的这种方式来进行添加。如果销售部的同事比较多,将会带来不小的工作量。

使用Add-MsolGroupMember命令配合相应的条件筛选,可以很方便地实现上述需求。但是我们要注意,这条命令的GroupObjectId参数只接受安全组的对象标识,而不是安全组的名称。命令如下:

O365 PS > $grpID = (Get-MsolGroup -SearchString "secSales").ObjectId

O365 PS > Get-MsolUser | ForEach-Object { if($_.Department -match "Sales") {

>> $userID = $_.ObjectID

>> Add-MsolGroupMember -GroupObjectId $grpID `

>> -GroupMemberType user -GroupMemberObjectId $userID}

>> }

我们先把安全组的对象标识存储在$grpID这个变量中,然后通过Get-MsolUser命令查询本租户中的所有用户,并查看每个用户的部门名称,如果该用户属于Sales部门,就将其添加到secSales组中。在上述命令片段中我们使用了管道操作符,用来对本租户中的所有用户应用组的筛选条件,并将符合条件的用户添加到secSales组。

(2)通过在Office 365管理中心的组列表中选择特定组的组名左侧的复选框,然后在页面右侧弹出的组属性对话框中查看成员项下包括的用户,可以确认该特定安全组中包括的成员,如图2-32所示。

图2-32

若要用PowerShell命令的方式来查看安全组的成员,使用Get-MsolGroupMember命令即可。类似地,我们只能使用安全组的对象标识符,而不能使用安全组的组名。命令和输出结果如下:

O365 PS > Get-MsolGroupMember `

>> -GroupObjectId (Get-MsolGroup -SearchString "secSales").ObjectId

如果要查看特定用户隶属于哪些安全组,可以在Office 365管理中心的活跃用户列表中选择用户显示姓名左侧的复选框选择该用户,然后在页面右侧弹出的用户属性对话框中查看组成员身份项下列出的组,即可确定该用户是哪些安全组的成员,如图2-33所示。

图2-33

以下PowerShell脚本片段,使用了两个循环来实现类似的功能,外层循环列出了租户中的每个安全组,并使用Get-MsolGroupMember命令查询每个组里面包含的用户;内层循环通过用户标识,判断在当前组中是否存在目标用户,如果存在该目标用户,就输出这个组名。其中的条件判断使用了字符串的StartsWith()方法来判断当前用户的邮件地址是否以$user这个变量开头。命令和输出结果如下:

O365 PS > $user = "user03"

O365 PS > Get-MsolGroup -GroupType Security | ForEach-Object {

>> $grpNAME = $_.DisplayName

>> $grpID = $_.ObjectId

>> Get-MsolGroupMember -GroupObjectId $grpID | ForEach-Object {

>> $userEMAIL = $_.EmailAddress

>> if ($userEMAIL.StartsWith($user)) {

>> Write-Host $grpNAME}

>> }

>> }

(3)在Office 365管理中心中,我们可以通过编辑用户属性对话框中的组成员身份或者编辑组属性对话框中的成员列表,来实现删除特定安全组中的成员用户的目的。相应地,我们可以使用Remove-MsolGroupMember命令来删除特定安全组中的成员,要注意的是,使用这条命令时,GroupObjectId、GroupMemberType、GroupMemberObjectId这三个参数是必选的。命令如下:

O365 PS > Remove-MsolGroupMember `

>> -GroupObjectId (Get-MsolGroup -SearchString "secSales").ObjectId `

>> -GroupMemberType User -GroupMemberObjectId (Get-MsolUser `

>> -UserPrincipalName "user03@office365ps.partner.onmschina.cn").ObjectId K6RROa1hZvuktj1ktXChJv+Pjxo8bGX1HRJEmYOGn48TW1A3JZY9b7RjPDoPyr/J

点击中间区域
呼出菜单
上一章
目录
下一章
×