@pnp/cli-microsoft365 7.11.0-beta.c513557 → 8.0.0-beta.b0e3dab

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.
Files changed (66) hide show
  1. package/.eslintrc.cjs +5 -2
  2. package/allCommands.json +1 -1
  3. package/allCommandsFull.json +1 -1
  4. package/dist/Auth.js +1 -1
  5. package/dist/AuthServer.js +10 -10
  6. package/dist/Command.js +10 -10
  7. package/dist/chili/index.js +1 -1
  8. package/dist/cli/cli.js +11 -11
  9. package/dist/index.js +1 -1
  10. package/dist/m365/base/AnonymousCommand.js +1 -1
  11. package/dist/m365/base/DelegatedGraphCommand.js +2 -2
  12. package/dist/m365/base/PowerAppsCommand.js +2 -2
  13. package/dist/m365/base/PowerAutomateCommand.js +2 -2
  14. package/dist/m365/base/PowerBICommand.js +2 -2
  15. package/dist/m365/base/PowerPlatformCommand.js +2 -2
  16. package/dist/m365/base/VivaEngageCommand.js +2 -2
  17. package/dist/m365/cli/commands/cli-consent.js +1 -1
  18. package/dist/m365/commands/login.js +1 -1
  19. package/dist/m365/commands/logout.js +1 -1
  20. package/dist/m365/commands/status.js +1 -1
  21. package/dist/m365/connection/commands/connection-list.js +1 -1
  22. package/dist/m365/connection/commands/connection-remove.js +1 -1
  23. package/dist/m365/connection/commands/connection-set.js +1 -1
  24. package/dist/m365/connection/commands/connection-use.js +1 -1
  25. package/dist/m365/entra/commands/app/app-permission-add.js +21 -1
  26. package/dist/m365/entra/commands/app/app-permission-remove.js +17 -0
  27. package/dist/m365/entra/commands/m365group/m365group-add.js +1 -0
  28. package/dist/m365/entra/commands/m365group/m365group-user-list.js +1 -1
  29. package/dist/m365/external/commands/connection/connection-doctor.js +1 -1
  30. package/dist/m365/external/commands/connection/connection-schema-add.js +4 -4
  31. package/dist/m365/file/commands/file-copy.js +3 -3
  32. package/dist/m365/flow/commands/flow-list.js +21 -23
  33. package/dist/m365/pa/commands/app/app-export.js +1 -1
  34. package/dist/m365/pa/commands/app/app-owner-set.js +1 -1
  35. package/dist/m365/pp/commands/solution/solution-publish.js +1 -1
  36. package/dist/m365/purview/commands/threatassessment/threatassessment-list.js +1 -1
  37. package/dist/m365/spfx/commands/project/project-azuredevops-pipeline-add.js +1 -1
  38. package/dist/m365/spfx/commands/project/project-externalize.js +1 -1
  39. package/dist/m365/spfx/commands/project/project-github-workflow-add.js +1 -1
  40. package/dist/m365/spfx/commands/spfx-doctor.js +4 -4
  41. package/dist/m365/spo/commands/cdn/cdn-get.js +12 -15
  42. package/dist/m365/spo/commands/cdn/cdn-set.js +6 -4
  43. package/dist/m365/spo/commands/commandset/commandset-get.js +1 -1
  44. package/dist/m365/spo/commands/file/file-retentionlabel-remove.js +1 -1
  45. package/dist/m365/spo/commands/group/group-member-add.js +103 -99
  46. package/dist/m365/spo/commands/group/group-member-remove.js +2 -2
  47. package/dist/m365/spo/commands/list/list-retentionlabel-ensure.js +1 -1
  48. package/dist/m365/spo/commands/listitem/listitem-batch-remove.js +1 -1
  49. package/dist/m365/spo/commands/listitem/listitem-retentionlabel-ensure.js +2 -2
  50. package/dist/m365/spo/commands/listitem/listitem-retentionlabel-remove.js +2 -2
  51. package/dist/m365/spo/commands/site/site-commsite-enable.js +1 -1
  52. package/dist/m365/spo/commands/spo-search.js +1 -1
  53. package/dist/m365/spo/commands/tenant/tenant-applicationcustomizer-set.js +4 -4
  54. package/dist/m365/spo/commands/tenant/tenant-commandset-set.js +2 -2
  55. package/dist/m365/spo/commands/user/user-ensure.js +1 -1
  56. package/dist/m365/teams/commands/chat/chat-member-add.js +1 -1
  57. package/dist/m365/teams/commands/meeting/meeting-list.js +1 -1
  58. package/dist/m365/viva/commands/engage/engage-community-get.js +1 -1
  59. package/dist/request.js +13 -14
  60. package/dist/utils/spo.js +5 -5
  61. package/dist/utils/validation.js +25 -0
  62. package/docs/docs/cmd/flow/flow-list.mdx +114 -56
  63. package/docs/docs/cmd/spo/cdn/cdn-set.mdx +3 -3
  64. package/docs/docs/cmd/spo/group/group-member-add.mdx +34 -27
  65. package/npm-shrinkwrap.json +802 -601
  66. package/package.json +12 -12
@@ -44,7 +44,7 @@ class SpoTenantCommandSetSetCommand extends SpoCommand {
44
44
  }
45
45
  async getListItemById(logger, webUrl, listServerRelativeUrl, id) {
46
46
  if (this.verbose) {
47
- logger.logToStderr(`Getting the list item by id ${id}`);
47
+ await logger.logToStderr(`Getting the list item by id ${id}`);
48
48
  }
49
49
  const reqOptions = {
50
50
  url: `${webUrl}/_api/web/GetList('${formatting.encodeQueryParameter(listServerRelativeUrl)}')/Items(${id})`,
@@ -57,7 +57,7 @@ class SpoTenantCommandSetSetCommand extends SpoCommand {
57
57
  }
58
58
  async updateTenantWideExtension(appCatalogUrl, options, listServerRelativeUrl, logger) {
59
59
  if (this.verbose) {
60
- logger.logToStderr('Updating tenant wide extension to the TenantWideExtensions list');
60
+ await logger.logToStderr('Updating tenant wide extension to the TenantWideExtensions list');
61
61
  }
62
62
  const formValues = [];
63
63
  if (options.newTitle !== undefined) {
@@ -27,7 +27,7 @@ class SpoUserEnsureCommand extends SpoCommand {
27
27
  async commandAction(logger, args) {
28
28
  if (args.options.aadId) {
29
29
  args.options.entraId = args.options.aadId;
30
- this.warn(logger, `Option 'aadId' is deprecated. Please use 'entraId' instead`);
30
+ await this.warn(logger, `Option 'aadId' is deprecated. Please use 'entraId' instead`);
31
31
  }
32
32
  if (this.verbose) {
33
33
  await logger.logToStderr(`Ensuring user ${args.options.entraId || args.options.userName} at site ${args.options.webUrl}`);
@@ -27,7 +27,7 @@ class TeamsChatMemberAddCommand extends GraphCommand {
27
27
  async commandAction(logger, args) {
28
28
  try {
29
29
  if (this.verbose) {
30
- logger.logToStderr(`Adding member ${args.options.userId || args.options.userName} to chat with id ${args.options.chatId}...`);
30
+ await logger.logToStderr(`Adding member ${args.options.userId || args.options.userName} to chat with id ${args.options.chatId}...`);
31
31
  }
32
32
  const chatMemberAddOptions = {
33
33
  url: `${this.resource}/v1.0/chats/${args.options.chatId}/members`,
@@ -90,7 +90,7 @@ class TeamsMeetingListCommand extends GraphCommand {
90
90
  let result = [];
91
91
  for (let i = 0; i < meetingUrls.length; i += 20) {
92
92
  if (this.verbose) {
93
- logger.logToStderr(`Retrieving meetings ${i + 1}-${Math.min(i + 20, meetingUrls.length)}...`);
93
+ await logger.logToStderr(`Retrieving meetings ${i + 1}-${Math.min(i + 20, meetingUrls.length)}...`);
94
94
  }
95
95
  const batch = meetingUrls.slice(i, i + 20);
96
96
  const requestOptions = {
@@ -22,7 +22,7 @@ class VivaEngageCommunityGetCommand extends GraphCommand {
22
22
  }
23
23
  async commandAction(logger, args) {
24
24
  if (this.verbose) {
25
- logger.logToStderr(`Getting the information of Viva Engage community with id '${args.options.id}'...`);
25
+ await logger.logToStderr(`Getting the information of Viva Engage community with id '${args.options.id}'...`);
26
26
  }
27
27
  const requestOptions = {
28
28
  url: `${this.resource}/beta/employeeExperience/communities/${args.options.id}`,
package/dist/request.js CHANGED
@@ -14,39 +14,39 @@ class Request {
14
14
  }
15
15
  this._debug = debug;
16
16
  if (this._debug) {
17
- this.req.interceptors.request.use(config => {
17
+ this.req.interceptors.request.use(async (config) => {
18
18
  if (this._logger) {
19
- this._logger.logToStderr('Request:');
19
+ await this._logger.logToStderr('Request:');
20
20
  const properties = ['url', 'method', 'headers', 'responseType', 'decompress'];
21
21
  if (config.responseType !== 'stream') {
22
22
  properties.push('data');
23
23
  }
24
- this._logger.logToStderr(JSON.stringify(formatting.filterObject(config, properties), null, 2));
24
+ await this._logger.logToStderr(JSON.stringify(formatting.filterObject(config, properties), null, 2));
25
25
  }
26
26
  return config;
27
27
  });
28
28
  // since we're stubbing requests, response interceptor is never called in
29
29
  // tests, so let's exclude it from coverage
30
30
  /* c8 ignore next 26 */
31
- this.req.interceptors.response.use((response) => {
31
+ this.req.interceptors.response.use(async (response) => {
32
32
  if (this._logger) {
33
- this._logger.logToStderr('Response:');
33
+ await this._logger.logToStderr('Response:');
34
34
  const properties = ['status', 'statusText', 'headers'];
35
35
  if (response.headers['content-type'] &&
36
36
  response.headers['content-type'].indexOf('json') > -1) {
37
37
  properties.push('data');
38
38
  }
39
- this._logger.logToStderr(JSON.stringify({
39
+ await this._logger.logToStderr(JSON.stringify({
40
40
  url: response.config.url,
41
41
  ...formatting.filterObject(response, properties)
42
42
  }, null, 2));
43
43
  }
44
44
  return response;
45
- }, (error) => {
45
+ }, async (error) => {
46
46
  if (this._logger) {
47
47
  const properties = ['status', 'statusText', 'headers'];
48
- this._logger.logToStderr('Request error:');
49
- this._logger.logToStderr(JSON.stringify({
48
+ await this._logger.logToStderr('Request error:');
49
+ await this._logger.logToStderr(JSON.stringify({
50
50
  url: error.config?.url,
51
51
  ...formatting.filterObject(error.response, properties),
52
52
  error: error.error
@@ -169,7 +169,7 @@ class Request {
169
169
  timings.api.push(Number(end - start));
170
170
  _resolve((options.responseType === 'stream' || options.fullResponse) ? res : res.data);
171
171
  }
172
- }, (error) => {
172
+ }, async (error) => {
173
173
  if (error && error.response &&
174
174
  (error.response.status === 429 ||
175
175
  error.response.status === 503)) {
@@ -178,11 +178,10 @@ class Request {
178
178
  retryAfter = 10;
179
179
  }
180
180
  if (this._debug) {
181
- this._logger.log(`Request throttled. Waiting ${retryAfter}sec before retrying...`);
181
+ await this._logger.log(`Request throttled. Waiting ${retryAfter}sec before retrying...`);
182
182
  }
183
- setTimeout(() => {
184
- this.execute(options, resolve || _resolve, reject || _reject);
185
- }, retryAfter * 1000);
183
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
184
+ setTimeout(async () => { this.execute(options, resolve || _resolve, reject || _reject); }, retryAfter * 1000);
186
185
  }
187
186
  else {
188
187
  if (reject) {
package/dist/utils/spo.js CHANGED
@@ -1173,7 +1173,7 @@ export const spo = {
1173
1173
  */
1174
1174
  async getFileAsListItemByUrl(absoluteListUrl, url, logger, verbose) {
1175
1175
  if (verbose && logger) {
1176
- logger.logToStderr(`Getting the file properties with url ${url}`);
1176
+ await logger.logToStderr(`Getting the file properties with url ${url}`);
1177
1177
  }
1178
1178
  const serverRelativePath = urlUtil.getServerRelativePath(absoluteListUrl, url);
1179
1179
  const requestUrl = `${absoluteListUrl}/_api/web/GetFileByServerRelativePath(DecodedUrl=@f)?$expand=ListItemAllFields&@f='${formatting.encodeQueryParameter(serverRelativePath)}'`;
@@ -1206,7 +1206,7 @@ export const spo = {
1206
1206
  const serverRelativeSiteMatch = absoluteListUrl.match(new RegExp('/sites/[^/]+'));
1207
1207
  const webUrl = `${parsedUrl.protocol}//${parsedUrl.host}${serverRelativeSiteMatch ?? ''}`;
1208
1208
  if (verbose && logger) {
1209
- logger.logToStderr(`Getting list id...`);
1209
+ await logger.logToStderr(`Getting list id...`);
1210
1210
  }
1211
1211
  const listRequestOptions = {
1212
1212
  url: `${absoluteListUrl}?$select=Id`,
@@ -1218,7 +1218,7 @@ export const spo = {
1218
1218
  const list = await request.get(listRequestOptions);
1219
1219
  const listId = list.Id;
1220
1220
  if (verbose && logger) {
1221
- logger.logToStderr(`Getting request digest for systemUpdate request`);
1221
+ await logger.logToStderr(`Getting request digest for systemUpdate request`);
1222
1222
  }
1223
1223
  const res = await spo.getRequestDigest(webUrl);
1224
1224
  const formDigestValue = res.FormDigestValue;
@@ -1361,7 +1361,7 @@ export const spo = {
1361
1361
  */
1362
1362
  async getSiteId(webUrl, logger, verbose) {
1363
1363
  if (verbose && logger) {
1364
- logger.logToStderr(`Getting site id for URL: ${webUrl}...`);
1364
+ await logger.logToStderr(`Getting site id for URL: ${webUrl}...`);
1365
1365
  }
1366
1366
  const url = new URL(webUrl);
1367
1367
  const requestOptions = {
@@ -1393,7 +1393,7 @@ export const spo = {
1393
1393
  };
1394
1394
  const response = await request.post(requestOptions);
1395
1395
  if (verbose) {
1396
- logger.logToStderr('Attempt to get _ObjectIdentity_ key values');
1396
+ await logger.logToStderr('Attempt to get _ObjectIdentity_ key values');
1397
1397
  }
1398
1398
  const json = JSON.parse(response);
1399
1399
  const contents = json.find(x => { return x.ErrorInfo; });
@@ -1,3 +1,4 @@
1
+ import { formatting } from "./formatting.js";
1
2
  export const validation = {
2
3
  isValidGuidArray(guidsString) {
3
4
  const guids = guidsString.split(',').map(guid => guid.trim());
@@ -33,6 +34,24 @@ export const validation = {
33
34
  // verify if the upn is a valid upn. @meusername will be replaced in a later stage with the actual username of the logged in user
34
35
  return upnRegEx.test(upn) || upn.toLowerCase().trim() === '@meusername';
35
36
  },
37
+ /**
38
+ * Validates if the provided number is a valid positive integer (1 or higher).
39
+ * @param integer Integer value.
40
+ * @returns True if integer, false otherwise.
41
+ */
42
+ isValidPositiveInteger(integer) {
43
+ return !isNaN(Number(integer)) && Number.isInteger(+integer) && +integer > 0;
44
+ },
45
+ /**
46
+ * Validates an array of integers. The integers must be positive (1 or higher).
47
+ * @param integerString Comma-separated string of integers.
48
+ * @returns True if the integers are valid, an error message with the invalid integers otherwise.
49
+ */
50
+ isValidPositiveIntegerArray(integerString) {
51
+ const integers = formatting.splitAndTrim(integerString);
52
+ const invalidIntegers = integers.filter(integer => !this.isValidPositiveInteger(integer));
53
+ return invalidIntegers.length > 0 ? invalidIntegers.join(', ') : true;
54
+ },
36
55
  isDateInRange(date, monthOffset) {
37
56
  const d = new Date(date);
38
57
  const cutoffDate = new Date();
@@ -332,6 +351,12 @@ export const validation = {
332
351
  isValidISODuration(duration) {
333
352
  const durationRegEx = new RegExp(/^P(?!$)((\d+Y)|(\d+\.\d+Y$))?((\d+M)|(\d+\.\d+M$))?((\d+W)|(\d+\.\d+W$))?((\d+D)|(\d+\.\d+D$))?(T(?=\d)((\d+H)|(\d+\.\d+H$))?((\d+M)|(\d+\.\d+M$))?(\d+(\.\d+)?S)?)??$/);
334
353
  return durationRegEx.test(duration);
354
+ },
355
+ isValidPermission(permissions) {
356
+ const invalidPermissions = permissions
357
+ .split(' ')
358
+ .filter(permission => permission.indexOf('/') < 0);
359
+ return invalidPermissions.length > 0 ? invalidPermissions : true;
335
360
  }
336
361
  };
337
362
  //# sourceMappingURL=validation.js.map
@@ -4,7 +4,7 @@ import TabItem from '@theme/TabItem';
4
4
 
5
5
  # flow list
6
6
 
7
- Lists Power Automate flow in the given environment
7
+ Lists Power Automate flows in the given environment
8
8
 
9
9
  ## Usage
10
10
 
@@ -83,85 +83,61 @@ m365 flow list --environmentName Default-d87a7535-dd31-4437-bfe1-95340acd55c5 --
83
83
  ```json
84
84
  [
85
85
  {
86
- "name": "00afcb83-df7b-4fe0-ab9c-1542a1dc66a9",
87
- "id": "/providers/Microsoft.ProcessSimple/environments/Default-00000000-0000-0000-0000-000000000000/flows/00afcb83-df7b-4fe0-ab9c-1542a1dc66a9",
86
+ "name": "fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d",
87
+ "id": "/providers/Microsoft.ProcessSimple/environments/Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4/flows/fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d",
88
88
  "type": "Microsoft.ProcessSimple/environments/flows",
89
89
  "properties": {
90
90
  "apiId": "/providers/Microsoft.PowerApps/apis/shared_logicflows",
91
- "displayName": "Contoso Invoicing Flow",
91
+ "displayName": "Invoicing flow",
92
92
  "userType": "Owner",
93
93
  "state": "Started",
94
94
  "connectionReferences": {
95
- "shared_contoso-20invoicing-5fdd00e4805bfffb8f-5fbaee43593a7efda0": {
96
- "connectionName": "bd877f62e4224011aa936d706fc68902",
97
- "source": "Invoker",
98
- "id": "/providers/Microsoft.PowerApps/apis/shared_contoso-20invoicing-5fdd00e4805bfffb8f-5fbaee43593a7efda0",
99
- "displayName": "Contoso Invoicing",
100
- "iconUri": "https://az787822.vo.msecnd.net/defaulticons/api-dedicated.png",
101
- "brandColor": "#007ee5",
102
- "tier": "NotSpecified"
103
- },
104
- "shared_flowpush": {
105
- "connectionName": "shared-flowpush-d2c01136-3f7d-4449-b4f1-cb2d03a35ba8",
106
- "source": "Invoker",
107
- "id": "/providers/Microsoft.PowerApps/apis/shared_flowpush",
108
- "displayName": "Notifications",
109
- "iconUri": "https://connectoricons-prod.azureedge.net/releases/v1.0.1599/1.0.1599.3017/flowpush/icon.png",
110
- "brandColor": "#FF3B30",
95
+ "shared_office365": {
96
+ "connectionName": "shared-office365-19528cc4-23c1-4b39-abea-f010eb9fe3f9",
97
+ "source": "Embedded",
98
+ "id": "/providers/Microsoft.PowerApps/apis/shared_office365",
99
+ "displayName": "Office 365 Outlook",
100
+ "iconUri": "https://connectoricons-prod.azureedge.net/releases/v1.0.1686/1.0.1686.3706/office365/icon.png",
101
+ "brandColor": "#0078D4",
111
102
  "tier": "Standard"
112
103
  }
113
104
  },
114
- "createdTime": "2022-06-11T10:34:03.7241198Z",
115
- "lastModifiedTime": "2022-06-11T10:35:54.1920032Z",
105
+ "createdTime": "2024-07-09T21:32:14.5918501Z",
106
+ "lastModifiedTime": "2024-07-09T21:32:15.2349507Z",
116
107
  "environment": {
117
- "name": "Default-00000000-0000-0000-0000-000000000000",
108
+ "name": "Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4",
118
109
  "type": "Microsoft.ProcessSimple/environments",
119
- "id": "/providers/Microsoft.ProcessSimple/environments/Default-00000000-0000-0000-0000-000000000000"
110
+ "id": "/providers/Microsoft.ProcessSimple/environments/Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4"
120
111
  },
121
112
  "definitionSummary": {
122
113
  "triggers": [
123
114
  {
124
- "type": "Request",
125
- "kind": "Button",
115
+ "type": "Recurrence",
126
116
  "metadata": {
127
- "operationMetadataId": "0cc0490e-e1b6-4a19-b313-f54862d64f02"
117
+ "operationMetadataId": "57317efe-4f87-47bc-b69c-179452c75f87"
128
118
  }
129
119
  }
130
120
  ],
131
121
  "actions": [
132
122
  {
133
123
  "type": "OpenApiConnection",
134
- "swaggerOperationId": "ListInvoices",
124
+ "swaggerOperationId": "SendEmailV2",
135
125
  "metadata": {
136
- "operationMetadataId": "d76a7b54-48bb-49a0-86b8-dd3d21b3d5ce"
137
- }
138
- },
139
- {
140
- "type": "Table",
141
- "metadata": {
142
- "operationMetadataId": "1164ebc4-b501-46bc-bc88-cc99660f92c3"
143
- }
144
- },
145
- {
146
- "type": "OpenApiConnection",
147
- "swaggerOperationId": "SendEmailNotification",
148
- "metadata": {
149
- "operationMetadataId": "9febe29f-2e36-4765-81ab-83645d28332d"
126
+ "operationMetadataId": "474e8016-6a45-466a-a021-3fedf5a766be"
150
127
  }
151
128
  }
152
129
  ]
153
130
  },
154
131
  "creator": {
155
- "tenantId": "00000000-0000-0000-0000-000000000000",
156
- "objectId": "00000000-0000-0000-0000-000000000000",
157
- "userId": "00000000-0000-0000-0000-000000000000",
132
+ "tenantId": "1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4",
133
+ "objectId": "9723d9b0-b8d6-48af-b381-fb4a9f0403e4",
134
+ "userId": "9723d9b0-b8d6-48af-b381-fb4a9f0403e4",
158
135
  "userType": "ActiveDirectory"
159
136
  },
160
137
  "provisioningMethod": "FromDefinition",
161
138
  "flowFailureAlertSubscribed": true,
162
139
  "isManaged": false
163
- },
164
- "displayName": "Contoso Invoicing Flow"
140
+ }
165
141
  }
166
142
  ]
167
143
  ```
@@ -171,16 +147,16 @@ m365 flow list --environmentName Default-d87a7535-dd31-4437-bfe1-95340acd55c5 --
171
147
 
172
148
  ```text
173
149
  name displayName
174
- ------------------------------------ -----------------------------------------------
175
- 00afcb83-df7b-4fe0-ab9c-1542a1dc66a9 Contoso Invoicing Flow
150
+ ------------------------------------ --------------
151
+ fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d Invoicing Flow
176
152
  ```
177
153
 
178
154
  </TabItem>
179
155
  <TabItem value="CSV">
180
156
 
181
157
  ```csv
182
- name,displayName
183
- 00afcb83-df7b-4fe0-ab9c-1542a1dc66a9,Contoso Invoicing Flow
158
+ name,id,type,displayName
159
+ fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d,/providers/Microsoft.ProcessSimple/environments/Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4/flows/fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d,Microsoft.ProcessSimple/environments/flows,Invoicing flow
184
160
  ```
185
161
 
186
162
  </TabItem>
@@ -189,18 +165,100 @@ m365 flow list --environmentName Default-d87a7535-dd31-4437-bfe1-95340acd55c5 --
189
165
  ```md
190
166
  # flow list --environmentName "Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4"
191
167
 
192
- Date: 2023-05-18
168
+ Date: 09/07/2024
193
169
 
194
- ## Contoso Invoicing Flow (/providers/Microsoft.ProcessSimple/environments/Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4/flows/00afcb83-df7b-4fe0-ab9c-1542a1dc66a9)
170
+ ## Invoicing flow (/providers/Microsoft.ProcessSimple/environments/Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4/flows/fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d)
195
171
 
196
172
  Property | Value
197
173
  ---------|-------
198
- name | 00afcb83-df7b-4fe0-ab9c-1542a1dc66a9
199
- id | /providers/Microsoft.ProcessSimple/environments/Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4/flows/00afcb83-df7b-4fe0-ab9c-1542a1dc66a9
174
+ name | fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d
175
+ id | /providers/Microsoft.ProcessSimple/environments/Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4/flows/fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d
200
176
  type | Microsoft.ProcessSimple/environments/flows
201
- displayName | Contoso Invoicing Flow
177
+ displayName | Invoicing flow
202
178
  ```
203
179
 
204
180
  </TabItem>
205
181
  </Tabs>
206
182
 
183
+ ### `asAdmin` response
184
+
185
+ <Tabs>
186
+ <TabItem value="JSON">
187
+
188
+ ```json
189
+ [
190
+ {
191
+ "name": "fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d",
192
+ "id": "/providers/Microsoft.ProcessSimple/environments/Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4/flows/fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d",
193
+ "type": "Microsoft.ProcessSimple/environments/flows",
194
+ "properties": {
195
+ "apiId": "/providers/Microsoft.PowerApps/apis/shared_logicflows",
196
+ "displayName": "Invoicing flow",
197
+ "state": "Started",
198
+ "createdTime": "2024-07-09T21:32:15Z",
199
+ "lastModifiedTime": "2024-07-09T21:32:15Z",
200
+ "flowSuspensionReason": "None",
201
+ "environment": {
202
+ "name": "Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4",
203
+ "type": "Microsoft.ProcessSimple/environments",
204
+ "id": "/providers/Microsoft.ProcessSimple/environments/Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4"
205
+ },
206
+ "definitionSummary": {
207
+ "triggers": [],
208
+ "actions": []
209
+ },
210
+ "creator": {
211
+ "tenantId": "1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4",
212
+ "objectId": "9723d9b0-b8d6-48af-b381-fb4a9f0403e4",
213
+ "userId": "9723d9b0-b8d6-48af-b381-fb4a9f0403e4",
214
+ "userType": "ActiveDirectory"
215
+ },
216
+ "flowFailureAlertSubscribed": false,
217
+ "isManaged": false,
218
+ "machineDescriptionData": {},
219
+ "flowOpenAiData": {
220
+ "isConsequential": false,
221
+ "isConsequentialFlagOverwritten": false
222
+ }
223
+ }
224
+ }
225
+ ]
226
+ ```
227
+
228
+ </TabItem>
229
+ <TabItem value="Text">
230
+
231
+ ```text
232
+ name displayName
233
+ ------------------------------------ --------------
234
+ fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d Invoicing Flow
235
+ ```
236
+
237
+ </TabItem>
238
+ <TabItem value="CSV">
239
+
240
+ ```csv
241
+ name,id,type,displayName
242
+ fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d,/providers/Microsoft.ProcessSimple/environments/Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4/flows/fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d,Microsoft.ProcessSimple/environments/flows,Invoicing flow
243
+ ```
244
+
245
+ </TabItem>
246
+ <TabItem value="Markdown">
247
+
248
+ ```md
249
+ # flow list --environmentName "Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4"
250
+
251
+ Date: 09/07/2024
252
+
253
+ ## Invoicing flow (/providers/Microsoft.ProcessSimple/environments/Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4/flows/fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d)
254
+
255
+ Property | Value
256
+ ---------|-------
257
+ name | fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d
258
+ id | /providers/Microsoft.ProcessSimple/environments/Default-1e852b49-bf4b-4ba5-bcd4-a8c4706c8ed4/flows/fc2d4ef5-4151-4e93-9aaa-1f380d7ed95d
259
+ type | Microsoft.ProcessSimple/environments/flows
260
+ displayName | Invoicing flow
261
+ ```
262
+
263
+ </TabItem>
264
+ </Tabs>
@@ -17,10 +17,10 @@ m365 spo cdn set [options]
17
17
  : Set to true to enable CDN or to false to disable it. Allowed values: `true`, `false`.
18
18
 
19
19
  `-t, --type [type]`
20
- : Type of CDN to manage. Allowed values: `Public`, `Private`, `Both`. Defaults to `Public`.
20
+ : Type of CDN to update. Allowed values: `Public`, `Private`, `Both`. Defaults to `Public`.
21
21
 
22
22
  `--noDefaultOrigins`
23
- : pass to not create the default origins.
23
+ : Specify this flag to not create the default origins.
24
24
  ```
25
25
 
26
26
  <Global />
@@ -35,7 +35,7 @@ Using the `--noDefaultOrigins` option you can specify to skip the creation of th
35
35
 
36
36
  :::info
37
37
 
38
- To use this command you have to have permissions to access the tenant admin site.
38
+ To use this command you must be a Global or SharePoint administrator.
39
39
 
40
40
  :::
41
41
 
@@ -110,17 +110,21 @@ m365 spo group member add --webUrl https://contoso.sharepoint.com/sites/SiteA --
110
110
  ```json
111
111
  [
112
112
  {
113
- "AllowedRoles": [
114
- 0
115
- ],
116
- "CurrentRole": 0,
117
- "DisplayName": "John Doe",
118
- "Email": "john.doe@contoso.onmicrosoft.com",
119
- "InvitationLink": null,
120
- "IsUserKnown": true,
121
- "Message": null,
122
- "Status": true,
123
- "User": "i:0#.f|membership|john.doe@contoso.onmicrosoft.com"
113
+ "Id": 11,
114
+ "IsHiddenInUI": false,
115
+ "LoginName": "i:0#.f|membership|adelev@contoso.onmicrosoft.com",
116
+ "Title": "Adele Vance",
117
+ "PrincipalType": 1,
118
+ "Email": "Adele.Vance@contoso.onmicrosoft.com",
119
+ "Expiration": "",
120
+ "IsEmailAuthenticationGuestUser": false,
121
+ "IsShareByEmailGuestUser": false,
122
+ "IsSiteAdmin": false,
123
+ "UserId": {
124
+ "NameId": "10032001f5ac2029",
125
+ "NameIdIssuer": "urn:federation:microsoftonline"
126
+ },
127
+ "UserPrincipalName": "adelev@contoso.onmicrosoft.com"
124
128
  }
125
129
  ]
126
130
  ```
@@ -129,39 +133,42 @@ m365 spo group member add --webUrl https://contoso.sharepoint.com/sites/SiteA --
129
133
  <TabItem value="Text">
130
134
 
131
135
  ```text
132
- DisplayName Email
133
- ----------- ---------------------------------
134
- John Doe john.doe@contoso.onmicrosoft.com
136
+ Title UserPrincipalName
137
+ ----------- -------------------------------------
138
+ Adele Vance Adele.Vance@contoso.onmicrosoft.com
135
139
  ```
136
140
 
137
141
  </TabItem>
138
142
  <TabItem value="CSV">
139
143
 
140
144
  ```csv
141
- DisplayName,Email
142
- John Doe,john.doe@contoso.onmicrosoft.com
145
+ Id,IsHiddenInUI,LoginName,Title,PrincipalType,Email,Expiration,IsEmailAuthenticationGuestUser,IsShareByEmailGuestUser,IsSiteAdmin,UserPrincipalName
146
+ 11,,i:0#.f|membership|adelev@contoso.onmicrosoft.com,Adele Vance,1,Adele.Vance@contoso.onmicrosoft.com,,,,,adelev@contoso.onmicrosoft.com
143
147
  ```
144
148
 
145
149
  </TabItem>
146
150
  <TabItem value="Markdown">
147
151
 
148
152
  ```md
149
- # spo group member add --webUrl "https://contoso.sharepoint.com" --groupId "5" --aadGroupIds "f2fb2f10-cfd2-4054-8ffd-64533657a5ab"
153
+ # spo group member add --webUrl "https://contoso.sharepoint.com/sites/Marketing" --groupId "5" --userNames "AdeleV@contoso.onmicrosoft.com"
150
154
 
151
- Date: 13/2/2023
155
+ Date: 10/07/2024
152
156
 
153
- ## All Company Members
157
+ ## Adele Vance (11)
154
158
 
155
159
  Property | Value
156
160
  ---------|-------
157
- CurrentRole | 0
158
- DisplayName | All Company Members
159
- Email | allcompany@contoso.onmicrosoft.com
160
- InvitationLink | null
161
- IsUserKnown | true
162
- Message | null
163
- Status | true
164
- User | c:0o.c\|federateddirectoryclaimprovider\|f2fb2f10-cfd2-4054-8ffd-64533657a5ab
161
+ Id | 11
162
+ IsHiddenInUI | false
163
+ LoginName | i:0#.f\|membership\|adelev@contoso.onmicrosoft.com
164
+ Title | Adele Vance
165
+ PrincipalType | 1
166
+ Email | Adele.Vance@contoso.onmicrosoft.com
167
+ Expiration |
168
+ IsEmailAuthenticationGuestUser | false
169
+ IsShareByEmailGuestUser | false
170
+ IsSiteAdmin | false
171
+ UserPrincipalName | adelev@contoso.onmicrosoft.com
165
172
  ```
166
173
 
167
174
  </TabItem>