@pnp/cli-microsoft365 10.8.0-beta.cdb5c81 → 10.9.0-beta.3261443
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/.devcontainer/Dockerfile +1 -1
- package/Dockerfile +3 -3
- package/README.md +4 -2
- package/allCommands.json +1 -1
- package/allCommandsFull.json +1 -1
- 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/context/commands/context-remove.js +12 -25
- package/dist/m365/context/commands/option/option-remove.js +11 -25
- package/dist/m365/entra/commands/m365group/m365group-get.js +16 -3
- package/dist/m365/entra/commands/m365group/m365group-list.js +7 -1
- package/dist/m365/entra/commands/pim/pim-role-assignment-eligibility-list.js +9 -3
- package/dist/m365/entra/commands/pim/pim-role-assignment-list.js +9 -3
- package/dist/m365/entra/commands/pim/pim-role-request-list.js +9 -3
- package/dist/m365/flow/commands/flow-list.js +14 -7
- package/dist/m365/flow/commands/run/run-get.js +1 -1
- package/dist/m365/graph/commands/directoryextension/directoryextension-list.js +74 -0
- package/dist/m365/graph/commands/subscription/subscription-add.js +10 -3
- package/dist/m365/graph/commands.js +1 -0
- package/dist/m365/pp/commands/solution/solution-publisher-list.js +8 -1
- package/dist/m365/purview/commands/threatassessment/threatassessment-get.js +9 -2
- package/dist/m365/spo/commands/file/file-move.js +8 -2
- package/dist/m365/spo/commands/hubsite/hubsite-get.js +14 -5
- package/dist/m365/spo/commands/hubsite/hubsite-list.js +9 -2
- package/dist/m365/spo/commands/list/list-get.js +12 -6
- package/dist/m365/spo/commands/page/clientsidepages.js +49 -17
- package/dist/m365/spo/commands/tenant/tenant-site-list.js +16 -5
- package/dist/m365/spo/commands/term/term-list.js +10 -3
- 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/m365/teams/commands/chat/chat-member-add.js +10 -4
- package/dist/m365/viva/commands/engage/engage-community-remove.js +99 -0
- package/dist/m365/viva/commands/engage/engage-network-list.js +8 -2
- package/dist/m365/viva/commands.js +1 -0
- package/dist/utils/spp.js +59 -1
- package/docs/docs/cmd/entra/m365group/m365group-get.mdx +8 -5
- package/docs/docs/cmd/entra/m365group/m365group-list.mdx +14 -12
- package/docs/docs/cmd/entra/pim/pim-role-assignment-eligibility-list.mdx +7 -4
- package/docs/docs/cmd/entra/pim/pim-role-assignment-list.mdx +9 -6
- package/docs/docs/cmd/entra/pim/pim-role-request-list.mdx +7 -4
- package/docs/docs/cmd/flow/flow-list.mdx +8 -5
- package/docs/docs/cmd/flow/run/run-get.mdx +1 -1
- package/docs/docs/cmd/graph/directoryextension/directoryextension-list.mdx +135 -0
- package/docs/docs/cmd/graph/subscription/subscription-add.mdx +6 -3
- package/docs/docs/cmd/pp/solution/solution-publisher-list.mdx +7 -4
- package/docs/docs/cmd/purview/threatassessment/threatassessment-get.mdx +7 -4
- package/docs/docs/cmd/spo/file/file-move.mdx +4 -1
- package/docs/docs/cmd/spo/hubsite/hubsite-get.mdx +6 -3
- package/docs/docs/cmd/spo/hubsite/hubsite-list.mdx +7 -4
- package/docs/docs/cmd/spo/list/list-add.mdx +1 -1
- package/docs/docs/cmd/spo/list/list-get.mdx +12 -3
- package/docs/docs/cmd/spo/list/list-set.mdx +2 -2
- package/docs/docs/cmd/spo/tenant/tenant-site-list.mdx +10 -7
- package/docs/docs/cmd/spo/term/term-list.mdx +7 -4
- package/docs/docs/cmd/spp/model/model-apply.mdx +79 -0
- package/docs/docs/cmd/teams/chat/chat-member-add.mdx +6 -3
- package/docs/docs/cmd/viva/engage/engage-community-remove.mdx +61 -0
- package/docs/docs/cmd/viva/engage/engage-network-list.mdx +7 -4
- package/npm-shrinkwrap.json +112 -97
- package/package.json +14 -14
|
@@ -31,8 +31,11 @@ class SpoTenantSiteListCommand extends SpoCommand {
|
|
|
31
31
|
return [commands.SITE_LIST];
|
|
32
32
|
}
|
|
33
33
|
async commandAction(logger, args) {
|
|
34
|
+
if (args.options.includeOneDriveSites) {
|
|
35
|
+
await this.warn(logger, `Parameter 'includeOneDriveSites' is deprecated. Please use 'withOneDriveSites' instead`);
|
|
36
|
+
}
|
|
34
37
|
const webTemplate = this.getWebTemplateId(args.options);
|
|
35
|
-
const includeOneDriveSites = args.options.includeOneDriveSites || false;
|
|
38
|
+
const includeOneDriveSites = (args.options.includeOneDriveSites || args.options.withOneDriveSites) || false;
|
|
36
39
|
const personalSite = includeOneDriveSites === false ? '0' : '1';
|
|
37
40
|
try {
|
|
38
41
|
const spoAdminUrl = await spo.getSpoAdminUrl(logger, this.debug);
|
|
@@ -76,7 +79,7 @@ class SpoTenantSiteListCommand extends SpoCommand {
|
|
|
76
79
|
if (options.webTemplate) {
|
|
77
80
|
return options.webTemplate;
|
|
78
81
|
}
|
|
79
|
-
if (options.includeOneDriveSites) {
|
|
82
|
+
if (options.includeOneDriveSites || options.withOneDriveSites) {
|
|
80
83
|
return '';
|
|
81
84
|
}
|
|
82
85
|
switch (options.type) {
|
|
@@ -95,7 +98,8 @@ _SpoTenantSiteListCommand_instances = new WeakSet(), _SpoTenantSiteListCommand_i
|
|
|
95
98
|
webTemplate: args.options.webTemplate,
|
|
96
99
|
type: args.options.type,
|
|
97
100
|
filter: (!(!args.options.filter)).toString(),
|
|
98
|
-
includeOneDriveSites: typeof args.options.includeOneDriveSites !== 'undefined'
|
|
101
|
+
includeOneDriveSites: typeof args.options.includeOneDriveSites !== 'undefined',
|
|
102
|
+
withOneDriveSites: typeof args.options.withOneDriveSites !== 'undefined'
|
|
99
103
|
});
|
|
100
104
|
});
|
|
101
105
|
}, _SpoTenantSiteListCommand_initOptions = function _SpoTenantSiteListCommand_initOptions() {
|
|
@@ -108,6 +112,8 @@ _SpoTenantSiteListCommand_instances = new WeakSet(), _SpoTenantSiteListCommand_i
|
|
|
108
112
|
option: '--filter [filter]'
|
|
109
113
|
}, {
|
|
110
114
|
option: '--includeOneDriveSites'
|
|
115
|
+
}, {
|
|
116
|
+
option: '--withOneDriveSites'
|
|
111
117
|
});
|
|
112
118
|
}, _SpoTenantSiteListCommand_initValidators = function _SpoTenantSiteListCommand_initValidators() {
|
|
113
119
|
this.validators.push(async (args) => {
|
|
@@ -119,9 +125,14 @@ _SpoTenantSiteListCommand_instances = new WeakSet(), _SpoTenantSiteListCommand_i
|
|
|
119
125
|
typeValues.indexOf(args.options.type) < 0) {
|
|
120
126
|
return `${args.options.type} is not a valid value for the type option. Allowed values are ${typeValues.join('|')}`;
|
|
121
127
|
}
|
|
122
|
-
if (args.options.includeOneDriveSites
|
|
128
|
+
if (args.options.includeOneDriveSites || args.options.withOneDriveSites
|
|
123
129
|
&& (args.options.type || args.options.webTemplate)) {
|
|
124
|
-
|
|
130
|
+
if (args.options.includeOneDriveSites) {
|
|
131
|
+
return 'When using includeOneDriveSites, don\'t specify the type or webTemplate options';
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
return 'When using withOneDriveSites, don\'t specify the type or webTemplate options';
|
|
135
|
+
}
|
|
125
136
|
}
|
|
126
137
|
return true;
|
|
127
138
|
});
|
|
@@ -31,6 +31,9 @@ class SpoTermListCommand extends SpoCommand {
|
|
|
31
31
|
__classPrivateFieldGet(this, _SpoTermListCommand_instances, "m", _SpoTermListCommand_initOptionSets).call(this);
|
|
32
32
|
}
|
|
33
33
|
async commandAction(logger, args) {
|
|
34
|
+
if (args.options.includeChildTerms) {
|
|
35
|
+
await this.warn(logger, `Parameter 'includeChildTerms' is deprecated. Please use 'withChildTerms' instead`);
|
|
36
|
+
}
|
|
34
37
|
try {
|
|
35
38
|
const spoWebUrl = args.options.webUrl ? args.options.webUrl : await spo.getSpoAdminUrl(logger, this.debug);
|
|
36
39
|
const res = await spo.getRequestDigest(spoWebUrl);
|
|
@@ -40,13 +43,14 @@ class SpoTermListCommand extends SpoCommand {
|
|
|
40
43
|
const termGroupQuery = args.options.termGroupId ? `<Method Id="77" ParentId="75" Name="GetById"><Parameters><Parameter Type="Guid">{${args.options.termGroupId}}</Parameter></Parameters></Method>` : `<Method Id="77" ParentId="75" Name="GetByName"><Parameters><Parameter Type="String">${formatting.escapeXml(args.options.termGroupName)}</Parameter></Parameters></Method>`;
|
|
41
44
|
const termSetQuery = args.options.termSetId ? `<Method Id="82" ParentId="80" Name="GetById"><Parameters><Parameter Type="Guid">{${args.options.termSetId}}</Parameter></Parameters></Method>` : `<Method Id="82" ParentId="80" Name="GetByName"><Parameters><Parameter Type="String">${formatting.escapeXml(args.options.termSetName)}</Parameter></Parameters></Method>`;
|
|
42
45
|
const 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="70" ObjectPathId="69" /><ObjectIdentityQuery Id="71" ObjectPathId="69" /><ObjectPath Id="73" ObjectPathId="72" /><ObjectIdentityQuery Id="74" ObjectPathId="72" /><ObjectPath Id="76" ObjectPathId="75" /><ObjectPath Id="78" ObjectPathId="77" /><ObjectIdentityQuery Id="79" ObjectPathId="77" /><ObjectPath Id="81" ObjectPathId="80" /><ObjectPath Id="83" ObjectPathId="82" /><ObjectIdentityQuery Id="84" ObjectPathId="82" /><ObjectPath Id="86" ObjectPathId="85" /><Query Id="87" ObjectPathId="85"><Query SelectAllProperties="false"><Properties /></Query><ChildItemQuery SelectAllProperties="true"><Properties><Property Name="Name" ScalarProperty="true" /><Property Name="Id" ScalarProperty="true" /></Properties></ChildItemQuery></Query></Actions><ObjectPaths><StaticMethod Id="69" Name="GetTaxonomySession" TypeId="{981cbc68-9edc-4f8d-872f-71146fcbb84f}" /><Method Id="72" ParentId="69" Name="GetDefaultSiteCollectionTermStore" /><Property Id="75" ParentId="72" Name="Groups" />${termGroupQuery}<Property Id="80" ParentId="77" Name="TermSets" />${termSetQuery}<Property Id="85" ParentId="82" Name="Terms" /></ObjectPaths></Request>`;
|
|
46
|
+
const shouldIncludeChildTerms = args.options.includeChildTerms || args.options.withChildTerms;
|
|
43
47
|
const result = await this.executeCsomCall(data, spoWebUrl, res);
|
|
44
48
|
const terms = [];
|
|
45
49
|
if (result._Child_Items_ && result._Child_Items_.length > 0) {
|
|
46
50
|
for (const term of result._Child_Items_) {
|
|
47
51
|
this.setTermDetails(term);
|
|
48
52
|
terms.push(term);
|
|
49
|
-
if (
|
|
53
|
+
if (shouldIncludeChildTerms && term.TermsCount > 0) {
|
|
50
54
|
await this.getChildTerms(spoWebUrl, res, term);
|
|
51
55
|
}
|
|
52
56
|
}
|
|
@@ -54,7 +58,7 @@ class SpoTermListCommand extends SpoCommand {
|
|
|
54
58
|
if (!args.options.output || !cli.shouldTrimOutput(args.options.output)) {
|
|
55
59
|
await logger.log(terms);
|
|
56
60
|
}
|
|
57
|
-
else if (!
|
|
61
|
+
else if (!shouldIncludeChildTerms) {
|
|
58
62
|
// Converted to text friendly output
|
|
59
63
|
await logger.log(terms.map(i => {
|
|
60
64
|
return {
|
|
@@ -142,7 +146,8 @@ _SpoTermListCommand_instances = new WeakSet(), _SpoTermListCommand_initTelemetry
|
|
|
142
146
|
termGroupName: typeof args.options.termGroupName !== 'undefined',
|
|
143
147
|
termSetId: typeof args.options.termSetId !== 'undefined',
|
|
144
148
|
termSetName: typeof args.options.termSetName !== 'undefined',
|
|
145
|
-
includeChildTerms: !!args.options.includeChildTerms
|
|
149
|
+
includeChildTerms: !!args.options.includeChildTerms,
|
|
150
|
+
withChildTerms: !!args.options.withChildTerms
|
|
146
151
|
});
|
|
147
152
|
});
|
|
148
153
|
}, _SpoTermListCommand_initOptions = function _SpoTermListCommand_initOptions() {
|
|
@@ -158,6 +163,8 @@ _SpoTermListCommand_instances = new WeakSet(), _SpoTermListCommand_initTelemetry
|
|
|
158
163
|
option: '--termSetName [termSetName]'
|
|
159
164
|
}, {
|
|
160
165
|
option: '--includeChildTerms'
|
|
166
|
+
}, {
|
|
167
|
+
option: '--withChildTerms'
|
|
161
168
|
});
|
|
162
169
|
}, _SpoTermListCommand_initValidators = function _SpoTermListCommand_initValidators() {
|
|
163
170
|
this.validators.push(async (args) => {
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import request from '../../../../request.js';
|
|
2
|
+
import { formatting } from '../../../../utils/formatting.js';
|
|
3
|
+
import { spp } from '../../../../utils/spp.js';
|
|
4
|
+
import { urlUtil } from '../../../../utils/urlUtil.js';
|
|
5
|
+
import { validation } from '../../../../utils/validation.js';
|
|
6
|
+
import SpoCommand from '../../../base/SpoCommand.js';
|
|
7
|
+
import commands from '../../commands.js';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { globalOptionsZod } from '../../../../Command.js';
|
|
10
|
+
import { zod } from '../../../../utils/zod.js';
|
|
11
|
+
const options = globalOptionsZod
|
|
12
|
+
.extend({
|
|
13
|
+
contentCenterUrl: zod.alias('c', z.string()
|
|
14
|
+
.refine(url => validation.isValidSharePointUrl(url) === true, url => ({
|
|
15
|
+
message: `'${url}' is not a valid SharePoint Online site URL.`
|
|
16
|
+
}))),
|
|
17
|
+
webUrl: zod.alias('u', z.string()
|
|
18
|
+
.refine(url => validation.isValidSharePointUrl(url) === true, url => ({
|
|
19
|
+
message: `'${url}' is not a valid SharePoint Online site URL.`
|
|
20
|
+
}))),
|
|
21
|
+
id: zod.alias('i', z.string()
|
|
22
|
+
.refine(id => validation.isValidGuid(id) === true, id => ({
|
|
23
|
+
message: `${id} is not a valid GUID.`
|
|
24
|
+
})).optional()),
|
|
25
|
+
title: zod.alias('t', z.string()).optional(),
|
|
26
|
+
listTitle: z.string().optional(),
|
|
27
|
+
listId: z.string()
|
|
28
|
+
.refine(listId => validation.isValidGuid(listId) === true, listId => ({
|
|
29
|
+
message: `${listId} is not a valid GUID.`
|
|
30
|
+
})).optional(),
|
|
31
|
+
listUrl: z.string().optional(),
|
|
32
|
+
viewOption: z.enum(['NewViewAsDefault', 'DoNotChangeDefault', 'TileViewAsDefault']).optional()
|
|
33
|
+
})
|
|
34
|
+
.strict();
|
|
35
|
+
class SppModelApplyCommand extends SpoCommand {
|
|
36
|
+
get name() {
|
|
37
|
+
return commands.MODEL_APPLY;
|
|
38
|
+
}
|
|
39
|
+
get description() {
|
|
40
|
+
return 'Applies (or syncs) a trained document understanding model to a document library';
|
|
41
|
+
}
|
|
42
|
+
get schema() {
|
|
43
|
+
return options;
|
|
44
|
+
}
|
|
45
|
+
getRefinedSchema(schema) {
|
|
46
|
+
return schema
|
|
47
|
+
.refine(options => [options.id, options.title].filter(x => x !== undefined).length === 1, {
|
|
48
|
+
message: `Specify exactly one of the following options: 'id' or 'title'.`
|
|
49
|
+
})
|
|
50
|
+
.refine(options => [options.listTitle, options.listId, options.listUrl].filter(x => x !== undefined).length === 1, {
|
|
51
|
+
message: `Specify exactly one of the following options: 'listTitle', 'listId' or 'listUrl'.`
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async commandAction(logger, args) {
|
|
55
|
+
try {
|
|
56
|
+
const contentCenterUrl = urlUtil.removeTrailingSlashes(args.options.contentCenterUrl);
|
|
57
|
+
await spp.assertSiteIsContentCenter(contentCenterUrl, logger, this.verbose);
|
|
58
|
+
let model = null;
|
|
59
|
+
if (args.options.title) {
|
|
60
|
+
model = await spp.getModelByTitle(contentCenterUrl, args.options.title, logger, this.verbose);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
model = await spp.getModelById(contentCenterUrl, args.options.id, logger, this.verbose);
|
|
64
|
+
}
|
|
65
|
+
if (this.verbose) {
|
|
66
|
+
await logger.log(`Retrieving list information...`);
|
|
67
|
+
}
|
|
68
|
+
const listInstance = await this.getListInfo(args.options.webUrl, args.options.listId, args.options.listTitle, args.options.listUrl);
|
|
69
|
+
if (listInstance.BaseType !== 1) {
|
|
70
|
+
throw `The specified list is not a document library.`;
|
|
71
|
+
}
|
|
72
|
+
if (this.verbose) {
|
|
73
|
+
await logger.log(`Applying model '${model.ModelName}' to document library '${listInstance.RootFolder.ServerRelativeUrl}'...`);
|
|
74
|
+
}
|
|
75
|
+
const requestOptions = {
|
|
76
|
+
url: `${contentCenterUrl}/_api/machinelearning/publications`,
|
|
77
|
+
headers: {
|
|
78
|
+
accept: 'application/json;odata=nometadata',
|
|
79
|
+
'Content-Type': 'application/json;odata=verbose'
|
|
80
|
+
},
|
|
81
|
+
responseType: 'json',
|
|
82
|
+
data: {
|
|
83
|
+
__metadata: { type: 'Microsoft.Office.Server.ContentCenter.SPMachineLearningPublicationsEntityData' },
|
|
84
|
+
Publications: {
|
|
85
|
+
results: [
|
|
86
|
+
{
|
|
87
|
+
ModelUniqueId: model.UniqueId,
|
|
88
|
+
TargetSiteUrl: args.options.webUrl,
|
|
89
|
+
TargetWebServerRelativeUrl: urlUtil.getServerRelativeSiteUrl(args.options.webUrl),
|
|
90
|
+
TargetLibraryServerRelativeUrl: listInstance.RootFolder.ServerRelativeUrl,
|
|
91
|
+
ViewOption: args.options.viewOption ?? "NewViewAsDefault"
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const result = await request.post(requestOptions);
|
|
98
|
+
const resultDetails = result.Details;
|
|
99
|
+
if (resultDetails && resultDetails[0]?.ErrorMessage) {
|
|
100
|
+
throw resultDetails[0].ErrorMessage;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
this.handleRejectedODataJsonPromise(err);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
getListInfo(webUrl, listId, listTitle, listUrl) {
|
|
108
|
+
let requestUrl = `${webUrl}/_api/web`;
|
|
109
|
+
if (listId) {
|
|
110
|
+
requestUrl += `/lists(guid'${formatting.encodeQueryParameter(listId)}')`;
|
|
111
|
+
}
|
|
112
|
+
else if (listTitle) {
|
|
113
|
+
requestUrl += `/lists/getByTitle('${formatting.encodeQueryParameter(listTitle)}')`;
|
|
114
|
+
}
|
|
115
|
+
else if (listUrl) {
|
|
116
|
+
const listServerRelativeUrl = urlUtil.getServerRelativePath(webUrl, listUrl);
|
|
117
|
+
requestUrl += `/GetList('${formatting.encodeQueryParameter(listServerRelativeUrl)}')`;
|
|
118
|
+
}
|
|
119
|
+
const requestOptions = {
|
|
120
|
+
url: `${requestUrl}?$select=BaseType,RootFolder/ServerRelativeUrl&$expand=RootFolder`,
|
|
121
|
+
headers: {
|
|
122
|
+
accept: 'application/json;odata=nometadata'
|
|
123
|
+
},
|
|
124
|
+
responseType: 'json'
|
|
125
|
+
};
|
|
126
|
+
return request.get(requestOptions);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
export default new SppModelApplyCommand();
|
|
130
|
+
//# sourceMappingURL=model-apply.js.map
|
|
@@ -4,8 +4,6 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
4
4
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
5
|
};
|
|
6
6
|
var _SppModelGetCommand_instances, _SppModelGetCommand_initTelemetry, _SppModelGetCommand_initOptions, _SppModelGetCommand_initValidators, _SppModelGetCommand_initOptionSets, _SppModelGetCommand_initTypes;
|
|
7
|
-
import request from '../../../../request.js';
|
|
8
|
-
import { formatting } from '../../../../utils/formatting.js';
|
|
9
7
|
import { odata } from '../../../../utils/odata.js';
|
|
10
8
|
import { spp } from '../../../../utils/spp.js';
|
|
11
9
|
import { urlUtil } from '../../../../utils/urlUtil.js';
|
|
@@ -30,34 +28,19 @@ class SppModelGetCommand extends SpoCommand {
|
|
|
30
28
|
}
|
|
31
29
|
async commandAction(logger, args) {
|
|
32
30
|
try {
|
|
33
|
-
if (this.verbose) {
|
|
34
|
-
await logger.log(`Retrieving model information from ${args.options.siteUrl}...`);
|
|
35
|
-
}
|
|
36
31
|
const siteUrl = urlUtil.removeTrailingSlashes(args.options.siteUrl);
|
|
37
|
-
await spp.assertSiteIsContentCenter(siteUrl);
|
|
38
|
-
let
|
|
32
|
+
await spp.assertSiteIsContentCenter(siteUrl, logger, this.verbose);
|
|
33
|
+
let result = null;
|
|
39
34
|
if (args.options.title) {
|
|
40
|
-
|
|
41
|
-
if (!requestTitle.endsWith('.classifier')) {
|
|
42
|
-
requestTitle += '.classifier';
|
|
43
|
-
}
|
|
44
|
-
requestUrl += `getbytitle('${formatting.encodeQueryParameter(requestTitle)}')`;
|
|
35
|
+
result = await spp.getModelByTitle(siteUrl, args.options.title, logger, this.verbose);
|
|
45
36
|
}
|
|
46
37
|
else {
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
const requestOptions = {
|
|
50
|
-
url: requestUrl,
|
|
51
|
-
headers: {
|
|
52
|
-
accept: 'application/json;odata=nometadata'
|
|
53
|
-
},
|
|
54
|
-
responseType: 'json'
|
|
55
|
-
};
|
|
56
|
-
const result = await request.get(requestOptions);
|
|
57
|
-
if (result['odata.null'] === true) {
|
|
58
|
-
throw 'Model not found.';
|
|
38
|
+
result = await spp.getModelById(siteUrl, args.options.id, logger, this.verbose);
|
|
59
39
|
}
|
|
60
40
|
if (args.options.withPublications) {
|
|
41
|
+
if (this.verbose) {
|
|
42
|
+
await logger.log(`Retrieving publications for model...`);
|
|
43
|
+
}
|
|
61
44
|
result.Publications = await odata.getAllItems(`${siteUrl}/_api/machinelearning/publications/getbymodeluniqueid('${result.UniqueId}')`);
|
|
62
45
|
}
|
|
63
46
|
await logger.log({
|
|
@@ -33,7 +33,7 @@ class SppModelListCommand extends SpoCommand {
|
|
|
33
33
|
await logger.log(`Retrieving models from ${args.options.siteUrl}...`);
|
|
34
34
|
}
|
|
35
35
|
const siteUrl = urlUtil.removeTrailingSlashes(args.options.siteUrl);
|
|
36
|
-
await spp.assertSiteIsContentCenter(siteUrl);
|
|
36
|
+
await spp.assertSiteIsContentCenter(siteUrl, logger, this.verbose);
|
|
37
37
|
const result = await odata.getAllItems(`${siteUrl}/_api/machinelearning/models`);
|
|
38
38
|
await logger.log(result);
|
|
39
39
|
}
|
|
@@ -40,7 +40,7 @@ class SppModelRemoveCommand extends SpoCommand {
|
|
|
40
40
|
await logger.log(`Removing model from ${args.options.siteUrl}...`);
|
|
41
41
|
}
|
|
42
42
|
const siteUrl = urlUtil.removeTrailingSlashes(args.options.siteUrl);
|
|
43
|
-
await spp.assertSiteIsContentCenter(siteUrl);
|
|
43
|
+
await spp.assertSiteIsContentCenter(siteUrl, logger, this.verbose);
|
|
44
44
|
let requestUrl = `${siteUrl}/_api/machinelearning/models/`;
|
|
45
45
|
if (args.options.title) {
|
|
46
46
|
let requestTitle = args.options.title.toLowerCase();
|
|
@@ -29,6 +29,9 @@ class TeamsChatMemberAddCommand extends GraphCommand {
|
|
|
29
29
|
if (this.verbose) {
|
|
30
30
|
await logger.logToStderr(`Adding member ${args.options.userId || args.options.userName} to chat with id ${args.options.chatId}...`);
|
|
31
31
|
}
|
|
32
|
+
if (args.options.includeAllHistory) {
|
|
33
|
+
await this.warn(logger, `Parameter 'includeAllHistory' is deprecated. Please use 'withAllHistory' instead`);
|
|
34
|
+
}
|
|
32
35
|
const chatMemberAddOptions = {
|
|
33
36
|
url: `${this.resource}/v1.0/chats/${args.options.chatId}/members`,
|
|
34
37
|
headers: {
|
|
@@ -38,7 +41,7 @@ class TeamsChatMemberAddCommand extends GraphCommand {
|
|
|
38
41
|
data: {
|
|
39
42
|
'@odata.type': '#microsoft.graph.aadUserConversationMember',
|
|
40
43
|
'user@odata.bind': `https://graph.microsoft.com/v1.0/users/${args.options.userId || formatting.encodeQueryParameter(args.options.userName)}`,
|
|
41
|
-
visibleHistoryStartDateTime: args.options.includeAllHistory ? '0001-01-01T00:00:00Z' : args.options.visibleHistoryStartDateTime,
|
|
44
|
+
visibleHistoryStartDateTime: (args.options.includeAllHistory || args.options.withAllHistory) ? '0001-01-01T00:00:00Z' : args.options.visibleHistoryStartDateTime,
|
|
42
45
|
roles: [args.options.role || 'owner']
|
|
43
46
|
}
|
|
44
47
|
};
|
|
@@ -56,7 +59,8 @@ _a = TeamsChatMemberAddCommand, _TeamsChatMemberAddCommand_instances = new WeakS
|
|
|
56
59
|
userName: typeof args.options.userName !== 'undefined',
|
|
57
60
|
role: typeof args.options.role !== 'undefined',
|
|
58
61
|
visibleHistoryStartDateTime: typeof args.options.visibleHistoryStartDateTime !== 'undefined',
|
|
59
|
-
includeAllHistory: !!args.options.includeAllHistory
|
|
62
|
+
includeAllHistory: !!args.options.includeAllHistory,
|
|
63
|
+
withAllHistory: !!args.options.withAllHistory
|
|
60
64
|
});
|
|
61
65
|
});
|
|
62
66
|
}, _TeamsChatMemberAddCommand_initOptions = function _TeamsChatMemberAddCommand_initOptions() {
|
|
@@ -73,6 +77,8 @@ _a = TeamsChatMemberAddCommand, _TeamsChatMemberAddCommand_instances = new WeakS
|
|
|
73
77
|
option: '--visibleHistoryStartDateTime [visibleHistoryStartDateTime]'
|
|
74
78
|
}, {
|
|
75
79
|
option: '--includeAllHistory'
|
|
80
|
+
}, {
|
|
81
|
+
option: '--withAllHistory'
|
|
76
82
|
});
|
|
77
83
|
}, _TeamsChatMemberAddCommand_initValidators = function _TeamsChatMemberAddCommand_initValidators() {
|
|
78
84
|
this.validators.push(async (args) => {
|
|
@@ -95,8 +101,8 @@ _a = TeamsChatMemberAddCommand, _TeamsChatMemberAddCommand_instances = new WeakS
|
|
|
95
101
|
});
|
|
96
102
|
}, _TeamsChatMemberAddCommand_initOptionSets = function _TeamsChatMemberAddCommand_initOptionSets() {
|
|
97
103
|
this.optionSets.push({ options: ['userId', 'userName'] }, {
|
|
98
|
-
options: ['visibleHistoryStartDateTime', 'includeAllHistory'],
|
|
99
|
-
runsWhen: (args) => args.options.visibleHistoryStartDateTime || args.options.includeAllHistory
|
|
104
|
+
options: ['visibleHistoryStartDateTime', 'includeAllHistory', 'withAllHistory'],
|
|
105
|
+
runsWhen: (args) => args.options.visibleHistoryStartDateTime || args.options.includeAllHistory || args.options.withAllHistory
|
|
100
106
|
});
|
|
101
107
|
};
|
|
102
108
|
TeamsChatMemberAddCommand.roles = ['owner', 'guest'];
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
|
+
};
|
|
6
|
+
var _VivaEngageCommunityRemoveCommand_instances, _VivaEngageCommunityRemoveCommand_initTelemetry, _VivaEngageCommunityRemoveCommand_initOptions, _VivaEngageCommunityRemoveCommand_initValidators, _VivaEngageCommunityRemoveCommand_initOptionSets, _VivaEngageCommunityRemoveCommand_initTypes;
|
|
7
|
+
import { cli } from '../../../../cli/cli.js';
|
|
8
|
+
import request from '../../../../request.js';
|
|
9
|
+
import { validation } from '../../../../utils/validation.js';
|
|
10
|
+
import { vivaEngage } from '../../../../utils/vivaEngage.js';
|
|
11
|
+
import GraphCommand from '../../../base/GraphCommand.js';
|
|
12
|
+
import commands from '../../commands.js';
|
|
13
|
+
class VivaEngageCommunityRemoveCommand extends GraphCommand {
|
|
14
|
+
get name() {
|
|
15
|
+
return commands.ENGAGE_COMMUNITY_REMOVE;
|
|
16
|
+
}
|
|
17
|
+
get description() {
|
|
18
|
+
return 'Removes a Viva Engage community';
|
|
19
|
+
}
|
|
20
|
+
constructor() {
|
|
21
|
+
super();
|
|
22
|
+
_VivaEngageCommunityRemoveCommand_instances.add(this);
|
|
23
|
+
__classPrivateFieldGet(this, _VivaEngageCommunityRemoveCommand_instances, "m", _VivaEngageCommunityRemoveCommand_initTelemetry).call(this);
|
|
24
|
+
__classPrivateFieldGet(this, _VivaEngageCommunityRemoveCommand_instances, "m", _VivaEngageCommunityRemoveCommand_initOptions).call(this);
|
|
25
|
+
__classPrivateFieldGet(this, _VivaEngageCommunityRemoveCommand_instances, "m", _VivaEngageCommunityRemoveCommand_initValidators).call(this);
|
|
26
|
+
__classPrivateFieldGet(this, _VivaEngageCommunityRemoveCommand_instances, "m", _VivaEngageCommunityRemoveCommand_initOptionSets).call(this);
|
|
27
|
+
__classPrivateFieldGet(this, _VivaEngageCommunityRemoveCommand_instances, "m", _VivaEngageCommunityRemoveCommand_initTypes).call(this);
|
|
28
|
+
}
|
|
29
|
+
async commandAction(logger, args) {
|
|
30
|
+
const removeCommunity = async () => {
|
|
31
|
+
try {
|
|
32
|
+
let communityId = args.options.id;
|
|
33
|
+
if (args.options.displayName) {
|
|
34
|
+
communityId = (await vivaEngage.getCommunityByDisplayName(args.options.displayName, ['id'])).id;
|
|
35
|
+
}
|
|
36
|
+
else if (args.options.entraGroupId) {
|
|
37
|
+
communityId = (await vivaEngage.getCommunityByEntraGroupId(args.options.entraGroupId, ['id'])).id;
|
|
38
|
+
}
|
|
39
|
+
if (args.options.verbose) {
|
|
40
|
+
await logger.logToStderr(`Removing Viva Engage community with ID ${communityId}...`);
|
|
41
|
+
}
|
|
42
|
+
const requestOptions = {
|
|
43
|
+
url: `${this.resource}/v1.0/employeeExperience/communities/${communityId}`,
|
|
44
|
+
headers: {
|
|
45
|
+
accept: 'application/json;odata.metadata=none'
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
await request.delete(requestOptions);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
this.handleRejectedODataJsonPromise(err);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
if (args.options.force) {
|
|
55
|
+
await removeCommunity();
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove Viva Engage community '${args.options.id || args.options.displayName || args.options.entraGroupId}'?` });
|
|
59
|
+
if (result) {
|
|
60
|
+
await removeCommunity();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
_VivaEngageCommunityRemoveCommand_instances = new WeakSet(), _VivaEngageCommunityRemoveCommand_initTelemetry = function _VivaEngageCommunityRemoveCommand_initTelemetry() {
|
|
66
|
+
this.telemetry.push((args) => {
|
|
67
|
+
Object.assign(this.telemetryProperties, {
|
|
68
|
+
id: args.options.id !== 'undefined',
|
|
69
|
+
displayName: args.options.displayName !== 'undefined',
|
|
70
|
+
entraGroupId: args.options.entraGroupId !== 'undefined',
|
|
71
|
+
force: !!args.options.force
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}, _VivaEngageCommunityRemoveCommand_initOptions = function _VivaEngageCommunityRemoveCommand_initOptions() {
|
|
75
|
+
this.options.unshift({
|
|
76
|
+
option: '-i, --id [id]'
|
|
77
|
+
}, {
|
|
78
|
+
option: '-n, --displayName [displayName]'
|
|
79
|
+
}, {
|
|
80
|
+
option: '--entraGroupId [entraGroupId]'
|
|
81
|
+
}, {
|
|
82
|
+
option: '-f, --force'
|
|
83
|
+
});
|
|
84
|
+
}, _VivaEngageCommunityRemoveCommand_initValidators = function _VivaEngageCommunityRemoveCommand_initValidators() {
|
|
85
|
+
this.validators.push(async (args) => {
|
|
86
|
+
if (args.options.entraGroupId && !validation.isValidGuid(args.options.entraGroupId)) {
|
|
87
|
+
return `${args.options.entraGroupId} is not a valid GUID for the option 'entraGroupId'.`;
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
});
|
|
91
|
+
}, _VivaEngageCommunityRemoveCommand_initOptionSets = function _VivaEngageCommunityRemoveCommand_initOptionSets() {
|
|
92
|
+
this.optionSets.push({
|
|
93
|
+
options: ['id', 'displayName', 'entraGroupId']
|
|
94
|
+
});
|
|
95
|
+
}, _VivaEngageCommunityRemoveCommand_initTypes = function _VivaEngageCommunityRemoveCommand_initTypes() {
|
|
96
|
+
this.types.string.push('id', 'displayName', 'entraGroupId');
|
|
97
|
+
};
|
|
98
|
+
export default new VivaEngageCommunityRemoveCommand();
|
|
99
|
+
//# sourceMappingURL=engage-community-remove.js.map
|
|
@@ -24,6 +24,9 @@ class VivaEngageNetworkListCommand extends VivaEngageCommand {
|
|
|
24
24
|
__classPrivateFieldGet(this, _VivaEngageNetworkListCommand_instances, "m", _VivaEngageNetworkListCommand_initOptions).call(this);
|
|
25
25
|
}
|
|
26
26
|
async commandAction(logger, args) {
|
|
27
|
+
if (args.options.includeSuspended) {
|
|
28
|
+
await this.warn(logger, `Parameter 'includeSuspended' is deprecated. Please use 'withSuspended' instead`);
|
|
29
|
+
}
|
|
27
30
|
const requestOptions = {
|
|
28
31
|
url: `${this.resource}/v1/networks/current.json`,
|
|
29
32
|
headers: {
|
|
@@ -32,7 +35,7 @@ class VivaEngageNetworkListCommand extends VivaEngageCommand {
|
|
|
32
35
|
},
|
|
33
36
|
responseType: 'json',
|
|
34
37
|
data: {
|
|
35
|
-
includeSuspended: args.options.includeSuspended !== undefined && args.options.includeSuspended !== false
|
|
38
|
+
includeSuspended: (args.options.includeSuspended !== undefined && args.options.includeSuspended !== false) || (args.options.withSuspended !== undefined && args.options.withSuspended !== false)
|
|
36
39
|
}
|
|
37
40
|
};
|
|
38
41
|
try {
|
|
@@ -47,12 +50,15 @@ class VivaEngageNetworkListCommand extends VivaEngageCommand {
|
|
|
47
50
|
_VivaEngageNetworkListCommand_instances = new WeakSet(), _VivaEngageNetworkListCommand_initTelemetry = function _VivaEngageNetworkListCommand_initTelemetry() {
|
|
48
51
|
this.telemetry.push((args) => {
|
|
49
52
|
Object.assign(this.telemetryProperties, {
|
|
50
|
-
includeSuspended: args.options.includeSuspended
|
|
53
|
+
includeSuspended: args.options.includeSuspended,
|
|
54
|
+
withSuspended: args.options.withSuspended
|
|
51
55
|
});
|
|
52
56
|
});
|
|
53
57
|
}, _VivaEngageNetworkListCommand_initOptions = function _VivaEngageNetworkListCommand_initOptions() {
|
|
54
58
|
this.options.unshift({
|
|
55
59
|
option: '--includeSuspended'
|
|
60
|
+
}, {
|
|
61
|
+
option: '--withSuspended'
|
|
56
62
|
});
|
|
57
63
|
};
|
|
58
64
|
export default new VivaEngageNetworkListCommand();
|
|
@@ -4,6 +4,7 @@ export default {
|
|
|
4
4
|
ENGAGE_COMMUNITY_ADD: `${prefix} engage community add`,
|
|
5
5
|
ENGAGE_COMMUNITY_GET: `${prefix} engage community get`,
|
|
6
6
|
ENGAGE_COMMUNITY_LIST: `${prefix} engage community list`,
|
|
7
|
+
ENGAGE_COMMUNITY_REMOVE: `${prefix} engage community remove`,
|
|
7
8
|
ENGAGE_COMMUNITY_SET: `${prefix} engage community set`,
|
|
8
9
|
ENGAGE_COMMUNITY_USER_ADD: `${prefix} engage community user add`,
|
|
9
10
|
ENGAGE_COMMUNITY_USER_LIST: `${prefix} engage community user list`,
|
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
|
|
@@ -22,29 +22,32 @@ m365 entra m365group get [options]
|
|
|
22
22
|
: Display name of the Microsoft 365 Group or Microsoft Teams team to retrieve information for. Specify either `id` or `displayName`, but not both.
|
|
23
23
|
|
|
24
24
|
`--includeSiteUrl`
|
|
25
|
-
: Set to retrieve the site URL for the group
|
|
25
|
+
: (deprecated. Use option `withSiteUrl` instead) Set to retrieve the site URL for the group.
|
|
26
|
+
|
|
27
|
+
`--withSiteUrl`
|
|
28
|
+
: Set to retrieve the site URL for the group.
|
|
26
29
|
```
|
|
27
30
|
|
|
28
31
|
<Global />
|
|
29
32
|
|
|
30
33
|
## Examples
|
|
31
34
|
|
|
32
|
-
Get information about the Microsoft 365 Group with id _1caf7dcd-7e83-4c3a-94f7-932a1299c844_
|
|
35
|
+
Get information about the Microsoft 365 Group with id _1caf7dcd-7e83-4c3a-94f7-932a1299c844_.
|
|
33
36
|
|
|
34
37
|
```sh
|
|
35
38
|
m365 entra m365group get --id 1caf7dcd-7e83-4c3a-94f7-932a1299c844
|
|
36
39
|
```
|
|
37
40
|
|
|
38
|
-
Get information about the Microsoft 365 Group with displayName _Finance_
|
|
41
|
+
Get information about the Microsoft 365 Group with displayName _Finance_.
|
|
39
42
|
|
|
40
43
|
```sh
|
|
41
44
|
m365 entra m365group get --displayName Finance
|
|
42
45
|
```
|
|
43
46
|
|
|
44
|
-
Get information about the Microsoft 365 Group with id _1caf7dcd-7e83-4c3a-94f7-932a1299c844_ and also retrieve the URL of the corresponding SharePoint site
|
|
47
|
+
Get information about the Microsoft 365 Group with id _1caf7dcd-7e83-4c3a-94f7-932a1299c844_ and also retrieve the URL of the corresponding SharePoint site.
|
|
45
48
|
|
|
46
49
|
```sh
|
|
47
|
-
m365 entra m365group get --id 1caf7dcd-7e83-4c3a-94f7-932a1299c844 --
|
|
50
|
+
m365 entra m365group get --id 1caf7dcd-7e83-4c3a-94f7-932a1299c844 --withSiteUrl
|
|
48
51
|
```
|
|
49
52
|
|
|
50
53
|
## Response
|