查找运行任意 Exchange cmdlet 所需的权限
您可以使用 PowerShell,查找运行任何 Exchange 或 Exchange Online cmdlet 所需的权限。 此过程介绍了为您提供指定 cmdlet 访问权限的基于角色的访问控制 (RBAC) 管理角色和角色组,即使您的组织已具有自定义角色、自定义角色组或自定义角色分配。
提示
目前,本文中的过程不适用于 Exchange Online PowerShell 中的 Microsoft 365 组 cmdlet (*-UnifiedGroup) 。
开始前,有必要了解什么?
估计完成该过程的时间:不超过 5 分钟。
只能使用 PowerShell 来执行这些过程。
本文中的过程不适用于安全性 & 合规性 PowerShell。 有关安全性 & 合规性权限的详细信息,请参阅以下文章:
需要先分配权限,然后才能执行本文中的过程。 可以选择下列选项:
Exchange Server 权限:以下角色组中的成员身份:
- 遵从性管理
- 清洁管理
- Organization Management
- View-Only Organization Management
Exchange Online 权限:以下角色组中的成员身份:
- 遵从性管理
- 委派安装
- 清洁管理
- Organization Management
- View-Only Organization Management
Microsoft Entra 权限: 全局管理员* 或 全局读取者 角色的成员身份为用户提供Microsoft 365 中其他功能所需的权限 和 权限。
重要
* Microsoft建议使用权限最少的角色。 使用权限较低的帐户有助于提高组织的安全性。 全局管理员是一种高特权角色,在无法使用现有角色时,应仅限于紧急情况。
使用 PowerShell 查找运行 cmdlet 所需的权限
如果尚未打开你感兴趣的 Exchange PowerShell 环境:
- Exchange Online: 连接到 Exchange Online PowerShell。
- Exchange Online Protection (Microsoft 没有 Exchange Online 邮箱的 365 个组织) : 连接到 Exchange Online Protection PowerShell。
- Exchange Server: 打开 Exchange 命令行管理程序 或使用 远程 PowerShell 连接到 Exchange 服务器。
(可选)
<Parameter1>,<Parameter2>,...
将 和 替换为<Cmdlet>
要使用的值,并运行以下命令:$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 和参数组合的访问权限的角色。 以“My”开头的角色名称是允许普通用户对其拥有 (的对象进行操作的用户角色,例如,他们自己的邮箱或通讯组) 。
RoleAssigneeType 和 RoleAssigneeName:这些值相互关联:
- 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
。