Skip to content

Commit ec03a4f

Browse files
committed
Merge branch 'master' into SkipRules-chrisda
2 parents 4374a4b + 15ca7da commit ec03a4f

File tree

146 files changed

+3296
-697
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

146 files changed

+3296
-697
lines changed

exchange/docs-conceptual/app-only-auth-powershell-v2.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,16 @@ The following examples show how to use the Exchange Online PowerShell V2 module
5050
When you use the _Certificate_ parameter, the certificate does not need to be installed on the computer where you are running the command. This parameter is applicable for scenarios where the certificate object is stored remotely and fetched at runtime during script execution.
5151

5252
> [!TIP]
53-
> In the **Connect-ExchangeOnline** commands, be sure to use an `.onmicrosoft.com` domain in the _Organization_ parameter value. Otherwise, you might encounter cryptic permission issues when you run commands in the app context.
53+
>
54+
> - In the **Connect-ExchangeOnline** commands, be sure to use an `.onmicrosoft.com` domain in the _Organization_ parameter value. Otherwise, you might encounter cryptic permission issues when you run commands in the app context.
55+
>
56+
> - App-only authentication does not support delegation. Unattended scripting in delegation scenarios is supported with the Secure App Model. For more information, go [here](https://docs.microsoft.com/powershell/partnercenter/multi-factor-auth#exchange).
5457
5558
## How does it work?
5659

5760
The EXO V2 module uses the Active Directory Authentication Library to fetch an app-only token using the application Id, tenant Id (organization), and certificate thumbprint. The application object provisioned inside Azure AD has a Directory Role assigned to it, which is returned in the access token. Exchange Online configures the session RBAC using the directory role information that's available in the token.
5861

59-
## Setup app-only authentication
62+
## Set up app-only authentication
6063

6164
An initial onboarding is required for authentication using application objects. Application and service principal are used interchangeably, but an application is like a class object while a service principal is like an instance of the class. You can learn more about this at [Application and service principal objects in Azure Active Directory](https://docs.microsoft.com/azure/active-directory/develop/app-objects-and-service-principals).
6265

exchange/docs-conceptual/find-exchange-cmdlet-permissions.md

Lines changed: 69 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,31 @@ You can use PowerShell to find the permissions required to run any Exchange or E
2020

2121
- Estimated time to complete this procedure: less than 5 minutes.
2222

23-
- You can only use PowerShell to perform this procedure.
23+
- You can only use PowerShell to perform these procedures.
2424

25-
- Basically, you need to be an administrator to complete this procedure. Specifically, you need access to the **Get-ManagementRole** and **Get-ManagementRoleAssignment** cmdlets. By default, access to these cmdlets is granted by the **View-Only Configuration** or **Role Management** roles, which are typically assigned to the **View-Only Organization Management** and **Organization Management** role groups.
25+
- Basically, you need to be an administrator to complete this procedure. Specifically, you need access to the **Get-ManagementRole** and **Get-ManagementRoleAssignment** cmdlets. By default, access to these cmdlets is granted by the **View-Only Configuration** or **Role Management** roles, which are only assigned to the **View-Only Organization Management** and **Organization Management** role groups by default.
2626

27-
- The procedures in this topic don't work in Security & Compliance Center PowerShell. For more information about permissions in the Security & Compliance Center, see [Permissions in the Security & Compliance Center](https://docs.microsoft.com/microsoft-365/security/office-365-security/permissions-in-the-security-and-compliance-center).
28-
29-
- The procedures in this topic don't work in standalone Exchange Online Protection (EOP) PowerShell (Microsoft 365 organizations without Exchange Online mailboxes). For more information about permissions in standalone EOP, see [Feature permissions in EOP](https://docs.microsoft.com/microsoft-365/security/office-365-security/feature-permissions-in-eop).
27+
- The procedures in this article don't work in Security & Compliance Center PowerShell or standalone Exchange Online Protection (EOP) PowerShell (Microsoft 365 organizations without Exchange Online mailboxes). For more information about permissions in these environments, see the following articles:
28+
- [Permissions in the Security & Compliance Center](https://docs.microsoft.com/microsoft-365/security/office-365-security/permissions-in-the-security-and-compliance-center).
29+
- [Permissions in standalone EOP](https://docs.microsoft.com/microsoft-365/security/office-365-security/feature-permissions-in-eop).
3030

3131
> [!TIP]
3232
> Having problems? Ask for help in the Exchange forums. Visit the forums at: [Exchange Server](https://go.microsoft.com/fwlink/p/?linkId=60612) or [Exchange Online](https://go.microsoft.com/fwlink/p/?linkId=267542).
3333
3434
## Use PowerShell to find the permissions required to run a cmdlet
3535

36-
1. Open the PowerShell environment where you want to run the cmdlet.
37-
36+
1. If you haven't already, open the Exchange PowerShell environment that you're interested in:
3837
- **Exchange Online**: [Connect to Exchange Online PowerShell](connect-to-exchange-online-powershell.md).
39-
4038
- **Exchange Server**: [Open the Exchange Management Shell](open-the-exchange-management-shell.md) or [Connect to Exchange servers using remote PowerShell](connect-to-exchange-servers-using-remote-powershell.md).
4139

42-
2. Run the following command to identify the cmdlet and, optionally, one or more parameters on the cmdlet. Be sure to replace `<Cmdlet>` and optionally, `<Parameter1>,<Parameter2>,...` with the actual cmdlet and parameter names you are interested in. If you specify multiple parameters separated by commas, only the roles that include **all** of the parameters are returned.
40+
2. Replace `<Cmdlet>` and optionally, `<Parameter1>,<Parameter2>,...` with the values that you want to use, and run the following command:
4341

4442
```powershell
4543
$Perms = Get-ManagementRole -Cmdlet <Cmdlet> [-CmdletParameters <Parameter1>,<Parameter2>,...]
4644
```
4745

46+
**Note**: If you specify multiple parameters, only roles that include the cmdlet with **all** of the parameters are returned.
47+
4848
3. Run the following command:
4949

5050
```powershell
@@ -57,78 +57,95 @@ The results contain the following information:
5757

5858
- **Role**: Indicates the role that gives access to the cmdlet or the combination of cmdlet and parameters. Note that role names that begin with "My" are user roles that allow regular users to operate on objects they own (for example, their own mailbox or their distribution groups).
5959

60-
- **RoleAssigneeType** and **RoleAssigneeName**: These values are inter-related. **RoleAssigneeType** is the type of object that has the role assigned to it, and **RoleAssigneeName** is the name of the object. **RoleAssigneeType** can be a role group, role assignment policy, security group, or user. Typically, administrator roles are assigned to role groups.
60+
- **RoleAssigneeType** and **RoleAssigneeName**: These values are inter-related:
61+
- **RoleAssigneeType** is the type of object that has the role assigned to it. For administrator roles, this value is typically a role group, but it can also be a role assignment policy, a security group, or a user.
62+
- **RoleAssigneeName** is the name of the role group, role assignment policy, security group, or user.
6163

6264
## Troubleshooting
6365

6466
What if there are no results?
6567

6668
- Verify that you entered the cmdlet and parameter names correctly.
6769

68-
- You might have entered too many parameters, and all of the parameters on the cmdlet aren't defined in a single role. Try specifying only the cmdlet name in Step 2, and run Step 3 to verify that the cmdlet is available in your environment. Then, add parameters one at a time to Step 2 before running Step 3.
70+
- The parameters that you specified are actually available for a cmdlet in a single role. Try specifying only the cmdlet name in the first command before you run the second command. Then, add the parameters one at a time to the first command before you run the second command.
6971

70-
- These possible causes have the same solution:
72+
Otherwise, no results are likely caused by one of the following conditions:
7173

72-
- You might have entered a cmdlet or parameters that are defined in a role that isn't assigned to anyone by default.
74+
- The cmdlet or parameters are defined in a role that isn't assigned to any role groups by default.
75+
- The cmdlet or parameters aren't available in your environment. For example, you specified an Exchange Online cmdlet or Exchange Online parameters in an on-premises Exchange environment.
7376

74-
- You might have entered a cmdlet or parameter that isn't available in your environment. For example, when you enter an Exchange Online cmdlet or parameters in an on-premises Exchange 2016 environment.
77+
To find the roles in your environment (if any) that contain the cmdlet or parameters, replace `<Cmdlet>` and optionally, `<Parameter1>,<Parameter2>,...` with the values that you want to use and run the following command:
7578

76-
Run the following command to find the role that contains the cmdlet or parameters. Be sure to replace `<Cmdlet>` and optionally, `<Parameter1>,<Parameter2>,...` with the actual cmdlet and parameter names you are interested in. Note that you can use wildcard characters (*) in the cmdlet and parameter names (for example, `*-Mailbox*`).
79+
```powershell
80+
Get-ManagementRoleEntry -Identity *\<Cmdlet> [-Parameters <Parameter1>,<Parameter2>,...]
81+
```
7782

78-
```powershell
79-
Get-ManagementRoleEntry -Identity *\<Cmdlet> [-Parameters <Parameter1>,<Parameter2>,... ]
80-
```
83+
**Note**: You can use wildcard characters (*) in the cmdlet and parameter names (for example, `*-Mailbox*`).
8184

82-
- If the command returns an error saying the object couldn't be found, the cmdlet or parameters aren't available in your environment.
85+
If the command returns an error saying the object couldn't be found, the cmdlet or parameters aren't available in your environment.
8386

84-
- If the command returns one or more entries for **Name**, **Role**, and **Parameters**, the cmdlet (or parameters on the cmdlet) is available in your environment, but the required role isn't assigned to anyone. To see all roles that aren't assigned to anyone, run the following command:
87+
If the command returns results, the cmdlet or parameters are available in your environment, but the required role isn't assigned to any role groups. To find roles that aren't assigned to any role groups, run the following command:
8588

86-
```powershell
87-
$na = Get-ManagementRole ; $na | foreach {If ((Get-ManagementRoleAssignment -Role $_.Name -Delegating $false) -eq $null) {$_.Name}}
88-
```
89+
```powershell
90+
$na = Get-ManagementRole; $na | foreach {If ((Get-ManagementRoleAssignment -Role $_.Name -Delegating $false) -eq $null) {$_.Name}}
91+
```
8992

9093
## Related procedures
9194

92-
- Management role scopes define where cmdlets can operate (in particular, write scopes).
95+
### Include management role scopes
96+
97+
Management role scopes (in particular, write scopes) define where cmdlets can operate. For example, the entire organization or only on specific user objects.
98+
99+
To include scope information in the [Use PowerShell to find the permissions required to run a cmdlet](#use-powershell-to-find-the-permissions-required-to-run-a-cmdlet) output, add `*Scope*` to the second command:
100+
101+
```powershell
102+
$Perms | foreach {Get-ManagementRoleAssignment -Role $_.Name -Delegating $false | Format-List Role,RoleAssigneeType,RoleAssigneeName,*Scope*}
103+
```
104+
105+
For detailed information about management role scopes, see [Understanding management role scopes](https://docs.microsoft.com/exchange/understanding-management-role-scopes-exchange-2013-help).
106+
107+
### Find all roles assigned to a specific user
108+
109+
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:
110+
111+
```powershell
112+
Get-ManagementRoleAssignment -RoleAssignee <UserIdentity> -Delegating $false | Format-Table -Auto Role,RoleAssigneeName,RoleAssigneeType
113+
```
93114

94-
To include scope information in Step 2, substitute the following command:
115+
For example:
95116

96-
```powershell
97-
$Perms | foreach {Get-ManagementRoleAssignment -Role $_.Name -Delegating $false | Format-List Role,RoleAssigneeType,RoleAssigneeName,*Scope*}
98-
```
117+
```powershell
118+
Get-ManagementRoleAssignment -RoleAssignee [email protected] -Delegating $false | Format-Table -Auto Role,RoleAssigneeName,RoleAssigneeType
119+
```
99120

100-
- To see all roles assigned to a specific user, run the following command:
121+
**Note**: The _RoleAssignee_ parameter returns both direct role assignments to users (uncommon) and indirect role assignments granted to the user through their membership in role groups.
101122

102-
```powershell
103-
Get-ManagementRoleAssignment -RoleAssignee <UserIdentity> -Delegating $false | Format-Table -Auto Role,RoleAssigneeName,RoleAssigneeType
104-
```
123+
### Find all users who have a specific role assigned
105124

106-
For example:
125+
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:
107126

108-
```powershell
109-
Get-ManagementRoleAssignment -RoleAssignee [email protected] -Delegating $false | Format-Table -Auto Role,RoleAssigneeName,RoleAssigneeType
110-
```
127+
```powershell
128+
Get-ManagementRoleAssignment -Role "<Role name>" -GetEffectiveUsers -Delegating $false | Where-Object {$_.EffectiveUserName -ne "All Group Members"} | Format-Table -Auto EffectiveUserName,Role,RoleAssigneeName,AssignmentMethod
129+
```
111130

112-
- To see all users who are assigned a specific role, run the following command:
131+
For example:
113132

114-
```powershell
115-
Get-ManagementRoleAssignment -Role "<Role name>" -GetEffectiveUsers -Delegating $false | Where-Object {$_.EffectiveUserName -ne "All Group Members"} | Format-Table -Auto EffectiveUserName,Role,RoleAssigneeName,AssignmentMethod
116-
```
133+
```powershell
134+
Get-ManagementRoleAssignment -Role "Mailbox Import Export" -GetEffectiveUsers -Delegating $false | Where-Object {$_.EffectiveUserName -ne "All Group Members"} | Format-Table -Auto EffectiveUserName,Role,RoleAssigneeName,AssignmentMethod
135+
```
117136

118-
For example:
137+
### Find the members of a role group
119138

120-
```powershell
121-
Get-ManagementRoleAssignment -Role "Mailbox Import Export" -GetEffectiveUsers -Delegating $false | Where-Object {$_.EffectiveUserName -ne "All Group Members"} | Format-Table -Auto EffectiveUserName,Role,RoleAssigneeName,AssignmentMethod
122-
```
139+
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:
123140

124-
- To see the members of a specific role group, run the following command:
141+
```powershell
142+
Get-RoleGroupMember "<Role group name>"
143+
```
125144

126-
```powershell
127-
Get-RoleGroupMember "<Role group name>"
128-
```
145+
For example:
129146

130-
For example:
147+
```powershell
148+
Get-RoleGroupMember "Organization Management"
149+
```
131150

132-
```powershell
133-
Get-RoleGroupMember "Organization Management"
134-
```
151+
**Note**: To see the names of all available role groups, run `Get-RoleGroup`.

exchange/docs-conceptual/toc.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
href: filter-properties.md
2424
- name: Filterable properties for the RecipientFilter parameter
2525
href: recipientfilter-properties.md
26+
- name: Values for the CustomPropertyNames parameter
27+
href: values-for-custompropertynames-parameter.md
2628
- name: Exchange Online PowerShell
2729
href: exchange-online-powershell.md
2830
items:

0 commit comments

Comments
 (0)