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

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

在开始之前,您需要知道什么?

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

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

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

  • 本文中 &的过程在安全与合规中心 PowerShell 或独立 Exchange Online Protection (EOP) PowerShell (Microsoft 365 组织中不起作用,Exchange Online邮箱) 。 有关这些环境中的权限详细信息,请参阅以下文章:

提示

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

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

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

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

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

    注意:如果指定多个参数,则仅返回包含 cmdlet 以及所有参数的角色。

  3. 运行以下命令:

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

解释结果

结果包含以下信息:

  • Role: 指示授予对 cmdlet 或 cmdlet 和参数组合的访问权限的角色。 请注意,以"我的"开头的角色名称都是允许常规用户对自己拥有的对象进行操作(例如,自己的邮箱或通讯组)的用户角色。

  • RoleAssigneeTypeRoleAssigneeName: 这些值相互关联:

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

疑难解答

如果没有结果该怎么办?

  • 验证您输入的 cmdlet 和参数名称是否正确。

  • 您指定的参数实际上可用于单个角色中的 cmdlet。 在运行第二个命令之前,尝试只在第一个命令中指定 cmdlet 名称。 然后,在运行第二个命令之前,一次向第一个命令添加一个参数。

否则,任何结果都不可能由下列条件之一导致:

  • 默认情况下,cmdlet 或参数在未分配给任何角色组的角色中定义。
  • cmdlet 或参数在你的环境中不可用。 例如,您在本地Exchange Online环境中Exchange Online cmdlet 或 Exchange 参数。

若要查找环境中的角色 (如果有任何) cmdlet 或参数,请将 和 替换为您想要使用的值并运行 <Cmdlet> <Parameter1>,<Parameter2>,... 以下命令:

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*}

有关管理角色作用域的详细信息,请参阅 了解管理角色作用域

查找分配给特定用户的所有角色

To see all roles that are assigned to a specific user, replace <UserIdentity> with the name, alias, or email address of the user and run the following command:

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 参数返回用户直接角色分配 (不常见的) 和通过用户的角色组成员身份授予用户的间接角色分配。

查找分配了特定角色的所有用户

To see all users who have a specific role assigned to them, replace <Role name> with the name of the role and run the following command:

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

查找角色组的成员

To see the members of a specific role group, replace <Role group name> with the name of the role group and run the following command:

Get-RoleGroupMember "<Role group name>"

例如:

Get-RoleGroupMember "Organization Management"

注意:若要查看所有可用角色组的名称,请运行 Get-RoleGroup