Buscar los permisos necesarios para ejecutar cualquier cmdlet de Exchange

Puede usar PowerShell para buscar los permisos necesarios para ejecutar cualquier cmdlet de Exchange o Exchange Online. En este procedimiento se muestran los grupos de roles y los roles de administración de control de acceso basado en roles que proporcionan acceso a un cmdlet especificado, aunque la organización tenga roles personalizados, grupos de roles personalizados o asignaciones de roles personalizados.

Sugerencia

Actualmente, los procedimientos descritos en este artículo no funcionan con cmdlets de grupo de Microsoft 365 (*-UnifiedGroup) en PowerShell de Exchange Online.

¿Qué necesita saber antes de empezar?

  • Tiempo estimado para finalizar este procedimiento: menos de 5 minutos.

  • Solo puede usar PowerShell para realizar estos procedimientos.

  • Los procedimientos descritos en este artículo no funcionan en PowerShell de seguridad & cumplimiento. Para obtener más información acerca de los permisos de seguridad & cumplimiento, consulte los siguientes artículos:

  • Para poder realizar los procedimientos de este artículo, deberá tener asignados los permisos necesarios. Tiene las siguientes opciones:

    • Permisos de Exchange Server: pertenencia a uno de los siguientes grupos de roles:

      • Administración de cumplimiento
      • Administración de higiene
      • Organization Management
      • View-Only Organization Management
    • Permisos de Exchange Online: Pertenencia a uno de los siguientes grupos de roles:

      • Administración de cumplimiento
      • Configuración delegada
      • Administración de higiene
      • Organization Management
      • View-Only Organization Management
    • Permisos de Microsoft Entra: la pertenencia a los roles de administrador* global o lector global proporciona a los usuarios los permisos y permisos necesarios para otras características de Microsoft 365.

      Importante

      * Microsoft recomienda utilizar roles con la menor cantidad de permisos. El uso de cuentas con permisos más bajos ayuda a mejorar la seguridad de su organización. Administrador global es un rol con muchos privilegios que debe limitarse a escenarios de emergencia cuando no se puede usar un rol existente.

Uso de PowerShell para buscar los permisos necesarios para ejecutar un cmdlet

  1. Si todavía no lo ha hecho, abra el entorno de PowerShell de Exchange que le interese:

  2. Reemplace <Cmdlet> y, opcionalmente, <Parameter1>,<Parameter2>,... por los valores que quiera usar y ejecute el siguiente comando:

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

    Sugerencia

    Si especifica varios parámetros, solo se devuelven los roles que incluyen todos los parámetros especificados en el cmdlet.

  3. Ejecute el siguiente comando:

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

Interpretación de los resultados

Los resultados contienen la siguiente información:

  • Rol: Indica el rol que proporciona acceso al cmdlet o la combinación de cmdlet y parámetros. Los nombres de rol que comienzan por "Mi" son roles de usuario que permiten a los usuarios normales operar en objetos de su propiedad (por ejemplo, su propio buzón o sus grupos de distribución).

  • RoleAssigneeType y RoleAssigneeName: Estos valores están interrelacionados:

    • RoleAssigneeType es el tipo de objeto que tiene el rol asignado. Para los roles de administrador, este valor suele ser un grupo de roles, pero también puede ser una directiva de asignación de roles, un grupo de seguridad o un usuario.
    • RoleAssigneeName es el nombre del grupo de roles, la directiva de asignación de roles, el grupo de seguridad o el usuario.

Solución de problemas

¿Qué sucede si no se obtiene ningún resultado?

  • Compruebe que ha especificado correctamente los nombres de cmdlet y de los parámetros.
  • Es posible que varios parámetros para un cmdlet no se definan en un único rol (algunos parámetros pueden estar en un rol, mientras que los otros están en un rol diferente). Vaya paso a paso:
    • Ejecute el primer comando sin parámetros y, a continuación, ejecute el segundo.
    • Agregue un parámetro al primer comando y, a continuación, ejecute el segundo.
    • Repita el paso anterior agregando otros parámetros al primer comando antes de ejecutar el segundo.

De lo contrario, es probable que ninguno de los resultados se deba a una de las siguientes condiciones:

  • El cmdlet o los parámetros se definen en un rol que no está asignado a ningún grupo de roles de forma predeterminada.
  • El cmdlet o los parámetros no están disponibles en su entorno. Por ejemplo, si especificó un cmdlet de Exchange Online o parámetros de Exchange Online en un entorno de Exchange local.

Para buscar los roles en su entorno (si los hay) que contienen el cmdlet o los parámetros, reemplace <Cmdlet> y, opcionalmente, <Parameter1>,<Parameter2>,... por los valores que desea usar y ejecute el siguiente comando:

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

Sugerencia

Puede usar caracteres comodín (*) en los nombres de cmdlet y parámetro (por ejemplo, *-Mailbox*).

Si el comando devuelve un error que indica que no se pudo encontrar el objeto, significa que el cmdlet o los parámetros no están disponibles en el entorno.

Si el comando devuelve resultados, el cmdlet o los parámetros están disponibles en su entorno, pero el rol necesario no está asignado a ningún grupo de roles. Para buscar roles que no están asignados a ningún grupo de roles, ejecute el siguiente comando:

$na = Get-ManagementRole; $na | foreach {If ((Get-ManagementRoleAssignment -Role $_.Name -Delegating $false) -eq $null) {$_.Name}}

Incluir ámbitos de roles de administración

Los ámbitos de rol de administración (en particular, los ámbitos de escritura) definen dónde pueden operar los cmdlets. Por ejemplo, toda la organización o solo en objetos de usuario específicos.

Para incluir información de ámbito en la Use PowerShell para buscar los permisos necesarios para ejecutar la salida de un cmdlet , agregue *Scope* al segundo comando:

$Perms | foreach {Get-ManagementRoleAssignment -Role $_.Name -Delegating $false | Format-List Role,RoleAssigneeType,RoleAssigneeName,*Scope*}

Para obtener información detallada sobre los ámbitos de rol de administración, vea Descripción de los ámbitos de rol de administración.

Buscar todos los roles asignados a un usuario específico

Para ver todos los roles asignados a un usuario específico, reemplácelos <UserIdentity> por el nombre, alias o dirección de correo electrónico del usuario y ejecute el siguiente comando:

Get-ManagementRoleAssignment -RoleAssignee <UserIdentity> -Delegating $false | Format-Table -Auto Role,RoleAssigneeName,RoleAssigneeType

Por ejemplo:

Get-ManagementRoleAssignment -RoleAssignee julia@contoso.com -Delegating $false | Format-Table -Auto Role,RoleAssigneeName,RoleAssigneeType

Sugerencia

El parámetro RoleAssignee devuelve las asignaciones de rol directas a los usuarios (poco común) y las asignaciones de rol indirectas concedidas al usuario a través de su pertenencia a grupos de roles.

Buscar todos los usuarios que tienen asignado un rol específico

Para ver todos los usuarios que tienen asignado un rol específico, reemplácelo <Role name> por el nombre del rol y ejecute el siguiente comando:

Get-ManagementRoleAssignment -Role "<Role name>" -GetEffectiveUsers -Delegating $false | Where-Object {$_.EffectiveUserName -ne "All Group Members"} | Format-Table -Auto EffectiveUserName,Role,RoleAssigneeName,AssignmentMethod

Por ejemplo:

Get-ManagementRoleAssignment -Role "Mailbox Import Export" -GetEffectiveUsers -Delegating $false | Where-Object {$_.EffectiveUserName -ne "All Group Members"} | Format-Table -Auto EffectiveUserName,Role,RoleAssigneeName,AssignmentMethod

Buscar los miembros de un grupo de roles

Para ver los miembros de un grupo de roles específico, reemplácelo <Role group name> por el nombre del grupo de roles y ejecute el siguiente comando:

Get-RoleGroupMember "<Role group name>"

Por ejemplo:

Get-RoleGroupMember "Organization Management"

Sugerencia

Para ver los nombres de todos los grupos de roles disponibles, ejecute Get-RoleGroup.