查找运行任意 Exchange cmdlet 所需的权限

您可以使用 PowerShell,查找运行任何 Exchange 或 Exchange Online cmdlet 所需的权限。 此过程介绍了为您提供指定 cmdlet 访问权限的基于角色的访问控制 (RBAC) 管理角色和角色组,即使您的组织已具有自定义角色、自定义角色组或自定义角色分配。

提示

目前,本文中的过程不适用于 Exchange Online PowerShell 中的 Microsoft 365 组 cmdlet (*-UnifiedGroup) 。

开始前,有必要了解什么?

  • 估计完成该过程的时间:不超过 5 分钟。

  • 只能使用 PowerShell 来执行这些过程。

  • 基本上,您需要以管理员的身份来完成此过程。 具体来说,您需要 Get-ManagementRoleGet-ManagementRoleAssignment cmdlet 的访问权限。 默认情况下,Exchange Online中的“仅查看配置”或“角色管理”角色授予对这些 cmdlet 的访问权限,默认情况下,这些角色仅分配给“仅查看组织管理”和“组织管理”角色组。

    在基于云的组织中,Microsoft Entra ID 中全局管理员角色的成员身份为你提供所需的权限。

  • 本文中的过程不适用于安全性 & 合规性 PowerShell。 有关安全性 & 合规性权限的详细信息,请参阅以下文章:

提示

是否有任何疑问? 在 Exchange 论坛中寻求帮助。 请访问以下论坛:Exchange ServerExchange Online

使用 PowerShell 查找运行 cmdlet 所需的权限

  1. 如果尚未打开你感兴趣的 Exchange PowerShell 环境:

  2. (可选)<Parameter1>,<Parameter2>,...将 和 替换为<Cmdlet>要使用的值,并运行以下命令:

    $Perms = Get-ManagementRole -Cmdlet <Cmdlet> [-CmdletParameters <Parameter1>,<Parameter2>,...]
    

提示

如果指定多个参数,则仅返回包含 cmdlet 上 所有 指定参数的角色。

  1. 运行以下命令:

    $Perms | foreach {Get-ManagementRoleAssignment -Role $_.Name -Delegating $false | Format-Table -Auto Role,RoleAssigneeType,RoleAssigneeName}
    

解释结果

结果包含以下信息:

  • 角色:指示授予对 cmdlet 或 cmdlet 和参数组合的访问权限的角色。 以“My”开头的角色名称是允许普通用户对其拥有 (的对象进行操作的用户角色,例如,他们自己的邮箱或通讯组) 。

  • RoleAssigneeTypeRoleAssigneeName:这些值相互关联:

    • RoleAssigneeType 是具有为其分配角色的对象类型。 对于管理员角色,此值通常是角色组,但它也可以是角色分配策略、安全组或用户。
    • RoleAssigneeName 是角色组、角色分配策略、安全组或用户的名称。

疑难解答

如果没有结果该怎么办?

  • 验证您输入的 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