@pnp/cli-microsoft365 10.8.0-beta.a51d886 → 10.8.0
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/.eslintrc.cjs +2 -1
- package/README.md +3 -1
- package/allCommands.json +1 -1
- package/allCommandsFull.json +1 -1
- package/dist/cli/cli.js +1 -1
- package/dist/config.js +1 -0
- package/dist/m365/adaptivecard/commands/adaptivecard-send.js +54 -67
- package/dist/m365/app/commands/app-get.js +5 -2
- package/dist/m365/app/commands/app-open.js +9 -22
- package/dist/m365/app/commands/permission/permission-add.js +18 -30
- package/dist/m365/app/commands/permission/permission-list.js +5 -2
- package/dist/m365/base/AppCommand.js +9 -25
- package/dist/m365/booking/commands/business/business-get.js +18 -25
- package/dist/m365/cli/commands/app/app-reconsent.js +103 -0
- package/dist/m365/cli/commands.js +1 -0
- package/dist/m365/context/commands/context-remove.js +12 -25
- package/dist/m365/context/commands/option/option-remove.js +11 -25
- package/dist/m365/entra/commands/organization/organization-list.js +51 -0
- package/dist/m365/entra/commands.js +1 -0
- package/dist/m365/graph/commands/directoryextension/directoryextension-list.js +74 -0
- package/dist/m365/graph/commands/openextension/openextension-set.js +107 -0
- package/dist/m365/graph/commands.js +2 -0
- package/dist/m365/spe/commands/container/container-add.js +85 -0
- package/dist/m365/spe/commands/container/container-list.js +2 -9
- package/dist/m365/spe/commands/container/container-recyclebinitem-list.js +62 -0
- package/dist/m365/spe/commands/container/container-remove.js +99 -0
- package/dist/m365/spe/commands/containertype/containertype-add.js +11 -11
- package/dist/m365/spe/commands/containertype/containertype-get.js +28 -32
- package/dist/m365/spe/commands/containertype/containertype-list.js +14 -4
- package/dist/m365/spe/commands/containertype/containertype-remove.js +81 -0
- package/dist/m365/spe/commands.js +5 -1
- package/dist/m365/spo/commands/list/list-get.js +12 -6
- package/dist/m365/spp/commands/model/model-apply.js +130 -0
- package/dist/m365/spp/commands/model/model-get.js +7 -24
- package/dist/m365/spp/commands/model/model-list.js +1 -1
- package/dist/m365/spp/commands/model/model-remove.js +1 -1
- package/dist/m365/spp/commands.js +1 -0
- package/dist/utils/entraServicePrincipal.js +11 -0
- package/dist/utils/formatting.js +12 -0
- package/dist/utils/spe.js +77 -0
- package/dist/utils/spo.js +0 -18
- package/dist/utils/spp.js +59 -1
- package/dist/utils/zod.js +26 -1
- package/docs/docs/cmd/adaptivecard/adaptivecard-send.mdx +1 -1
- package/docs/docs/cmd/cli/app/app-reconsent.mdx +63 -0
- package/docs/docs/cmd/entra/organization/organization-list.mdx +154 -0
- package/docs/docs/cmd/graph/directoryextension/directoryextension-list.mdx +135 -0
- package/docs/docs/cmd/graph/openextension/openextension-set.mdx +97 -0
- package/docs/docs/cmd/spe/container/container-activate.mdx +0 -2
- package/docs/docs/cmd/spe/container/container-add.mdx +128 -0
- package/docs/docs/cmd/spe/container/container-recyclebinitem-list.mdx +96 -0
- package/docs/docs/cmd/spe/container/container-remove.mdx +65 -0
- package/docs/docs/cmd/spe/containertype/containertype-add.mdx +9 -1
- package/docs/docs/cmd/spe/containertype/containertype-get.mdx +8 -0
- package/docs/docs/cmd/spe/containertype/containertype-list.mdx +8 -0
- package/docs/docs/cmd/spe/containertype/containertype-remove.mdx +52 -0
- package/docs/docs/cmd/spo/list/list-get.mdx +12 -3
- package/docs/docs/cmd/spp/model/model-apply.mdx +79 -0
- package/package.json +3 -3
- package/dist/m365/spe/ContainerProperties.js +0 -2
package/dist/utils/spo.js
CHANGED
|
@@ -53,24 +53,6 @@ export const spo = {
|
|
|
53
53
|
};
|
|
54
54
|
return context;
|
|
55
55
|
},
|
|
56
|
-
async getAllContainerTypes(spoAdminUrl, logger, verbose) {
|
|
57
|
-
const formDigestInfo = await spo.ensureFormDigest(spoAdminUrl, logger, undefined, verbose);
|
|
58
|
-
const requestOptions = {
|
|
59
|
-
url: `${spoAdminUrl}/_vti_bin/client.svc/ProcessQuery`,
|
|
60
|
-
headers: {
|
|
61
|
-
'X-RequestDigest': formDigestInfo.FormDigestValue
|
|
62
|
-
},
|
|
63
|
-
data: `<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="16.0.0.0" ApplicationName="${config.applicationName}" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"><Actions><ObjectPath Id="46" ObjectPathId="45" /><Method Name="GetSPOContainerTypes" Id="47" ObjectPathId="45"><Parameters><Parameter Type="Enum">1</Parameter></Parameters></Method></Actions><ObjectPaths><Constructor Id="45" TypeId="{268004ae-ef6b-4e9b-8425-127220d84719}" /></ObjectPaths></Request>`
|
|
64
|
-
};
|
|
65
|
-
const res = await request.post(requestOptions);
|
|
66
|
-
const json = JSON.parse(res);
|
|
67
|
-
const response = json[0];
|
|
68
|
-
if (response.ErrorInfo) {
|
|
69
|
-
throw new Error(response.ErrorInfo.ErrorMessage);
|
|
70
|
-
}
|
|
71
|
-
const containerTypes = json[json.length - 1];
|
|
72
|
-
return containerTypes;
|
|
73
|
-
},
|
|
74
56
|
async waitUntilFinished({ operationId, siteUrl, logger, currentContext, debug, verbose }) {
|
|
75
57
|
const resFormDigest = await spo.ensureFormDigest(siteUrl, logger, currentContext, debug);
|
|
76
58
|
currentContext = resFormDigest;
|
package/dist/utils/spp.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import request from '../request.js';
|
|
2
|
+
import { formatting } from './formatting.js';
|
|
2
3
|
export const spp = {
|
|
3
4
|
/**
|
|
4
5
|
* Asserts whether the specified site is a content center
|
|
5
6
|
* @param siteUrl The URL of the site to check
|
|
7
|
+
* @param logger Logger instance
|
|
8
|
+
* @param verbose Whether to log verbose messages
|
|
6
9
|
* @throws error when site is not a content center.
|
|
7
10
|
*/
|
|
8
|
-
async assertSiteIsContentCenter(siteUrl) {
|
|
11
|
+
async assertSiteIsContentCenter(siteUrl, logger, verbose) {
|
|
12
|
+
if (verbose) {
|
|
13
|
+
await logger.log(`Checking if '${siteUrl}' is a valid content center site...`);
|
|
14
|
+
}
|
|
9
15
|
const requestOptions = {
|
|
10
16
|
url: `${siteUrl}/_api/web?$select=WebTemplateConfiguration`,
|
|
11
17
|
headers: {
|
|
@@ -17,6 +23,58 @@ export const spp = {
|
|
|
17
23
|
if (response.WebTemplateConfiguration !== 'CONTENTCTR#0') {
|
|
18
24
|
throw Error(`${siteUrl} is not a content site.`);
|
|
19
25
|
}
|
|
26
|
+
},
|
|
27
|
+
/**
|
|
28
|
+
* Gets a SharePoint Premium model by title
|
|
29
|
+
* @param contentCenterUrl a content center site URL
|
|
30
|
+
* @param title model title
|
|
31
|
+
* @param logger Logger instance
|
|
32
|
+
* @param verbose Whether to log verbose messages
|
|
33
|
+
* @returns SharePoint Premium model
|
|
34
|
+
*/
|
|
35
|
+
async getModelByTitle(contentCenterUrl, title, logger, verbose) {
|
|
36
|
+
if (verbose) {
|
|
37
|
+
await logger.log(`Retrieving model information...`);
|
|
38
|
+
}
|
|
39
|
+
let requestTitle = title.toLowerCase();
|
|
40
|
+
if (!requestTitle.endsWith('.classifier')) {
|
|
41
|
+
requestTitle += '.classifier';
|
|
42
|
+
}
|
|
43
|
+
const requestUrl = `${contentCenterUrl}/_api/machinelearning/models/getbytitle('${formatting.encodeQueryParameter(requestTitle)}')`;
|
|
44
|
+
const requestOptions = {
|
|
45
|
+
url: requestUrl,
|
|
46
|
+
headers: {
|
|
47
|
+
accept: 'application/json;odata=nometadata'
|
|
48
|
+
},
|
|
49
|
+
responseType: 'json'
|
|
50
|
+
};
|
|
51
|
+
const result = await request.get(requestOptions);
|
|
52
|
+
if (result['odata.null'] === true) {
|
|
53
|
+
throw Error(`Model '${title}' was not found.`);
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
},
|
|
57
|
+
/**
|
|
58
|
+
* Gets a SharePoint Premium model by unique id
|
|
59
|
+
* @param contentCenterUrl a content center site URL
|
|
60
|
+
* @param id model unique id
|
|
61
|
+
* @param logger Logger instance
|
|
62
|
+
* @param verbose Whether to log verbose messages
|
|
63
|
+
* @returns SharePoint Premium model
|
|
64
|
+
*/
|
|
65
|
+
async getModelById(contentCenterUrl, id, logger, verbose) {
|
|
66
|
+
if (verbose) {
|
|
67
|
+
await logger.log(`Retrieving model information...`);
|
|
68
|
+
}
|
|
69
|
+
const requestUrl = `${contentCenterUrl}/_api/machinelearning/models/getbyuniqueid('${id}')`;
|
|
70
|
+
const requestOptions = {
|
|
71
|
+
url: requestUrl,
|
|
72
|
+
headers: {
|
|
73
|
+
accept: 'application/json;odata=nometadata'
|
|
74
|
+
},
|
|
75
|
+
responseType: 'json'
|
|
76
|
+
};
|
|
77
|
+
return await request.get(requestOptions);
|
|
20
78
|
}
|
|
21
79
|
};
|
|
22
80
|
//# sourceMappingURL=spp.js.map
|
package/dist/utils/zod.js
CHANGED
|
@@ -110,16 +110,41 @@ function parseDef(def, options, currentOption) {
|
|
|
110
110
|
}
|
|
111
111
|
} while (parsedDef);
|
|
112
112
|
}
|
|
113
|
+
function optionToString(optionInfo) {
|
|
114
|
+
let s = '';
|
|
115
|
+
if (optionInfo.short) {
|
|
116
|
+
s += `-${optionInfo.short}, `;
|
|
117
|
+
}
|
|
118
|
+
s += `--${optionInfo.long}`;
|
|
119
|
+
if (optionInfo.type !== 'boolean') {
|
|
120
|
+
s += ' ';
|
|
121
|
+
s += optionInfo.required ? '<' : '[';
|
|
122
|
+
s += optionInfo.long;
|
|
123
|
+
s += optionInfo.required ? '>' : ']';
|
|
124
|
+
}
|
|
125
|
+
return s;
|
|
126
|
+
}
|
|
127
|
+
;
|
|
113
128
|
export const zod = {
|
|
114
129
|
alias(alias, type) {
|
|
115
130
|
type._def.alias = alias;
|
|
116
131
|
return type;
|
|
117
132
|
},
|
|
118
|
-
|
|
133
|
+
schemaToOptionInfo(schema) {
|
|
119
134
|
const options = [];
|
|
120
135
|
parseDef(schema._def, options);
|
|
121
136
|
return options;
|
|
122
137
|
},
|
|
138
|
+
schemaToOptions(schema) {
|
|
139
|
+
const optionsInfo = this.schemaToOptionInfo(schema);
|
|
140
|
+
const options = optionsInfo.map(option => {
|
|
141
|
+
return {
|
|
142
|
+
option: optionToString(option),
|
|
143
|
+
autocomplete: option.autocomplete
|
|
144
|
+
};
|
|
145
|
+
});
|
|
146
|
+
return options;
|
|
147
|
+
},
|
|
123
148
|
coercedEnum: (e) => z.preprocess(val => {
|
|
124
149
|
const target = String(val)?.toLowerCase();
|
|
125
150
|
for (const k of Object.values(e)) {
|
|
@@ -17,7 +17,7 @@ m365 adaptivecard send [options]
|
|
|
17
17
|
: URL where to send the card to.
|
|
18
18
|
|
|
19
19
|
`-t, --title [title]`
|
|
20
|
-
: Title of the card.
|
|
20
|
+
: Title of the card. If you specify `title` and `card`, the `title` will be merged into the card.
|
|
21
21
|
|
|
22
22
|
`-d, --description [description]`
|
|
23
23
|
: Contents of the card.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import Global from '/docs/cmd/_global.mdx';
|
|
2
|
+
import Tabs from '@theme/Tabs';
|
|
3
|
+
import TabItem from '@theme/TabItem';
|
|
4
|
+
|
|
5
|
+
# cli app reconsent
|
|
6
|
+
|
|
7
|
+
Reconsent all permission scopes used in CLI for Microsoft 365
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
m365 cli app reconsent [options]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Options
|
|
16
|
+
|
|
17
|
+
<Global />
|
|
18
|
+
|
|
19
|
+
## Remarks
|
|
20
|
+
|
|
21
|
+
This command will add all missing scopes used in CLI for Microsoft 365 to your current app registration. It will only add missing scopes and won't remove any scopes that are already present in the app registration.
|
|
22
|
+
|
|
23
|
+
## Examples
|
|
24
|
+
|
|
25
|
+
Consent all permission scopes used in CLI for Microsoft 365 to the current app registration
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
m365 cli app reconsent
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Response
|
|
32
|
+
|
|
33
|
+
<Tabs>
|
|
34
|
+
<TabItem value="JSON">
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
"To consent to the new scopes for your Microsoft Entra application registration, please navigate to the following URL: https://login.microsoftonline.com/f72203fd-b0a0-472d-85eb-079a117a80de/adminconsent?client_id=62b981af-59d3-4d25-8baf-6cc067a03102"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
</TabItem>
|
|
41
|
+
<TabItem value="Text">
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
To consent to the new scopes for your Microsoft Entra application registration, please navigate to the following URL: https://login.microsoftonline.com/f72203fd-b0a0-472d-85eb-079a117a80de/adminconsent?client_id=62b981af-59d3-4d25-8baf-6cc067a03102
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
</TabItem>
|
|
48
|
+
<TabItem value="CSV">
|
|
49
|
+
|
|
50
|
+
```csv
|
|
51
|
+
To consent to the new scopes for your Microsoft Entra application registration, please navigate to the following URL: https://login.microsoftonline.com/f72203fd-b0a0-472d-85eb-079a117a80de/adminconsent?client_id=62b981af-59d3-4d25-8baf-6cc067a03102
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
</TabItem>
|
|
55
|
+
<TabItem value="Markdown">
|
|
56
|
+
|
|
57
|
+
```md
|
|
58
|
+
To consent to the new scopes for your Microsoft Entra application registration, please navigate to the following URL: https://login.microsoftonline.com/f72203fd-b0a0-472d-85eb-079a117a80de/adminconsent?client_id=62b981af-59d3-4d25-8baf-6cc067a03102
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
</TabItem>
|
|
62
|
+
</Tabs>
|
|
63
|
+
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import Global from '/docs/cmd/_global.mdx';
|
|
2
|
+
import Tabs from '@theme/Tabs';
|
|
3
|
+
import TabItem from '@theme/TabItem';
|
|
4
|
+
|
|
5
|
+
# entra organization list
|
|
6
|
+
|
|
7
|
+
Retrieves a list of organizations
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
m365 entra organization list [options]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Options
|
|
16
|
+
|
|
17
|
+
```md definition-list
|
|
18
|
+
`-p, --properties [properties]`
|
|
19
|
+
: The comma separated list of properties to be returned.
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
<Global />
|
|
23
|
+
|
|
24
|
+
## Remarks
|
|
25
|
+
|
|
26
|
+
:::info
|
|
27
|
+
|
|
28
|
+
Applications granted the `User.Read` permission are able to read only the id, displayName, and verifiedDomains properties of the organization.
|
|
29
|
+
All other properties return with null values. To read all properties, use at least `Organization.Read.All`.
|
|
30
|
+
|
|
31
|
+
:::
|
|
32
|
+
|
|
33
|
+
## Examples
|
|
34
|
+
|
|
35
|
+
Retrieve organizations
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
m365 entra organization list
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Retrieve specific info
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
m365 entra organization list --properties 'id,displayName,tenantType'
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Response
|
|
48
|
+
|
|
49
|
+
<Tabs>
|
|
50
|
+
<TabItem value="JSON">
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
[
|
|
54
|
+
{
|
|
55
|
+
"id": "e65b162c-6f87-4eb1-a24e-1b37d3504663",
|
|
56
|
+
"deletedDateTime": null,
|
|
57
|
+
"businessPhones": [
|
|
58
|
+
"4258828080"
|
|
59
|
+
],
|
|
60
|
+
"city": null,
|
|
61
|
+
"country": null,
|
|
62
|
+
"countryLetterCode": "IE",
|
|
63
|
+
"createdDateTime": "2023-02-21T19:56:38Z",
|
|
64
|
+
"defaultUsageLocation": null,
|
|
65
|
+
"displayName": "Contoso",
|
|
66
|
+
"isMultipleDataLocationsForServicesEnabled": null,
|
|
67
|
+
"marketingNotificationEmails": [],
|
|
68
|
+
"onPremisesLastSyncDateTime": null,
|
|
69
|
+
"onPremisesSyncEnabled": null,
|
|
70
|
+
"partnerTenantType": null,
|
|
71
|
+
"postalCode": null,
|
|
72
|
+
"preferredLanguage": "en",
|
|
73
|
+
"securityComplianceNotificationMails": [],
|
|
74
|
+
"securityComplianceNotificationPhones": [],
|
|
75
|
+
"state": null,
|
|
76
|
+
"street": null,
|
|
77
|
+
"technicalNotificationMails": [
|
|
78
|
+
"john.doe@contoso.com"
|
|
79
|
+
],
|
|
80
|
+
"tenantType": "AAD",
|
|
81
|
+
"directorySizeQuota": {
|
|
82
|
+
"used": 1400,
|
|
83
|
+
"total": 300000
|
|
84
|
+
},
|
|
85
|
+
"assignedPlans": [],
|
|
86
|
+
"onPremisesSyncStatus": [],
|
|
87
|
+
"privacyProfile": {
|
|
88
|
+
"contactEmail": "john.doe@contoso.com",
|
|
89
|
+
"statementUrl": ""
|
|
90
|
+
},
|
|
91
|
+
"provisionedPlans": [],
|
|
92
|
+
"verifiedDomains": [
|
|
93
|
+
{
|
|
94
|
+
"capabilities": "Email, OfficeCommunicationsOnline",
|
|
95
|
+
"isDefault": true,
|
|
96
|
+
"isInitial": true,
|
|
97
|
+
"name": "contoso.onmicrosoft.com",
|
|
98
|
+
"type": "Managed"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"capabilities": "Email, OfficeCommunicationsOnline, MoeraDomain",
|
|
102
|
+
"isDefault": false,
|
|
103
|
+
"isInitial": false,
|
|
104
|
+
"name": "contoso2.onmicrosoft.com",
|
|
105
|
+
"type": "Managed"
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
]
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
</TabItem>
|
|
113
|
+
<TabItem value="Text">
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
displayName: Contoso
|
|
117
|
+
id : e65b162c-6f87-4eb1-a24e-1b37d3504663
|
|
118
|
+
tenantType : AAD
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
</TabItem>
|
|
122
|
+
<TabItem value="CSV">
|
|
123
|
+
|
|
124
|
+
```csv
|
|
125
|
+
id,deletedDateTime,city,country,countryLetterCode,createdDateTime,defaultUsageLocation,displayName,isMultipleDataLocationsForServicesEnabled,onPremisesLastSyncDateTime,onPremisesSyncEnabled,partnerTenantType,postalCode,preferredLanguage,state,street,tenantType
|
|
126
|
+
e65b162c-6f87-4eb1-a24e-1b37d3504663,,,,IE,2023-02-21T19:56:38Z,,Contoso,,,,,,en,,,AAD
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
</TabItem>
|
|
130
|
+
<TabItem value="Markdown">
|
|
131
|
+
|
|
132
|
+
```md
|
|
133
|
+
# entra organization list --debug "false" --verbose "false"
|
|
134
|
+
|
|
135
|
+
Date: 4/18/2025
|
|
136
|
+
|
|
137
|
+
## Contoso (e65b162c-6f87-4eb1-a24e-1b37d3504663)
|
|
138
|
+
|
|
139
|
+
Property | Value
|
|
140
|
+
---------|-------
|
|
141
|
+
id | e65b162c-6f87-4eb1-a24e-1b37d3504663
|
|
142
|
+
countryLetterCode | IE
|
|
143
|
+
createdDateTime | 2023-02-21T19:56:38Z
|
|
144
|
+
displayName | Contoso
|
|
145
|
+
preferredLanguage | en
|
|
146
|
+
tenantType | AAD
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
</TabItem>
|
|
150
|
+
</Tabs>
|
|
151
|
+
|
|
152
|
+
## More information
|
|
153
|
+
|
|
154
|
+
- Organization: https://learn.microsoft.com/graph/api/organization-list
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import Global from '/docs/cmd/_global.mdx';
|
|
2
|
+
import Tabs from '@theme/Tabs';
|
|
3
|
+
import TabItem from '@theme/TabItem';
|
|
4
|
+
|
|
5
|
+
# graph directoryextension list
|
|
6
|
+
|
|
7
|
+
Retrieves a list of directory extensions
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
m365 graph directoryextension list [options]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Options
|
|
16
|
+
|
|
17
|
+
```md definition-list
|
|
18
|
+
`--appId [appId]`
|
|
19
|
+
: Application (client) ID of the Entra application where the directory extensions are registered. Specify either `appId`, `appObjectId` or `appName`, but not multiple.
|
|
20
|
+
|
|
21
|
+
`--appObjectId [appObjectId]`
|
|
22
|
+
: Object ID of the Entra application where the directory extensions are registered. Specify either `appId`, `appObjectId` or `appName`, but not multiple.
|
|
23
|
+
|
|
24
|
+
`--appName [appName]`
|
|
25
|
+
: The name of Entra application where the directory extensions are registered. Specify either `appId`, `appObjectId` or `appName`, but not multiple.
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
<Global />
|
|
29
|
+
|
|
30
|
+
## Remarks
|
|
31
|
+
|
|
32
|
+
When neither `appId`, `appObjectId` nor `appName` is specified, the command will return all available directory extensions including those registered for multi-tenant apps.
|
|
33
|
+
|
|
34
|
+
https://learn.microsoft.com/en-us/graph/api/directoryobject-getavailableextensionproperties?view=graph-rest-1.0&tabs=http
|
|
35
|
+
|
|
36
|
+
Otherwise, it will return directory extensions for a specific application.
|
|
37
|
+
|
|
38
|
+
https://learn.microsoft.com/en-us/graph/api/application-list-extensionproperty?view=graph-rest-1.0&tabs=http
|
|
39
|
+
|
|
40
|
+
## Examples
|
|
41
|
+
|
|
42
|
+
Get all available directory extensions including those registered for multi-tenant apps
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
m365 graph directoryextension list
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Get all directory extensions registered for an application specified by app id.
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
m365 graph directoryextension list --appId fd918e4b-c821-4efb-b50a-5eddd23afc6f
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Get all directory extensions registered for an application specified by app object id.
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
m365 graph directoryextension list --appObjectId 1caf7dcd-7e83-4c3a-94f7-932a1299c844
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Get all directory extensions registered for an application specified by name.
|
|
61
|
+
|
|
62
|
+
```sh
|
|
63
|
+
m365 graph directoryextension list --appName ContosoApp
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Response
|
|
67
|
+
|
|
68
|
+
<Tabs>
|
|
69
|
+
<TabItem value="JSON">
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
[
|
|
73
|
+
{
|
|
74
|
+
"id": "8133c498-ad76-4a7b-90a0-675bf5adf492",
|
|
75
|
+
"deletedDateTime": null,
|
|
76
|
+
"appDisplayName": "ContosoApp",
|
|
77
|
+
"dataType": "String",
|
|
78
|
+
"isMultiValued": true,
|
|
79
|
+
"isSyncedFromOnPremises": false,
|
|
80
|
+
"name": "extension_66eac1c505384aec9e024b9e60f5e4b9_jobGroup",
|
|
81
|
+
"targetObjects": [
|
|
82
|
+
"User"
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
</TabItem>
|
|
89
|
+
<TabItem value="Text">
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
appDisplayName : ContosoApp
|
|
93
|
+
dataType : String
|
|
94
|
+
deletedDateTime : null
|
|
95
|
+
id : 8133c498-ad76-4a7b-90a0-675bf5adf492
|
|
96
|
+
isMultiValued : true
|
|
97
|
+
isSyncedFromOnPremises: false
|
|
98
|
+
name : extension_66eac1c505384aec9e024b9e60f5e4b9_jobGroup
|
|
99
|
+
targetObjects : ["User"]
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
</TabItem>
|
|
103
|
+
<TabItem value="CSV">
|
|
104
|
+
|
|
105
|
+
```csv
|
|
106
|
+
id,deletedDateTime,appDisplayName,dataType,isMultiValued,isSyncedFromOnPremises,name
|
|
107
|
+
8133c498-ad76-4a7b-90a0-675bf5adf492,,ContosoApp,String,1,0,extension_66eac1c505384aec9e024b9e60f5e4b9_jobGroup
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
</TabItem>
|
|
111
|
+
<TabItem value="Markdown">
|
|
112
|
+
|
|
113
|
+
```md
|
|
114
|
+
# graph directoryextension list --debug "false" --verbose "false" --appId "66eac1c5-0538-4aec-9e02-4b9e60f5e4b9"
|
|
115
|
+
|
|
116
|
+
Date: 3/23/2025
|
|
117
|
+
|
|
118
|
+
## extension_66eac1c505384aec9e024b9e60f5e4b9_jobGroup (8133c498-ad76-4a7b-90a0-675bf5adf492)
|
|
119
|
+
|
|
120
|
+
Property | Value
|
|
121
|
+
---------|-------
|
|
122
|
+
id | 8133c498-ad76-4a7b-90a0-675bf5adf492
|
|
123
|
+
appDisplayName | ContosoApp
|
|
124
|
+
dataType | String
|
|
125
|
+
isMultiValued | true
|
|
126
|
+
isSyncedFromOnPremises | false
|
|
127
|
+
name | extension\_66eac1c505384aec9e024b9e60f5e4b9\_jobGroup
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
</TabItem>
|
|
131
|
+
</Tabs>
|
|
132
|
+
|
|
133
|
+
## More information
|
|
134
|
+
|
|
135
|
+
- Directory extensions: https://learn.microsoft.com/graph/extensibility-overview#directory-microsoft-entra-id-extensions
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import Global from '/docs/cmd/_global.mdx';
|
|
2
|
+
import Tabs from '@theme/Tabs';
|
|
3
|
+
import TabItem from '@theme/TabItem';
|
|
4
|
+
|
|
5
|
+
# graph openextension set
|
|
6
|
+
|
|
7
|
+
Updates an open extension for a resource
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
m365 graph openextension set [options]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Options
|
|
16
|
+
|
|
17
|
+
```md definition-list
|
|
18
|
+
`-n, --name <name>`
|
|
19
|
+
: The name of the open extension.
|
|
20
|
+
|
|
21
|
+
`-i, --resourceId <resourceId>`
|
|
22
|
+
: The Id of the resource for which to update the open extension.
|
|
23
|
+
|
|
24
|
+
`-t, --resourceType <resourceType>`
|
|
25
|
+
: The type of resource. Allowed values are `user`, `group`, `device`, `organization`.
|
|
26
|
+
|
|
27
|
+
`-k, --keepUnchangedProperties`
|
|
28
|
+
: Keeps unspecified properties. Without this flag, any property that is not updated will be removed from the extension.
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
<Global />
|
|
32
|
+
|
|
33
|
+
## Remarks
|
|
34
|
+
|
|
35
|
+
This command allows using unknown options to update custom data of the open extension.
|
|
36
|
+
|
|
37
|
+
When updating an open extension to a user, it's possible to use the UPN as the resourceId.
|
|
38
|
+
|
|
39
|
+
:::warning[Escaping JSON in PowerShell]
|
|
40
|
+
|
|
41
|
+
When updating open extensions it's possible to enter a JSON string. In PowerShell 5 to 7.2 [specific escaping rules](./../../../user-guide/using-cli.mdx#escaping-double-quotes-in-powershell) apply due to an issue. Remember that you can also use [file tokens](./../../../user-guide/using-cli.mdx#passing-complex-content-into-cli-options) instead.
|
|
42
|
+
|
|
43
|
+
:::
|
|
44
|
+
|
|
45
|
+
:::info
|
|
46
|
+
|
|
47
|
+
If a property of the open extension is not specified, the property is removed from the open extension.
|
|
48
|
+
|
|
49
|
+
If a property of the open extension is not specified and `keepUnchangedProperties` is specified, the property will be kept in the open extension.
|
|
50
|
+
|
|
51
|
+
:::
|
|
52
|
+
|
|
53
|
+
## Examples
|
|
54
|
+
|
|
55
|
+
Updates an open extension for a user specified by id
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
m365 graph openextension set --userId eb77fbcf-6fe8-458b-985d-1747284793bc --name 'com.contoso.roamingSettings' --resourceType user --theme dark --color red --language English
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Updates an open extension for a user specified by UPN
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
m365 graph openextension set --userName john.doe@contoso.com --name 'com.contoso.roamingSettings' --resourceType user --theme dark --color red --language English
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Updates an open extension for a group specified by id, one of the property represents a JSON object
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
m365 graph openextension set --resourceId c956e711-f074-40c3-8431-fbd69bb67d9c --name 'com.contoso.roamingSettings' --resourceType group --settings '{"theme": "dark", "color": "red" }'
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Updates an open extension, but keeps the properties that are not specified
|
|
74
|
+
|
|
75
|
+
```sh
|
|
76
|
+
m365 graph openextension set --userId eb77fbcf-6fe8-458b-985d-1747284793bc --name 'com.contoso.roamingSettings' --resourceType user --color red --keepUnchangedProperties
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Updates an open extension, but removes the properties that are not specified
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
m365 graph openextension set --userId eb77fbcf-6fe8-458b-985d-1747284793bc --name 'com.contoso.roamingSettings' --resourceType user --color red
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Clears the value of the property
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
m365 graph openextension set --userId eb77fbcf-6fe8-458b-985d-1747284793bc --name 'com.contoso.roamingSettings' --resourceType user --theme ""
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Response
|
|
92
|
+
|
|
93
|
+
The command won't return a response on success.
|
|
94
|
+
|
|
95
|
+
## More information
|
|
96
|
+
|
|
97
|
+
- Open extensions: https://learn.microsoft.com/graph/extensibility-overview?tabs=http#open-extensions
|