对于分层通讯簿来讲,是根据企业的组织层次结构进行定义的。用户可以根据其熟悉的公司组织架构查找收件人。一般情况下,用户会使用全局地址列表或收件人的属性来查找或检索收件人。而全局地址列表中并未反映出组织中收件人的上下级管理管理或资历关系,是一个平面化的列表。而分层通讯簿体现了层次性,通过分层通讯簿可以很容易的在企业组织内找到内部收件人。
一、分层通讯簿的结构
分层通讯簿是由顶层根和子层节点组成的树状结构,其起点是一个在组织中设置的根,然后在这个根下面按需要设置各个层级的子层节点,在子层节点中可以放置收件人和下一级子层节点。包括根节点在内的各个节点均使用通讯组来实现。
在同一级结构中个对象的排序是通过SeniorityIndex参数来定义的,该值越大,则对象将被优先排列。如果该值相等,或为设置该值,将按照PhoneticDisplayName参数值,以正常的字母升序进行排序,如果PhoneticDisplayName参数值未设置,则是以DisplayName参数值的字母升序进行排序。
所以,要配置分层通讯簿通常需要如下几个步骤:
首先,创建用于组织顶层根节点的通讯组;
其次,创建各子层的通讯组,并将其指定为分层通讯簿的成员;
再次,向通讯组中添加组织成员,或下一级子节点的通讯组;
最后,为各层节点中的通讯组和收件人设置SeniorityIndex用于在同层级中排序。
二、在组织中启用并配置分层通讯簿
在Exchange Online组织中启用和管理分层通讯簿需要通过PowerShell来完成。其操作对象有组织配置、通讯组、用户以及联系人等。按照上述基本步骤,所涉及到的操作命令有:
Set-OrganizationConfig:设置HierarchicalAddressBookRoot参数,在组织中指定分层通讯组的根节点,其值为一个普通的通讯组或一个启用了邮件的安全组,不能是一个动态通讯组或Office 365组;
Set-Group:设置IsHierarchicalGroup参数,标识该组是否为一个分层通讯簿的节点组,其值为一个布尔值;
Set-Group、Set-User、Set-Contact:设置SeniorityIndex或/和PhoneticDisplayName参数,SeniorityIndex参数的值为一个自然数,数值越大排序优先越高。
1、规划并创建分层通讯簿所需的通讯组
需求描述,LPWR公司,分为公司办公室、产品支持、市场销售等三个大的部分,其中公司办公室又分为人力资源、会计、行政三个部门,并且李四、王五、赵六属于市场销售团队,张三是人力资源部的员工。同时由于职位资历问题,在分层通讯簿中,需要按上述描述顺序为部门和员工进行排序。
规划如下:
- LPWR的通讯组作为该公司分层通讯簿的根节点;
- 公司办公室(corpoffice)、产品支持(productsupport)、市场销售(mktsales)作为二层结构子节点;
- 人力资源(hr)、会计(accouting)、行政(administration)作为三层结构子节点。
2、创建通讯组
对于通讯组的创建可以通过EAC来完成也可以通过PowerShell来完成。如果使用PowerShell进行操作,则用New-DistributionGroup命令。
New-DistributionGroup -Name “LPWR” -Alias “lpwr”
New-DistributionGroup -Name “公司办公室” -Alias “corpoffice”
New-DistributionGroup -Name “产品支持” -Alias “productsupport”
New-DistributionGroup -Name “市场销售” -Alias “mktsales”
New-DistributionGroup -Name “人力资源” -Alias “hr”
New-DistributionGroup -Name “会计” -Alias “accouting”
New-DistributionGroup -Name “行政” -Alias “administration”
3、为Exchange Online组织指定分层通讯簿的根
该操作只能通过PowerShell的Set-OrganizationConfig命令来完成,
Set-OrganizationConfig -HierarchicalAddressBookRoot “LPWR”
Get-OrganizationConfig | Format-List HierarchicalAddressBookRoot
4、将上述各通讯组设置为分层通讯簿组
该操作只能通过PowerShell的Set-Group命令来完成。
Set-Group -Identity “LPWR” -IsHierarchicalGroup $true
Set-Group -Identity “公司办公室” -IsHierarchicalGroup $true
Set-Group -Identity “产品支持” -IsHierarchicalGroup $true
Set-Group -Identity “市场销售” -IsHierarchicalGroup $true
Set-Group -Identity “人力资源” -IsHierarchicalGroup $true
Set-Group -Identity “会计” -IsHierarchicalGroup $true
Set-Group -Identity “行政” -IsHierarchicalGroup $true
5、将子层级的通讯组添加到父层级的通讯组中作为其组成员
该操作可以使用EAC或PowerShell来完成均可。如果使用PowerShell进行操作,则用Update-DistributionGroupMember命令。
Update-DistributionGroupMember -Identity “LPWR” -Members “公司办公室”,”产品支持”,”市场销售”
Update-DistributionGroupMember -Identity “公司办公室” -Members “人力资源”,”会计”,”行政”
6、将用户添加到相应位置的通讯组中
该操作可以使用EAC或PowerShell来完成均可。如果使用PowerShell进行操作,则用Add-DistributionGroupMember命令。
Add-DistributionGroupMember -Identity “人力资源” -Member ‘[email protected]’
如果是多个用户需要一次性添加到一个通讯组,可以使用foreach循环操作。
$members=@(‘[email protected]’,’[email protected]’,’[email protected]’)
foreach($member in $members){Add-DistributionGroupMember -Identity “市场销售” -Member $member}
7、为分层通讯簿的节点组进行排序
通过以上的操作,分层通讯簿的基本结构已经完成,可以通过Outlook客户端的“通讯簿”工具中的“组织”来进行查看。
可以看到在组织中显示的各排序并未按照所要求的方式进行排序,而是按照字母来进行排序的,所以需要通过设置SeniorityIndex来修正。
通过Set-Group修改各通讯组的SeniorityIndex值:
Set-Group -Identity “公司办公室” -SeniorityIndex 90
Set-Group -Identity “产品支持” -SeniorityIndex 80
Set-Group -Identity “市场销售” -SeniorityIndex 70
Set-Group -Identity “人力资源” -SeniorityIndex 90
Set-Group -Identity “会计” -SeniorityIndex 80
Set-Group -Identity “行政” -SeniorityIndex 70
调整生效之后的结果如下:
另外,如果要调整用户,则使用Set-User修改各邮箱用户的SeniorityIndex值,但是需要注意如果用户是从本地活动目录同步到Office 365的Azure中的,那么无法修改该值。只能通过修改用户msDS-PhoneticDisplayName来实现。
8、查看分层通讯簿结构
创建完成后,除了在Outlook中可以查看外,还可以通过PowerShell查看确认其是否已经完成并符合预期层次结构。
Get-Group -ResultSize unlimited | where {$_.IsHierarchicalGroup -match ‘True’} | Format-Table SeniorityIndex,PhoneticDisplayName,DisplayName -Auto
Get-Group -ResultSize unlimited | Format-Table SeniorityIndex,PhoneticDisplayName,DisplayName -Auto
三、禁用Exchange Online分层通讯簿
禁用分层通讯簿,只需要将顶层根设置为空即可。对于各节点通讯组可以按需进行删除或保留,保留的通讯组建议将其IsHierarchicalGroup值设置为$false。
Set-OrganizationConfig -HierarchicalAddressBookRoot $null