尋找執行任何 Exchange 指令程式所需的權限

您可以使用 PowerShell,尋找執行任何 Exchange 或 Exchange Online 指令程式所需的權限。此程序說明讓您有權存取指定指令程式的角色型存取控制 (RBAC) 管理角色和角色群組 — 即使您的組織有自訂角色、自訂角色群組或自訂角色指派亦然。

開始之前有哪些須知?

  • 此程序預估完成時間:少於 5 分鐘。

  • 您只能使用 PowerShell 來執行這些程式。

  • 基本上,您必須是系統管理員才能完成此程序。 特別是,您需要 Get-ManagementRoleGet-ManagementRoleAssignment 指令程式的存取權。 根據預設, View-Only 設定或 角色管理 角色會授與這些 Cmdlet 的存取權,這些角色只會指派給「 View-Only 組織管理 」和「 組織管理 」角色群組。

  • 本文中的程式不適用於安全性 & 規範中心 PowerShell 或獨立 Exchange Online Protection (EOP) PowerShell (Microsoft 365 組織,但沒有 Exchange Online 信箱) 。 如需這些環境中許可權的詳細資訊,請參閱下列文章:

提示

有問題嗎? 在 Exchange 論壇中尋求協助。 流覽論壇,網址為: Exchange Serverexchange Online

使用 PowerShell 尋找執行指令程式所需的權限

  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 及參數組合的角色。 請注意,開頭為 "My" 的角色名稱,是允許一般使用者對其所擁有的物件 (例如,他們自己的信箱或其通訊群組) 進行操作的使用者角色。

  • RoleAssigneeTypeRoleAssigneeName:這些值是相互關聯的:

    • RoleAssigneeType 是具有指派角色的物件類型。 針對系統管理員角色,此值通常是角色群組,但也可以是角色指派原則、安全性群組或使用者。
    • RoleAssigneeName 是角色群組、角色指派原則、安全性群組或使用者的名稱。

疑難排解

如果沒有結果該如何處理?

  • 確認您輸入的指令程式和參數名稱是正確的。

  • 您指定的參數實際上可用於單一角色中的 Cmdlet。 在執行第二個命令之前,請嘗試只在第一個命令中指定 Cmdlet 名稱。 然後,在您執行第二個命令之前,一次將參數新增至第一個命令。

否則,可能是由於下列其中一個狀況而導致的結果不可能:

  • Cmdlet 或參數是在未指定任何角色群組的角色中定義的。
  • 您的環境無法使用 Cmdlet 或參數。 例如,您在內部部署 Exchange 環境中指定了 Exchange Online Cmdlet 或 Exchange Online 參數。

若要找出環境中的角色 (如果包含指令程式或參數的任何) ,請取代 <Cmdlet> 並選擇性地 <Parameter1>,<Parameter2>,... 使用您要使用的值,並執行下列命令:

Get-ManagementRoleEntry -Identity *\<Cmdlet>  [-Parameters <Parameter1>,<Parameter2>,...]

附注:您可以在 Cmdlet 及參數名稱中使用萬用字元 ( * ) (例如 *-Mailbox*) 。

如果命令傳回錯誤指出找不到物件,表示指令程式或參數無法在您的環境中使用。

如果此命令傳回結果,指令程式中便可使用 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