查找运行任意 Exchange cmdlet 所需的权限
您可以使用 PowerShell,查找运行任何 Exchange 或 Exchange Online cmdlet 所需的权限。此过程介绍了为您提供指定 cmdlet 访问权限的基于角色的访问控制 (RBAC) 管理角色和角色组,即使您的组织已具有自定义角色、自定义角色组或自定义角色分配。
在开始之前,您需要知道什么?
估计完成该过程的时间:不超过 5 分钟。
只能使用 PowerShell 执行这些过程。
基本上,您需要以管理员的身份来完成此过程。 具体来说,您需要 Get-ManagementRole 和 Get-ManagementRoleAssignment cmdlet 的访问权限。 默认情况下,仅视图配置 或 角色管理 角色授予对这些 cmdlet 的访问权限,这些角色默认仅分配给 仅限视图的组织管理和****组织管理 角色组。
本文中的过程不适用于安全&合规性 PowerShell 或独立的 Exchange Online Protection (EOP) PowerShell (没有 Exchange Online 邮箱的 Microsoft 365 组织) 。 有关这些环境中权限的详细信息,请参阅以下文章:
提示
是否有任何疑问? 在 Exchange 论坛中寻求帮助。 访问论坛: Exchange Server 或 Exchange Online。
使用 PowerShell 查找运行 cmdlet 所需的权限
如果尚未打开感兴趣的 Exchange PowerShell 环境:
- Exchange Online: 连接到 Exchange Online PowerShell。
- Exchange Server:使用远程 PowerShell 打开 Exchange Management Shell 或 连接到 Exchange 服务器。
替换
<Cmdlet>并选择<Parameter1>,<Parameter2>,...使用要使用的值,并运行以下命令:$Perms = Get-ManagementRole -Cmdlet <Cmdlet> [-CmdletParameters <Parameter1>,<Parameter2>,...]注意:如果指定多个参数,则仅返回包含 包含所有 参数的 cmdlet 的角色。
运行以下命令:
$Perms | foreach {Get-ManagementRoleAssignment -Role $_.Name -Delegating $false | Format-Table -Auto Role,RoleAssigneeType,RoleAssigneeName}
解释结果
结果包含以下信息:
角色:指示用于访问 cmdlet 或 cmdlet 和参数组合的角色。 请注意,以"我的"开头的角色名称都是允许常规用户对自己拥有的对象进行操作(例如,自己的邮箱或通讯组)的用户角色。
RoleAssigneeType 和 RoleAssigneeName:这些值是相互关联的:
- RoleAssigneeType 是分配了角色的对象类型。 对于管理员角色,此值通常是一个角色组,但也可以是角色分配策略、安全组或用户。
- RoleAssigneeName 是角色组、角色分配策略、安全组或用户的名称。
疑难解答
如果没有结果该怎么办?
验证您输入的 cmdlet 和参数名称是否正确。
指定的参数实际上可用于单个角色中的 cmdlet。 运行第二个命令之前,请尝试在第一个命令中仅指定 cmdlet 名称。 然后,在运行第二个命令之前,一次向第一个命令添加一个参数。
否则,任何结果都不可能由以下条件之一引起:
- cmdlet 或参数是在默认情况下未分配给任何角色组的角色中定义的。
- 该 cmdlet 或参数在环境中不可用。 例如,在本地 Exchange 环境中指定了 Exchange Online cmdlet 或 Exchange Online 参数。
若要在环境中查找角色, (包含 cmdlet 或参数的任何) ,<Parameter1>,<Parameter2>,...请使用<Cmdlet>要使用的值替换并可选地运行以下命令:
Get-ManagementRoleEntry -Identity *\<Cmdlet> [-Parameters <Parameter1>,<Parameter2>,...]
注意:可以在 cmdlet 和参数名称中使用通配符 (*) ,例如 *-Mailbox* ,) (。
如果命令返回错误消息,指示找不到该对象,则该 cmdlet 或参数在您的环境中不可用。
如果命令返回结果,则该 cmdlet 或参数在环境中可用,但不需要将所需角色分配给任何角色组。 若要查找未分配给任何角色组的角色,请运行以下命令:
$na = Get-ManagementRole; $na | foreach {If ((Get-ManagementRoleAssignment -Role $_.Name -Delegating $false) -eq $null) {$_.Name}}
相关过程
包括管理角色范围
管理角色范围 (特别是写入范围) 定义 cmdlet 可以操作的位置。 例如,整个组织或仅针对特定用户对象。
若 要在“使用 PowerShell”中包含范围信息以查找运行 cmdlet 输出所需的权限 ,请添加 *Scope* 到第二个命令:
$Perms | foreach {Get-ManagementRoleAssignment -Role $_.Name -Delegating $false | Format-List Role,RoleAssigneeType,RoleAssigneeName,*Scope*}
有关管理角色范围的详细信息,请参阅 “了解管理角色范围”。
查找分配给特定用户的所有角色
若要查看分配给特定用户的所有角色,请替换 <UserIdentity> 为用户的名称、别名或电子邮件地址,并运行以下命令:
Get-ManagementRoleAssignment -RoleAssignee <UserIdentity> -Delegating $false | Format-Table -Auto Role,RoleAssigneeName,RoleAssigneeType
例如:
Get-ManagementRoleAssignment -RoleAssignee julia@contoso.com -Delegating $false | Format-Table -Auto Role,RoleAssigneeName,RoleAssigneeType
注意: RoleAssignee 参数向用户返回直接角色分配 (不常见的) 和通过用户在角色组中的成员身份授予给用户的间接角色分配。
查找分配了特定角色的所有用户
若要查看分配有特定角色的所有用户,请替换 <Role name> 为角色名称并运行以下命令:
Get-ManagementRoleAssignment -Role "<Role name>" -GetEffectiveUsers -Delegating $false | Where-Object {$_.EffectiveUserName -ne "All Group Members"} | Format-Table -Auto EffectiveUserName,Role,RoleAssigneeName,AssignmentMethod
例如:
Get-ManagementRoleAssignment -Role "Mailbox Import Export" -GetEffectiveUsers -Delegating $false | Where-Object {$_.EffectiveUserName -ne "All Group Members"} | Format-Table -Auto EffectiveUserName,Role,RoleAssigneeName,AssignmentMethod
查找角色组的成员
若要查看特定角色组的成员,请替换 <Role group name> 为角色组的名称并运行以下命令:
Get-RoleGroupMember "<Role group name>"
例如:
Get-RoleGroupMember "Organization Management"
注意:若要查看所有可用角色组的名称,请运行 Get-RoleGroup。