@pnp/cli-microsoft365 10.6.0-beta.807bbab → 10.6.0-beta.908b842

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/config.js CHANGED
@@ -33,6 +33,7 @@ export default {
33
33
  'https://graph.microsoft.com/PeopleSettings.ReadWrite.All',
34
34
  'https://graph.microsoft.com/Place.Read.All',
35
35
  'https://graph.microsoft.com/Policy.Read.All',
36
+ 'https://graph.microsoft.com/Policy.Read.PermissionGrant',
36
37
  'https://graph.microsoft.com/RecordsManagement.ReadWrite.All',
37
38
  'https://graph.microsoft.com/Reports.Read.All',
38
39
  'https://graph.microsoft.com/ReportSettings.ReadWrite.All',
@@ -9,10 +9,22 @@ import GraphCommand from '../../../base/GraphCommand.js';
9
9
  import commands from '../../commands.js';
10
10
  const policyEndPoints = {
11
11
  activitybasedtimeout: "activityBasedTimeoutPolicies",
12
+ adminconsentrequest: "adminConsentRequestPolicy",
13
+ appManagement: "appManagementPolicies",
14
+ authenticationflows: "authenticationFlowsPolicy",
15
+ authenticationmethods: "authenticationMethodsPolicy",
16
+ authenticationstrength: "authenticationStrengthPolicies",
12
17
  authorization: "authorizationPolicy",
13
18
  claimsmapping: "claimsMappingPolicies",
19
+ conditionalaccess: "conditionalAccessPolicies",
20
+ crosstenantaccess: "crossTenantAccessPolicy",
21
+ defaultappmanagement: "defaultAppManagementPolicy",
22
+ deviceregistration: "deviceRegistrationPolicy",
23
+ featurerolloutpolicy: "featureRolloutPolicies",
14
24
  homerealmdiscovery: "homeRealmDiscoveryPolicies",
15
25
  identitysecuritydefaultsenforcement: "identitySecurityDefaultsEnforcementPolicy",
26
+ permissiongrant: "permissionGrantPolicies",
27
+ rolemanagement: "roleManagementPolicies",
16
28
  tokenissuance: "tokenIssuancePolicies",
17
29
  tokenlifetime: "tokenLifetimePolicies"
18
30
  };
@@ -56,15 +68,26 @@ class EntraPolicyListCommand extends GraphCommand {
56
68
  }
57
69
  async getPolicies(policyType) {
58
70
  const endpoint = policyEndPoints[policyType];
71
+ let requestUrl = `${this.resource}/v1.0/policies/${endpoint}`;
72
+ if (endpoint === policyEndPoints.rolemanagement) {
73
+ // roleManagementPolicies endpoint requires $filter query parameter
74
+ requestUrl += `?$filter=scopeId eq '/' and scopeType eq 'DirectoryRole'`;
75
+ }
59
76
  const requestOptions = {
60
- url: `${this.resource}/v1.0/policies/${endpoint}`,
77
+ url: requestUrl,
61
78
  headers: {
62
79
  accept: 'application/json;odata.metadata=none'
63
80
  },
64
81
  responseType: 'json'
65
82
  };
66
83
  const response = await request.get(requestOptions);
67
- if (endpoint === policyEndPoints.authorization ||
84
+ if (endpoint === policyEndPoints.adminconsentrequest ||
85
+ endpoint === policyEndPoints.authenticationflows ||
86
+ endpoint === policyEndPoints.authenticationmethods ||
87
+ endpoint === policyEndPoints.authorization ||
88
+ endpoint === policyEndPoints.crosstenantaccess ||
89
+ endpoint === policyEndPoints.defaultappmanagement ||
90
+ endpoint === policyEndPoints.deviceregistration ||
68
91
  endpoint === policyEndPoints.identitysecuritydefaultsenforcement) {
69
92
  return response;
70
93
  }
@@ -95,6 +118,26 @@ _a = EntraPolicyListCommand, _EntraPolicyListCommand_instances = new WeakSet(),
95
118
  return true;
96
119
  });
97
120
  };
98
- EntraPolicyListCommand.supportedPolicyTypes = ['activityBasedTimeout', 'authorization', 'claimsMapping', 'homeRealmDiscovery', 'identitySecurityDefaultsEnforcement', 'tokenIssuance', 'tokenLifetime'];
121
+ EntraPolicyListCommand.supportedPolicyTypes = [
122
+ 'activityBasedTimeout',
123
+ 'adminConsentRequest',
124
+ 'appManagement',
125
+ 'authenticationFlows',
126
+ 'authenticationMethods',
127
+ 'authenticationStrength',
128
+ 'authorization',
129
+ 'claimsMapping',
130
+ 'conditionalAccess',
131
+ 'crossTenantAccess',
132
+ 'defaultAppManagement',
133
+ 'deviceRegistration',
134
+ 'featureRolloutPolicy',
135
+ 'homeRealmDiscovery',
136
+ 'identitySecurityDefaultsEnforcement',
137
+ 'permissionGrant',
138
+ 'roleManagement',
139
+ 'tokenIssuance',
140
+ 'tokenLifetime'
141
+ ];
99
142
  export default new EntraPolicyListCommand();
100
143
  //# sourceMappingURL=policy-list.js.map
@@ -0,0 +1,57 @@
1
+ import { z } from 'zod';
2
+ import { globalOptionsZod } from '../../../../Command.js';
3
+ import { zod } from '../../../../utils/zod.js';
4
+ import { validation } from '../../../../utils/validation.js';
5
+ import GraphCommand from '../../../base/GraphCommand.js';
6
+ import commands from '../../commands.js';
7
+ import request from '../../../../request.js';
8
+ const options = globalOptionsZod
9
+ .extend({
10
+ resourceId: zod.alias('i', z.string()),
11
+ resourceType: zod.alias('t', z.enum(['user', 'group', 'device', 'organization'])),
12
+ name: zod.alias('n', z.string())
13
+ })
14
+ .strict();
15
+ class GraphOpenExtensionGetCommand extends GraphCommand {
16
+ get name() {
17
+ return commands.OPENEXTENSION_GET;
18
+ }
19
+ get description() {
20
+ return 'Retrieves a specific open extension for a resource';
21
+ }
22
+ get schema() {
23
+ return options;
24
+ }
25
+ getRefinedSchema(schema) {
26
+ return schema
27
+ .refine(options => options.resourceType !== 'group' && options.resourceType !== 'device' && options.resourceType !== 'organization' || (options.resourceId && validation.isValidGuid(options.resourceId)), options => ({
28
+ message: `The '${options.resourceId}' must be a valid GUID`,
29
+ path: ['resourceId']
30
+ }))
31
+ .refine(options => options.resourceType !== 'user' || (options.resourceId && (validation.isValidGuid(options.resourceId) || validation.isValidUserPrincipalName(options.resourceId))), options => ({
32
+ message: `The '${options.resourceId}' must be a valid GUID or user principal name`,
33
+ path: ['resourceId']
34
+ }));
35
+ }
36
+ async commandAction(logger, args) {
37
+ try {
38
+ if (this.verbose) {
39
+ await logger.logToStderr(`Retrieving open extension for resource ${args.options.resourceId}...`);
40
+ }
41
+ const requestOptions = {
42
+ url: `${this.resource}/v1.0/${args.options.resourceType}${args.options.resourceType === 'organization' ? '' : 's'}/${args.options.resourceId}/extensions/${args.options.name}`,
43
+ headers: {
44
+ accept: 'application/json;odata.metadata=none'
45
+ },
46
+ responseType: 'json'
47
+ };
48
+ const res = await request.get(requestOptions);
49
+ await logger.log(res);
50
+ }
51
+ catch (err) {
52
+ this.handleRejectedODataJsonPromise(err);
53
+ }
54
+ }
55
+ }
56
+ export default new GraphOpenExtensionGetCommand();
57
+ //# sourceMappingURL=openextension-get.js.map
@@ -0,0 +1,62 @@
1
+ import { z } from 'zod';
2
+ import { globalOptionsZod } from '../../../../Command.js';
3
+ import { zod } from '../../../../utils/zod.js';
4
+ import { validation } from '../../../../utils/validation.js';
5
+ import GraphCommand from '../../../base/GraphCommand.js';
6
+ import commands from '../../commands.js';
7
+ import { odata } from '../../../../utils/odata.js';
8
+ const options = globalOptionsZod
9
+ .extend({
10
+ resourceId: zod.alias('i', z.string()),
11
+ resourceType: zod.alias('t', z.enum(['user', 'group', 'device', 'organization']))
12
+ })
13
+ .strict();
14
+ class GraphOpenExtensionListCommand extends GraphCommand {
15
+ get name() {
16
+ return commands.OPENEXTENSION_LIST;
17
+ }
18
+ get description() {
19
+ return 'Retrieves all open extensions for a resource';
20
+ }
21
+ defaultProperties() {
22
+ return ['id', 'extensionName'];
23
+ }
24
+ get schema() {
25
+ return options;
26
+ }
27
+ getRefinedSchema(schema) {
28
+ return schema
29
+ .refine(options => options.resourceType !== 'group' && options.resourceType !== 'device' && options.resourceType !== 'organization' ||
30
+ (options.resourceId && validation.isValidGuid(options.resourceId)), options => ({
31
+ message: `The '${options.resourceId}' must be a valid GUID`,
32
+ path: ['resourceId']
33
+ }))
34
+ .refine(options => options.resourceType !== 'user' ||
35
+ (options.resourceId && (validation.isValidGuid(options.resourceId) || validation.isValidUserPrincipalName(options.resourceId))), options => ({
36
+ message: `The '${options.resourceId}' must be a valid GUID or user principal name`,
37
+ path: ['resourceId']
38
+ }));
39
+ }
40
+ async commandAction(logger, args) {
41
+ try {
42
+ const requestOptions = {
43
+ url: `${this.resource}/v1.0/${args.options.resourceType}${args.options.resourceType === 'organization' ? '' : 's'}/${args.options.resourceId}/extensions`,
44
+ headers: {
45
+ accept: 'application/json;odata.metadata=none',
46
+ 'content-type': 'application/json'
47
+ },
48
+ responseType: 'json'
49
+ };
50
+ if (args.options.verbose) {
51
+ await logger.logToStderr(`Retrieving open extensions for the ${args.options.resourceType} with id '${args.options.resourceId}'...`);
52
+ }
53
+ const res = await odata.getAllItems(requestOptions);
54
+ await logger.log(res);
55
+ }
56
+ catch (err) {
57
+ this.handleRejectedODataJsonPromise(err);
58
+ }
59
+ }
60
+ }
61
+ export default new GraphOpenExtensionListCommand();
62
+ //# sourceMappingURL=openextension-list.js.map
@@ -0,0 +1,68 @@
1
+ import { z } from 'zod';
2
+ import { globalOptionsZod } from '../../../../Command.js';
3
+ import { zod } from '../../../../utils/zod.js';
4
+ import { validation } from '../../../../utils/validation.js';
5
+ import GraphCommand from '../../../base/GraphCommand.js';
6
+ import commands from '../../commands.js';
7
+ import { cli } from '../../../../cli/cli.js';
8
+ import request from '../../../../request.js';
9
+ const options = globalOptionsZod
10
+ .extend({
11
+ resourceId: zod.alias('i', z.string()),
12
+ resourceType: zod.alias('t', z.enum(['user', 'group', 'device', 'organization'])),
13
+ name: zod.alias('n', z.string()),
14
+ force: zod.alias('f', z.boolean().optional())
15
+ })
16
+ .strict();
17
+ class GraphOpenExtensionRemoveCommand extends GraphCommand {
18
+ get name() {
19
+ return commands.OPENEXTENSION_REMOVE;
20
+ }
21
+ get description() {
22
+ return 'Removes a specific open extension for a resource';
23
+ }
24
+ get schema() {
25
+ return options;
26
+ }
27
+ getRefinedSchema(schema) {
28
+ return schema
29
+ .refine(options => options.resourceType !== 'group' && options.resourceType !== 'device' && options.resourceType !== 'organization' || (options.resourceId && validation.isValidGuid(options.resourceId)), options => ({
30
+ message: `The '${options.resourceId}' must be a valid GUID`,
31
+ path: ['resourceId']
32
+ }))
33
+ .refine(options => options.resourceType !== 'user' || (options.resourceId && (validation.isValidGuid(options.resourceId) || validation.isValidUserPrincipalName(options.resourceId))), options => ({
34
+ message: `The '${options.resourceId}' must be a valid GUID or user principal name`,
35
+ path: ['resourceId']
36
+ }));
37
+ }
38
+ async commandAction(logger, args) {
39
+ const removeOpenExtension = async () => {
40
+ try {
41
+ if (this.verbose) {
42
+ await logger.logToStderr(`Removing open extension for resource ${args.options.resourceId}...`);
43
+ }
44
+ const requestOptions = {
45
+ url: `${this.resource}/v1.0/${args.options.resourceType}${args.options.resourceType === 'organization' ? '' : 's'}/${args.options.resourceId}/extensions/${args.options.name}`,
46
+ headers: {
47
+ accept: 'application/json;odata.metadata=none'
48
+ }
49
+ };
50
+ await request.delete(requestOptions);
51
+ }
52
+ catch (err) {
53
+ this.handleRejectedODataJsonPromise(err);
54
+ }
55
+ };
56
+ if (args.options.force) {
57
+ await removeOpenExtension();
58
+ }
59
+ else {
60
+ const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove open extension '${args.options.name}' from resource '${args.options.resourceId}' of type '${args.options.resourceType}'?` });
61
+ if (result) {
62
+ await removeOpenExtension();
63
+ }
64
+ }
65
+ }
66
+ }
67
+ export default new GraphOpenExtensionRemoveCommand();
68
+ //# sourceMappingURL=openextension-remove.js.map
@@ -5,6 +5,9 @@ export default {
5
5
  DIRECTORYEXTENSION_GET: `${prefix} directoryextension get`,
6
6
  DIRECTORYEXTENSION_REMOVE: `${prefix} directoryextension remove`,
7
7
  OPENEXTENSION_ADD: `${prefix} openextension add`,
8
+ OPENEXTENSION_GET: `${prefix} openextension get`,
9
+ OPENEXTENSION_LIST: `${prefix} openextension list`,
10
+ OPENEXTENSION_REMOVE: `${prefix} openextension remove`,
8
11
  SCHEMAEXTENSION_ADD: `${prefix} schemaextension add`,
9
12
  SCHEMAEXTENSION_GET: `${prefix} schemaextension get`,
10
13
  SCHEMAEXTENSION_LIST: `${prefix} schemaextension list`,
@@ -16,7 +16,7 @@ m365 entra policy list [options]
16
16
 
17
17
  ```md definition-list
18
18
  `-t, --type [type]`
19
- : The type of policies to return. Allowed values `activityBasedTimeout`, `authorization`, `claimsMapping`, `homeRealmDiscovery`, `identitySecurityDefaultsEnforcement`, `tokenIssuance`, `tokenLifetime`. If omitted, all policies are returned.
19
+ : The type of policies to return. Allowed values `activityBasedTimeout`, `adminConsentRequest`, `appManagement`, `authenticationFlows`, `authenticationMethods`, `authenticationStrength`, `authorization`, `claimsMapping`, `conditionalAccess`, `crossTenantAccess`, `defaultAppManagement`, `deviceRegistration`, `featureRolloutPolicy`, `homeRealmDiscovery`, `identitySecurityDefaultsEnforcement`, `permissionGrant`, `roleManagement`, `tokenIssuance`, `tokenLifetime`. If omitted, all policies are returned.
20
20
  ```
21
21
 
22
22
  <Global />
@@ -0,0 +1,111 @@
1
+ import Global from '/docs/cmd/_global.mdx';
2
+ import Tabs from '@theme/Tabs';
3
+ import TabItem from '@theme/TabItem';
4
+
5
+ # graph openextension get
6
+
7
+ Retrieves a specific open extension for a resource
8
+
9
+ ## Usage
10
+
11
+ ```sh
12
+ m365 graph openextension get [options]
13
+ ```
14
+
15
+ ## Options
16
+
17
+ ```md definition-list
18
+ `-n, --name <name>`
19
+ : The name of the open extension to retrieve.
20
+
21
+ `-i, --resourceId <resourceId>`
22
+ : The Id of the resource for which to retrieve the open extension.
23
+
24
+ `-t, --resourceType <resourceType>`
25
+ : The type of resource. Allowed values are `user`, `group`, `device`, `organization`.
26
+ ```
27
+
28
+ <Global />
29
+
30
+ ## Examples
31
+
32
+ Retrieve a specified open extension for a user specified by id.
33
+
34
+ ```sh
35
+ m365 graph openextension get --resourceId eb77fbcf-6fe8-458b-985d-1747284793bc --name 'com.contoso.roamingSettings' --resourceType user
36
+ ```
37
+
38
+ Retrieve a specified open extension for a user specified by UPN.
39
+
40
+ ```sh
41
+ m365 graph openextension get --resourceId john.doe@contoso.com --name 'com.contoso.roamingSettings' --resourceType user
42
+ ```
43
+
44
+ ## Response
45
+
46
+ <Tabs>
47
+ <TabItem value="JSON">
48
+
49
+ ```json
50
+ {
51
+ "extensionName": "com.contoso.roamingSettings",
52
+ "name": "com.contoso.roamingSettings",
53
+ "resourceId": "john.doe@contoso.com",
54
+ "resourceType": "user",
55
+ "theme": "dark",
56
+ "color": "red",
57
+ "language": "English",
58
+ "id": "com.contoso.roamingSettings"
59
+ }
60
+ ```
61
+
62
+ </TabItem>
63
+ <TabItem value="Text">
64
+
65
+ ```text
66
+ color : red
67
+ extensionName: com.contoso.roamingSettings
68
+ id : com.contoso.roamingSettings
69
+ language : English
70
+ name : com.contoso.roamingSettings
71
+ resourceId : john.doe@contoso.com
72
+ resourceType : user
73
+ theme : dark
74
+ ```
75
+
76
+ </TabItem>
77
+ <TabItem value="CSV">
78
+
79
+ ```csv
80
+ extensionName,name,resourceId,resourceType,theme,color,language,id
81
+ com.contoso.roamingSettings,com.contoso.roamingSettings,john.doe@contoso.com,user,dark,red,English,com.contoso.roamingSettings
82
+ ```
83
+
84
+ </TabItem>
85
+ <TabItem value="Markdown">
86
+
87
+ ```md
88
+ # graph openextension get --debug "false" --verbose "false" --resourceId "john.doe@contoso.com" --resourceType "user" --name "com.contoso.roamingSettings"
89
+
90
+ Date: 2025-04-07
91
+
92
+ ## com.contoso.roamingSettings (com.contoso.roamingSettings)
93
+
94
+ Property | Value
95
+ ---------|-------
96
+ extensionName | com.contoso.roamingSettings
97
+ name | com.contoso.roamingSettings
98
+ resourceId | john.doe@contoso.com
99
+ resourceType | user
100
+ theme | dark
101
+ color | red
102
+ language | English
103
+ id | com.contoso.roamingSettings
104
+ ```
105
+
106
+ </TabItem>
107
+ </Tabs>
108
+
109
+ ## More information
110
+
111
+ - Open extensions: https://learn.microsoft.com/graph/extensibility-overview?tabs=http#open-extensions
@@ -0,0 +1,129 @@
1
+ import Global from '/docs/cmd/_global.mdx';
2
+ import Tabs from '@theme/Tabs';
3
+ import TabItem from '@theme/TabItem';
4
+
5
+ # graph openextension list
6
+
7
+ Retrieves all open extensions for a resource
8
+
9
+ ## Usage
10
+
11
+ ```sh
12
+ m365 graph openextension list [options]
13
+ ```
14
+
15
+ ## Options
16
+
17
+ ```md definition-list
18
+ `-i, --resourceId <resourceId>`
19
+ : The Id of the resource for which to retrieve open extensions.
20
+
21
+ `-t, --resourceType <resourceType>`
22
+ : The type of resource. Allowed values are `user`, `group`, `device`, `organization`.
23
+ ```
24
+
25
+ <Global />
26
+
27
+ ## Examples
28
+
29
+ Retrieve open extensions for a user specified by id
30
+
31
+ ```sh
32
+ m365 graph openextension list --resourceId eb77fbcf-6fe8-458b-985d-1747284793bc --resourceType user
33
+ ```
34
+
35
+ Retrieve open extensions for a user specified by UPN
36
+
37
+ ```sh
38
+ m365 graph openextension list --resourceId john.doe@contoso.com --resourceType user
39
+ ```
40
+
41
+ Retrieve open extensions for a group specified by id
42
+
43
+ ```sh
44
+ m365 graph openextension list --resourceId 19588303-70bf-44a4-beb1-e2f0f1ed06b3 --resourceType group
45
+ ```
46
+
47
+ Retrieve open extensions for an organization specified by id
48
+
49
+ ```sh
50
+ m365 graph openextension list --resourceId c956e711-f074-40c3-8431-fbd69bb67d9c --resourceType organization
51
+ ```
52
+
53
+ ## Response
54
+
55
+ <Tabs>
56
+ <TabItem value="JSON">
57
+
58
+ ```json
59
+ [
60
+ {
61
+ "extensionName": "com.contoso.roamingSettings",
62
+ "theme": "dark",
63
+ "color": "purple",
64
+ "lang": "Japanese",
65
+ "id": "com.contoso.roamingSettings"
66
+ },
67
+ {
68
+ "extensionName": "com.test.m365",
69
+ "settings": {
70
+ "theme": "dark"
71
+ },
72
+ "supportedSystem": "Linux",
73
+ "id": "com.test.m365"
74
+ }
75
+ ]
76
+ ```
77
+
78
+ </TabItem>
79
+ <TabItem value="Text">
80
+
81
+ ```text
82
+ extensionName id
83
+ --------------------------- ---------------------------
84
+ com.contoso.roamingSettings com.contoso.roamingSettings
85
+ com.test.m365 com.test.m365
86
+ ```
87
+
88
+ </TabItem>
89
+ <TabItem value="CSV">
90
+
91
+ ```csv
92
+ extensionName,theme,color,lang,id
93
+ com.contoso.roamingSettings,dark,purple,Japanese,com.contoso.roamingSettings
94
+ com.test.m365,,,,com.test.m365
95
+ ```
96
+
97
+ </TabItem>
98
+ <TabItem value="Markdown">
99
+
100
+ ```md
101
+ # graph openextension list --resourceId "eb77fbcf-6fe8-458b-985d-1747284793bc" --resourceType "user"
102
+
103
+ Date: 3/29/2025
104
+
105
+ ## com.contoso.roamingSettings
106
+
107
+ Property | Value
108
+ ---------|-------
109
+ extensionName | com.contoso.roamingSettings
110
+ theme | dark
111
+ color | purple
112
+ lang | Japanese
113
+ id | com.contoso.roamingSettings
114
+
115
+ ## com.test.m365
116
+
117
+ Property | Value
118
+ ---------|-------
119
+ extensionName | com.test.m365
120
+ supportedSystem | Linux
121
+ id | com.test.m365
122
+ ```
123
+
124
+ </TabItem>
125
+ </Tabs>
126
+
127
+ ## More information
128
+
129
+ - Open extensions: https://learn.microsoft.com/graph/extensibility-overview?tabs=http#open-extensions
@@ -0,0 +1,59 @@
1
+ import Global from '/docs/cmd/_global.mdx';
2
+ import Tabs from '@theme/Tabs';
3
+ import TabItem from '@theme/TabItem';
4
+
5
+ # graph openextension remove
6
+
7
+ Removes a specific open extension for a resource
8
+
9
+ ## Usage
10
+
11
+ ```sh
12
+ m365 graph openextension remove [options]
13
+ ```
14
+
15
+ ## Options
16
+
17
+ ```md definition-list
18
+ `-n, --name <name>`
19
+ : The name of the open extension to remove.
20
+
21
+ `-i, --resourceId <resourceId>`
22
+ : The Id of the resource for which to remove the open extension.
23
+
24
+ `-t, --resourceType <resourceType>`
25
+ : The type of resource. Allowed values are `user`, `group`, `device`, `organization`.
26
+
27
+ `-f, --force`
28
+ : Don't prompt for confirmation.
29
+ ```
30
+
31
+ <Global />
32
+
33
+ ## Examples
34
+
35
+ Remove a specified open extension for a user specified by id.
36
+
37
+ ```sh
38
+ m365 graph openextension remove --resourceId eb77fbcf-6fe8-458b-985d-1747284793bc --name 'com.contoso.roamingSettings' --resourceType user
39
+ ```
40
+
41
+ Remove a specified open extension for a user specified by UPN without confirmation prompt.
42
+
43
+ ```sh
44
+ m365 graph openextension remove --resourceId john.doe@contoso.com --name 'com.contoso.roamingSettings' --resourceType user --force
45
+ ```
46
+
47
+ Remove a specified open extension for a group specified by id.
48
+
49
+ ```sh
50
+ m365 graph openextension remove --resourceId c956e711-f074-40c3-8431-fbd69bb67d9c --name 'com.contoso.groupSettings' --resourceType group
51
+ ```
52
+
53
+ ## Response
54
+
55
+ The command won't return a response on success.
56
+
57
+ ## More information
58
+
59
+ - Open extensions: https://learn.microsoft.com/graph/extensibility-overview?tabs=http#open-extensions
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pnp/cli-microsoft365",
3
- "version": "10.6.0-beta.807bbab",
3
+ "version": "10.6.0-beta.908b842",
4
4
  "description": "Manage Microsoft 365 and SharePoint Framework projects on any platform",
5
5
  "license": "MIT",
6
6
  "main": "./dist/api.js",