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.

¿Qué necesita saber antes de comenzar?

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

  • Este procedimiento solo puede realizarse con PowerShell.

  • Básicamente, debe ser administrador para completar este procedimiento. En concreto, necesita tener acceso a los cmdlets Get-ManagementRole y Get-ManagementRoleAssignment . De forma predeterminada, el acceso a estos cmdlets se concede mediante las funciones de configuración de solo vista o Administración de roles , que normalmente se asignan a los grupos de roles administración de la organización y administración de la organización de solo vista .

  • Los procedimientos de este tema no funcionan en el PowerShell del centro de seguridad & cumplimiento. Para obtener más información acerca de los permisos en el centro de seguridad & cumplimiento, consulte Permissions in the security & Compliance Center.

  • Los procedimientos de este tema no funcionan en PowerShell de Exchange Online Protection (EOP) independiente (Microsoft 365 organizaciones sin buzones de Exchange Online). Para obtener más información acerca de los permisos en EOP independiente, consulte Feature Permissions in EOP.

Tip

¿Problemas? Solicite ayuda en los foros de Exchange. Visite los foros en: Exchange Server o Exchange Online.

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

  1. Abra el entorno de PowerShell donde desea ejecutar el cmdlet.

  2. Ejecute el siguiente comando para identificar el cmdlet y, si lo desea, ejecute uno o varios parámetros en el cmdlet. No olvide reemplazar <Cmdlet> y, opcionalmente, <Parameter1>,<Parameter2>,... con el cmdlet y los nombres de parámetro reales que le interesen. Si especifica varios parámetros separados por comas, solo se devuelven los roles que incluyen todos los parámetros.

    $Perms = Get-ManagementRole -Cmdlet <Cmdlet> [-CmdletParameters <Parameter1>,<Parameter2>,...]
    
  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:

  • Role: indica el rol que da acceso al cmdlet o la combinación de cmdlets y parámetros. Tenga en cuenta que los nombres de role que comienzan por "My" son roles de usuario que permiten a los usuarios normales operar en sus propios objetos (por ejemplo, su propio buzón de correo o sus grupos de distribución).

  • RoleAssigneeType y RoleAssigneeName: estos valores están relacionados entre sí. RoleAssigneeType es el tipo de objeto al que se ha asignado el rol y RoleAssigneeName es el nombre del objeto. RoleAssigneeType puede ser un grupo de roles, una directiva de asignación de roles, un grupo de seguridad o un usuario. Normalmente, los roles de administrador se asignan a grupos de roles.

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 haya especificado demasiados parámetros y que todos los parámetros del cmdlet no estén definidos en un solo rol. Pruebe a especificar únicamente el nombre del cmdlet en el paso 2 y ejecute el paso 3 para comprobar que el cmdlet está disponible en el entorno. Después, agregue parámetros de uno en uno en el paso 2 antes de continuar con el paso 3.

  • Estas causas posibles tienen la misma solución:

    • Es posible que haya especificado un cmdlet o parámetros que están definidos en un role que no está asignado a nadie de manera predeterminada.

    • Es posible que haya especificado un cmdlet o parámetros que no están disponibles en el entorno. Por ejemplo, cuando especifica un cmdlet o parámetros de Exchange Online en un entorno local de Exchange 2016.

    Ejecute el siguiente comando para buscar el rol que contiene el cmdlet o los parámetros. No olvide reemplazar <Cmdlet> y, opcionalmente, <Parameter1>,<Parameter2>,... con el cmdlet y los nombres de parámetro reales que le interesen. Tenga en cuenta que puede usar caracteres comodín (*) en los nombres del cmdlet y los parámetros (por ejemplo, *-Mailbox*).

    Get-ManagementRoleEntry -Identity *\<Cmdlet>  [-Parameters <Parameter1>,<Parameter2>,... ]
    
    • 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 una o más entradas para Name, roley Parameters, el cmdlet (o los parámetros del cmdlet) están disponibles en el entorno, pero el rol requerido no se asigna a nadie. Para ver todas las funciones que no están asignadas a nadie, ejecute el siguiente comando:

      $na = Get-ManagementRole ; $na | foreach {If ((Get-ManagementRoleAssignment -Role $_.Name -Delegating $false) -eq $null) {$_.Name}}
      
  • Los ámbitos de los roles de administración definen dónde pueden operar los cmdlets (en concreto, los ámbitos de escritura).

    Para incluir información de ámbito en el paso 2, sustituya el siguiente comando:

    $Perms | foreach {Get-ManagementRoleAssignment -Role $_.Name -Delegating $false | Format-List Role,RoleAssigneeType,RoleAssigneeName,*Scope*}
    
  • Para ver todos los roles asignados a un usuario concreto, 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
    
  • Para ver todos los usuarios que tienen asignado un rol concreto, 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
    
  • Para ver los miembros de un grupo de roles específico, ejecute el siguiente comando:

    Get-RoleGroupMember "<Role group name>"
    

    Por ejemplo:

    Get-RoleGroupMember "Organization Management"