@pnp/cli-microsoft365 7.4.0-beta.5820537 → 7.4.0-beta.8d6724f

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.
@@ -30,8 +30,12 @@ class FlowRunGetCommand extends PowerAutomateCommand {
30
30
  if (this.verbose) {
31
31
  await logger.logToStderr(`Retrieving information about run ${args.options.name} of Microsoft Flow ${args.options.flowName}...`);
32
32
  }
33
+ if (args.options.includeTriggerInformation) {
34
+ await this.warn(logger, `Parameter 'includeTriggerInformation' is deprecated. Please use 'withTrigger instead`);
35
+ }
36
+ const actionsParameter = args.options.withActions ? '$expand=properties%2Factions&' : '';
33
37
  const requestOptions = {
34
- url: `${this.resource}/providers/Microsoft.ProcessSimple/environments/${formatting.encodeQueryParameter(args.options.environmentName)}/flows/${formatting.encodeQueryParameter(args.options.flowName)}/runs/${formatting.encodeQueryParameter(args.options.name)}?api-version=2016-11-01`,
38
+ url: `${this.resource}/providers/Microsoft.ProcessSimple/environments/${formatting.encodeQueryParameter(args.options.environmentName)}/flows/${formatting.encodeQueryParameter(args.options.flowName)}/runs/${formatting.encodeQueryParameter(args.options.name)}?${actionsParameter}api-version=2016-11-01`,
35
39
  headers: {
36
40
  accept: 'application/json'
37
41
  },
@@ -43,17 +47,11 @@ class FlowRunGetCommand extends PowerAutomateCommand {
43
47
  res.endTime = res.properties.endTime || '';
44
48
  res.status = res.properties.status;
45
49
  res.triggerName = res.properties.trigger.name;
46
- if (args.options.includeTriggerInformation && res.properties.trigger.outputsLink) {
47
- const triggerInformationOptions = {
48
- url: res.properties.trigger.outputsLink.uri,
49
- headers: {
50
- accept: 'application/json',
51
- 'x-anonymous': true
52
- },
53
- responseType: 'json'
54
- };
55
- const triggerInformationResponse = await request.get(triggerInformationOptions);
56
- res.triggerInformation = triggerInformationResponse.body;
50
+ if ((args.options.includeTriggerInformation || args.options.withTrigger) && res.properties.trigger.outputsLink) {
51
+ res.triggerInformation = await this.getTriggerInformation(res);
52
+ }
53
+ if (!!args.options.withActions) {
54
+ res.actions = await this.getActionsInformation(res, args.options.withActions);
57
55
  }
58
56
  await logger.log(res);
59
57
  }
@@ -61,6 +59,38 @@ class FlowRunGetCommand extends PowerAutomateCommand {
61
59
  this.handleRejectedODataJsonPromise(err);
62
60
  }
63
61
  }
62
+ async getTriggerInformation(res) {
63
+ return await this.requestAdditionalInformation(res.properties.trigger.outputsLink.uri);
64
+ }
65
+ async getActionsInformation(res, withActions) {
66
+ const chosenActions = typeof withActions === 'string' ? withActions.split(',') : null;
67
+ const actionsResult = {};
68
+ for (const action in res.properties.actions) {
69
+ if (!res.properties.actions[action] || (chosenActions && chosenActions.indexOf(action) === -1)) {
70
+ continue;
71
+ }
72
+ actionsResult[action] = res.properties.actions[action];
73
+ if (!!res.properties.actions[action].inputsLink?.uri) {
74
+ actionsResult[action].input = await this.requestAdditionalInformation(res.properties.actions[action].inputsLink?.uri);
75
+ }
76
+ if (!!res.properties.actions[action].outputsLink?.uri) {
77
+ actionsResult[action].output = await this.requestAdditionalInformation(res.properties.actions[action].outputsLink?.uri);
78
+ }
79
+ }
80
+ return actionsResult;
81
+ }
82
+ async requestAdditionalInformation(requestUri) {
83
+ const additionalInformationOptions = {
84
+ url: requestUri,
85
+ headers: {
86
+ accept: 'application/json',
87
+ 'x-anonymous': true
88
+ },
89
+ responseType: 'json'
90
+ };
91
+ const additionalInformationResponse = await request.get(additionalInformationOptions);
92
+ return additionalInformationResponse.body ? additionalInformationResponse.body : additionalInformationResponse;
93
+ }
64
94
  }
65
95
  _FlowRunGetCommand_instances = new WeakSet(), _FlowRunGetCommand_initOptions = function _FlowRunGetCommand_initOptions() {
66
96
  this.options.unshift({
@@ -71,18 +101,27 @@ _FlowRunGetCommand_instances = new WeakSet(), _FlowRunGetCommand_initOptions = f
71
101
  option: '-e, --environmentName <environmentName>'
72
102
  }, {
73
103
  option: '--includeTriggerInformation'
104
+ }, {
105
+ option: '--withTrigger'
106
+ }, {
107
+ option: '--withActions [withActions]'
74
108
  });
75
109
  }, _FlowRunGetCommand_initValidators = function _FlowRunGetCommand_initValidators() {
76
110
  this.validators.push(async (args) => {
77
111
  if (!validation.isValidGuid(args.options.flowName)) {
78
112
  return `${args.options.flowName} is not a valid GUID`;
79
113
  }
114
+ if (args.options.withActions && (typeof args.options.withActions !== 'string' && typeof args.options.withActions !== 'boolean')) {
115
+ return 'the withActions parameter must be a string or boolean';
116
+ }
80
117
  return true;
81
118
  });
82
119
  }, _FlowRunGetCommand_initTelemetry = function _FlowRunGetCommand_initTelemetry() {
83
120
  this.telemetry.push((args) => {
84
121
  Object.assign(this.telemetryProperties, {
85
- includeTriggerInformation: !!args.options.includeTriggerInformation
122
+ includeTriggerInformation: !!args.options.includeTriggerInformation,
123
+ withTrigger: !!args.options.withTrigger,
124
+ withActions: typeof args.options.withActions !== 'undefined'
86
125
  });
87
126
  });
88
127
  };
@@ -32,6 +32,14 @@ class SpoGroupMemberAddCommand extends SpoCommand {
32
32
  }
33
33
  async commandAction(logger, args) {
34
34
  try {
35
+ if (args.options.aadGroupIds) {
36
+ args.options.entraGroupIds = args.options.aadGroupIds;
37
+ this.warn(logger, `Option 'aadGroupIds' is deprecated. Please use 'entraGroupIds' instead`);
38
+ }
39
+ if (args.options.aadGroupNames) {
40
+ args.options.entraGroupNames = args.options.aadGroupNames;
41
+ this.warn(logger, `Option 'aadGroupNames' is deprecated. Please use 'entraGroupNames' instead`);
42
+ }
35
43
  const groupId = await this.getGroupId(args, logger);
36
44
  const resolvedUsernameList = await this.getValidUsers(args, logger);
37
45
  if (this.verbose) {
@@ -82,7 +90,7 @@ class SpoGroupMemberAddCommand extends SpoCommand {
82
90
  await logger.logToStderr('Checking if the specified users and groups exist');
83
91
  }
84
92
  const validUserNames = [];
85
- const identifiers = args.options.userNames ?? args.options.emails ?? args.options.aadGroupIds ?? args.options.aadGroupNames ?? args.options.userIds.toString();
93
+ const identifiers = args.options.userNames ?? args.options.emails ?? args.options.entraGroupIds ?? args.options.entraGroupNames ?? args.options.userIds.toString();
86
94
  await Promise.all(identifiers.split(',').map(async (identifier) => {
87
95
  const trimmedIdentifier = identifier.trim();
88
96
  try {
@@ -96,10 +104,10 @@ class SpoGroupMemberAddCommand extends SpoCommand {
96
104
  else if (args.options.userNames) {
97
105
  validUserNames.push(trimmedIdentifier);
98
106
  }
99
- else if (args.options.aadGroupIds) {
107
+ else if (args.options.entraGroupIds) {
100
108
  validUserNames.push(trimmedIdentifier);
101
109
  }
102
- else if (args.options.aadGroupNames) {
110
+ else if (args.options.entraGroupNames) {
103
111
  if (this.verbose) {
104
112
  await logger.logToStderr(`Getting ID of Azure AD group ${trimmedIdentifier}`);
105
113
  }
@@ -135,7 +143,9 @@ _SpoGroupMemberAddCommand_instances = new WeakSet(), _SpoGroupMemberAddCommand_i
135
143
  userNames: typeof args.options.userNames !== 'undefined',
136
144
  emails: typeof args.options.emails !== 'undefined',
137
145
  userIds: typeof args.options.userIds !== 'undefined',
146
+ entraGroupIds: typeof args.options.entraGroupIds !== 'undefined',
138
147
  aadGroupIds: typeof args.options.aadGroupIds !== 'undefined',
148
+ entraGroupNames: typeof args.options.entraGroupNames !== 'undefined',
139
149
  aadGroupNames: typeof args.options.aadGroupNames !== 'undefined'
140
150
  });
141
151
  });
@@ -152,8 +162,12 @@ _SpoGroupMemberAddCommand_instances = new WeakSet(), _SpoGroupMemberAddCommand_i
152
162
  option: '--emails [emails]'
153
163
  }, {
154
164
  option: '--userIds [userIds]'
165
+ }, {
166
+ option: '--entraGroupIds [entraGroupIds]'
155
167
  }, {
156
168
  option: '--aadGroupIds [aadGroupIds]'
169
+ }, {
170
+ option: '--entraGroupNames [entraGroupNames]'
157
171
  }, {
158
172
  option: '--aadGroupNames [aadGroupNames]'
159
173
  });
@@ -176,13 +190,16 @@ _SpoGroupMemberAddCommand_instances = new WeakSet(), _SpoGroupMemberAddCommand_i
176
190
  if (args.options.emails && args.options.emails.split(',').some(e => !validation.isValidUserPrincipalName(e))) {
177
191
  return `${args.options.emails} contains one or more invalid email addresses`;
178
192
  }
193
+ if (args.options.entraGroupIds && args.options.entraGroupIds.split(',').some(e => !validation.isValidGuid(e))) {
194
+ return `${args.options.entraGroupIds} contains one or more invalid GUIDs`;
195
+ }
179
196
  if (args.options.aadGroupIds && args.options.aadGroupIds.split(',').some(e => !validation.isValidGuid(e))) {
180
197
  return `${args.options.aadGroupIds} contains one or more invalid GUIDs`;
181
198
  }
182
199
  return true;
183
200
  });
184
201
  }, _SpoGroupMemberAddCommand_initOptionSets = function _SpoGroupMemberAddCommand_initOptionSets() {
185
- this.optionSets.push({ options: ['groupId', 'groupName'] }, { options: ['userNames', 'emails', 'userIds', 'aadGroupIds', 'aadGroupNames'] });
202
+ this.optionSets.push({ options: ['groupId', 'groupName'] }, { options: ['userNames', 'emails', 'userIds', 'entraGroupIds', 'aadGroupIds', 'entraGroupNames', 'aadGroupNames'] });
186
203
  };
187
204
  export default new SpoGroupMemberAddCommand();
188
205
  //# sourceMappingURL=group-member-add.js.map
@@ -45,6 +45,14 @@ class SpoGroupMemberRemoveCommand extends SpoCommand {
45
45
  return userOutput.userPrincipalName;
46
46
  }
47
47
  async commandAction(logger, args) {
48
+ if (args.options.aadGroupId) {
49
+ args.options.entraGroupId = args.options.aadGroupId;
50
+ this.warn(logger, `Option 'aadGroupId' is deprecated. Please use 'entraGroupId' instead`);
51
+ }
52
+ if (args.options.aadGroupName) {
53
+ args.options.entraGroupName = args.options.aadGroupName;
54
+ this.warn(logger, `Option 'aadGroupName' is deprecated. Please use 'entraGroupName' instead`);
55
+ }
48
56
  if (args.options.force) {
49
57
  if (this.debug) {
50
58
  await logger.logToStderr('Confirmation bypassed by entering confirm option. Removing the user from SharePoint Group...');
@@ -52,7 +60,7 @@ class SpoGroupMemberRemoveCommand extends SpoCommand {
52
60
  await this.removeUserfromSPGroup(logger, args);
53
61
  }
54
62
  else {
55
- const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove user ${args.options.userName || args.options.userId || args.options.email || args.options.aadGroupId || args.options.aadGroupName} from the SharePoint group?` });
63
+ const result = await cli.promptForConfirmation({ message: `Are you sure you want to remove user ${args.options.userName || args.options.userId || args.options.email || args.options.entraGroupId || args.options.entraGroupName} from the SharePoint group?` });
56
64
  if (result) {
57
65
  await this.removeUserfromSPGroup(logger, args);
58
66
  }
@@ -60,7 +68,7 @@ class SpoGroupMemberRemoveCommand extends SpoCommand {
60
68
  }
61
69
  async removeUserfromSPGroup(logger, args) {
62
70
  if (this.verbose) {
63
- await logger.logToStderr(`Removing User ${args.options.userName || args.options.email || args.options.userId || args.options.aadGroupId || args.options.aadGroupName} from Group: ${args.options.groupId || args.options.groupName}`);
71
+ await logger.logToStderr(`Removing User ${args.options.userName || args.options.email || args.options.userId || args.options.entraGroupId || args.options.entraGroupName} from Group: ${args.options.groupId || args.options.groupName}`);
64
72
  }
65
73
  let requestUrl = `${args.options.webUrl}/_api/web/sitegroups/${args.options.groupId
66
74
  ? `GetById('${args.options.groupId}')`
@@ -74,8 +82,8 @@ class SpoGroupMemberRemoveCommand extends SpoCommand {
74
82
  requestUrl += `/users/removeByLoginName(@LoginName)?@LoginName='${formatting.encodeQueryParameter(loginName)}'`;
75
83
  }
76
84
  else {
77
- const aadGroupId = await this.getGroupId(args);
78
- requestUrl += `/users/RemoveById(${aadGroupId})`;
85
+ const entraGroupId = await this.getGroupId(args);
86
+ requestUrl += `/users/RemoveById(${entraGroupId})`;
79
87
  }
80
88
  const requestOptions = {
81
89
  url: requestUrl,
@@ -107,14 +115,14 @@ class SpoGroupMemberRemoveCommand extends SpoCommand {
107
115
  const output = await cli.executeCommandWithOutput(SpoGroupMemberListCommand, { options: { ...options, _: [] } });
108
116
  const getGroupMemberListOutput = JSON.parse(output.stdout);
109
117
  let foundGroups;
110
- if (args.options.aadGroupId) {
111
- foundGroups = getGroupMemberListOutput.filter((x) => { return x.LoginName.indexOf(args.options.aadGroupId) > -1 && (x.LoginName.indexOf("c:0o.c|federateddirectoryclaimprovider|") === 0 || x.LoginName.indexOf("c:0t.c|tenant|") === 0); });
118
+ if (args.options.entraGroupId) {
119
+ foundGroups = getGroupMemberListOutput.filter((x) => { return x.LoginName.indexOf(args.options.entraGroupId) > -1 && (x.LoginName.indexOf("c:0o.c|federateddirectoryclaimprovider|") === 0 || x.LoginName.indexOf("c:0t.c|tenant|") === 0); });
112
120
  }
113
121
  else {
114
- foundGroups = getGroupMemberListOutput.filter((x) => { return x.Title === args.options.aadGroupName && (x.LoginName.indexOf("c:0o.c|federateddirectoryclaimprovider|") === 0 || x.LoginName.indexOf("c:0t.c|tenant|") === 0); });
122
+ foundGroups = getGroupMemberListOutput.filter((x) => { return x.Title === args.options.entraGroupName && (x.LoginName.indexOf("c:0o.c|federateddirectoryclaimprovider|") === 0 || x.LoginName.indexOf("c:0t.c|tenant|") === 0); });
115
123
  }
116
124
  if (foundGroups.length === 0) {
117
- throw `The Azure AD group ${args.options.aadGroupId || args.options.aadGroupName} is not found in SharePoint group ${args.options.groupId || args.options.groupName}`;
125
+ throw `The Azure AD group ${args.options.entraGroupId || args.options.entraGroupName} is not found in SharePoint group ${args.options.groupId || args.options.groupName}`;
118
126
  }
119
127
  return foundGroups[0].Id;
120
128
  }
@@ -127,8 +135,10 @@ _SpoGroupMemberRemoveCommand_instances = new WeakSet(), _SpoGroupMemberRemoveCom
127
135
  userName: (!(!args.options.userName)).toString(),
128
136
  email: (!(!args.options.email)).toString(),
129
137
  userId: (!(!args.options.userId)).toString(),
138
+ entraGroupId: (!(!args.options.entraGroupId)).toString(),
130
139
  aadGroupId: (!(!args.options.groupId)).toString(),
131
- aadGroupName: (!(!args.options.groupName)).toString(),
140
+ entraGroupName: (!(!args.options.entraGroupName)).toString(),
141
+ aadGroupName: (!(!args.options.aadGroupName)).toString(),
132
142
  force: (!(!args.options.force)).toString()
133
143
  });
134
144
  });
@@ -145,8 +155,12 @@ _SpoGroupMemberRemoveCommand_instances = new WeakSet(), _SpoGroupMemberRemoveCom
145
155
  option: '--email [email]'
146
156
  }, {
147
157
  option: '--userId [userId]'
158
+ }, {
159
+ option: '--entraGroupId [entraGroupId]'
148
160
  }, {
149
161
  option: '--aadGroupId [aadGroupId]'
162
+ }, {
163
+ option: '--entraGroupName [entraGroupName]'
150
164
  }, {
151
165
  option: '--aadGroupName [aadGroupName]'
152
166
  }, {
@@ -166,13 +180,16 @@ _SpoGroupMemberRemoveCommand_instances = new WeakSet(), _SpoGroupMemberRemoveCom
166
180
  if (args.options.email && !validation.isValidUserPrincipalName(args.options.email)) {
167
181
  return `${args.options.email} is not a valid email`;
168
182
  }
183
+ if (args.options.entraGroupId && !validation.isValidGuid(args.options.entraGroupId)) {
184
+ return `${args.options.entraGroupId} is not a valid GUID`;
185
+ }
169
186
  if (args.options.aadGroupId && !validation.isValidGuid(args.options.aadGroupId)) {
170
187
  return `${args.options.aadGroupId} is not a valid GUID`;
171
188
  }
172
189
  return validation.isValidSharePointUrl(args.options.webUrl);
173
190
  });
174
191
  }, _SpoGroupMemberRemoveCommand_initOptionSets = function _SpoGroupMemberRemoveCommand_initOptionSets() {
175
- this.optionSets.push({ options: ['groupName', 'groupId'] }, { options: ['userName', 'email', 'userId', 'aadGroupId', 'aadGroupName'] });
192
+ this.optionSets.push({ options: ['groupName', 'groupId'] }, { options: ['userName', 'email', 'userId', 'entraGroupId', 'aadGroupId', 'entraGroupName', 'aadGroupName'] });
176
193
  };
177
194
  export default new SpoGroupMemberRemoveCommand();
178
195
  //# sourceMappingURL=group-member-remove.js.map
@@ -25,12 +25,16 @@ class SpoUserEnsureCommand extends SpoCommand {
25
25
  __classPrivateFieldGet(this, _SpoUserEnsureCommand_instances, "m", _SpoUserEnsureCommand_initOptionSets).call(this);
26
26
  }
27
27
  async commandAction(logger, args) {
28
+ if (args.options.aadId) {
29
+ args.options.entraId = args.options.aadId;
30
+ this.warn(logger, `Option 'aadId' is deprecated. Please use 'entraId' instead`);
31
+ }
28
32
  if (this.verbose) {
29
- await logger.logToStderr(`Ensuring user ${args.options.aadId || args.options.userName} at site ${args.options.webUrl}`);
33
+ await logger.logToStderr(`Ensuring user ${args.options.entraId || args.options.userName} at site ${args.options.webUrl}`);
30
34
  }
31
35
  try {
32
36
  const requestBody = {
33
- logonName: args.options.userName || await this.getUpnByUserId(args.options.aadId, logger)
37
+ logonName: args.options.userName || await this.getUpnByUserId(args.options.entraId, logger)
34
38
  };
35
39
  const requestOptions = {
36
40
  url: `${args.options.webUrl}/_api/web/ensureuser`,
@@ -47,16 +51,17 @@ class SpoUserEnsureCommand extends SpoCommand {
47
51
  this.handleRejectedODataJsonPromise(err);
48
52
  }
49
53
  }
50
- async getUpnByUserId(aadId, logger) {
54
+ async getUpnByUserId(entraId, logger) {
51
55
  if (this.verbose) {
52
- await logger.logToStderr(`Retrieving user principal name for user with id ${aadId}`);
56
+ await logger.logToStderr(`Retrieving user principal name for user with id ${entraId}`);
53
57
  }
54
- return await aadUser.getUpnByUserId(aadId);
58
+ return await aadUser.getUpnByUserId(entraId);
55
59
  }
56
60
  }
57
61
  _SpoUserEnsureCommand_instances = new WeakSet(), _SpoUserEnsureCommand_initTelemetry = function _SpoUserEnsureCommand_initTelemetry() {
58
62
  this.telemetry.push((args) => {
59
63
  Object.assign(this.telemetryProperties, {
64
+ entraId: typeof args.options.entraId !== 'undefined',
60
65
  aadId: typeof args.options.aadId !== 'undefined',
61
66
  userName: typeof args.options.userName !== 'undefined'
62
67
  });
@@ -64,6 +69,8 @@ _SpoUserEnsureCommand_instances = new WeakSet(), _SpoUserEnsureCommand_initTelem
64
69
  }, _SpoUserEnsureCommand_initOptions = function _SpoUserEnsureCommand_initOptions() {
65
70
  this.options.unshift({
66
71
  option: '-u, --webUrl <webUrl>'
72
+ }, {
73
+ option: '--entraId [entraId]'
67
74
  }, {
68
75
  option: '--aadId [aadId]'
69
76
  }, {
@@ -75,6 +82,9 @@ _SpoUserEnsureCommand_instances = new WeakSet(), _SpoUserEnsureCommand_initTelem
75
82
  if (isValidSharePointUrl !== true) {
76
83
  return isValidSharePointUrl;
77
84
  }
85
+ if (args.options.entraId && !validation.isValidGuid(args.options.entraId)) {
86
+ return `${args.options.entraId} is not a valid GUID.`;
87
+ }
78
88
  if (args.options.aadId && !validation.isValidGuid(args.options.aadId)) {
79
89
  return `${args.options.aadId} is not a valid GUID.`;
80
90
  }
@@ -84,7 +94,7 @@ _SpoUserEnsureCommand_instances = new WeakSet(), _SpoUserEnsureCommand_initTelem
84
94
  return true;
85
95
  });
86
96
  }, _SpoUserEnsureCommand_initOptionSets = function _SpoUserEnsureCommand_initOptionSets() {
87
- this.optionSets.push({ options: ['aadId', 'userName'] });
97
+ this.optionSets.push({ options: ['entraId', 'aadId', 'userName'] });
88
98
  };
89
99
  export default new SpoUserEnsureCommand();
90
100
  //# sourceMappingURL=user-ensure.js.map
@@ -25,7 +25,14 @@ m365 flow run get [options]
25
25
  : The name of the environment where the flow is located
26
26
 
27
27
  `--includeTriggerInformation`
28
+ : (deprecated. Use option `withTrigger` instead) If specified, include information about the trigger details
29
+
30
+ `--withTrigger`
28
31
  : If specified, include information about the trigger details
32
+
33
+ `--withActions [withActions]`
34
+ : If specified, include information about all actions when no action names are specified, or provide a specified list of actions separated by commas to include only the relevant action details
35
+
29
36
  ```
30
37
 
31
38
  <Global />
@@ -44,7 +51,7 @@ If the Microsoft Flow with the name you specified doesn't exist, you will get th
44
51
 
45
52
  If the run with the name you specified doesn't exist, you will get the `The provided workflow run name is not valid.` error.
46
53
 
47
- If the option `includeTriggerInformation` is specified, but the trigger does not contain an outputsLink such as for example with a `Recurrence` trigger, this option will be ignored.
54
+ If the option `withTrigger` is specified, but the trigger does not contain an outputsLink such as for example with a `Recurrence` trigger, this option will be ignored.
48
55
 
49
56
  ## Examples
50
57
 
@@ -57,7 +64,19 @@ m365 flow run get --environmentName Default-d87a7535-dd31-4437-bfe1-95340acd55c5
57
64
  Get information about the given run of the specified Power Automate flow including trigger information
58
65
 
59
66
  ```sh
60
- m365 flow run get --environmentName Default-d87a7535-dd31-4437-bfe1-95340acd55c5 --flowName 5923cb07-ce1a-4a5c-ab81-257ce820109a --name 08586653536760200319026785874CU62 --includeTriggerInformation
67
+ m365 flow run get --environmentName Default-d87a7535-dd31-4437-bfe1-95340acd55c5 --flowName 5923cb07-ce1a-4a5c-ab81-257ce820109a --name 08586653536760200319026785874CU62 --withTrigger
68
+ ```
69
+
70
+ Get information about the given run of the specified Power Automate flow including details about all associated actions.
71
+
72
+ ```sh
73
+ m365 flow run get --environmentName Default-d87a7535-dd31-4437-bfe1-95340acd55c5 --flowName 5923cb07-ce1a-4a5c-ab81-257ce820109a --name 08586653536760200319026785874CU62 --withActions
74
+ ```
75
+
76
+ Get information about the given run of the specified Power Automate flow including exclusively the details of 'Action_Internal_Name1' and 'Action_Internal_Name2' actions
77
+
78
+ ```sh
79
+ m365 flow run get --environmentName Default-d87a7535-dd31-4437-bfe1-95340acd55c5 --flowName 5923cb07-ce1a-4a5c-ab81-257ce820109a --name 08586653536760200319026785874CU62 --withActions "Action_Internal_Name1,Action_Internal_Name2"
61
80
  ```
62
81
 
63
82
  ## Response
@@ -157,9 +176,9 @@ m365 flow run get --environmentName Default-d87a7535-dd31-4437-bfe1-95340acd55c5
157
176
  </TabItem>
158
177
  </Tabs>
159
178
 
160
- ### `includeTriggerInformation` response
179
+ ### `withTrigger` response
161
180
 
162
- When using the option `includeTriggerInformation`, the response for the json-output will differ.
181
+ When using the option `withTrigger`, the response for the json-output will differ.
163
182
 
164
183
  <Tabs>
165
184
  <TabItem value="JSON">
@@ -233,3 +252,147 @@ When using the option `includeTriggerInformation`, the response for the json-out
233
252
  </TabItem>
234
253
  </Tabs>
235
254
 
255
+ ### `withActions` response
256
+
257
+ When using the option `withActions`, the response for the json-output will differ.
258
+
259
+ <Tabs>
260
+ <TabItem value="JSON">
261
+
262
+ ```json
263
+ {
264
+ "name": "08585236861638480597867166179CU104",
265
+ "id": "/providers/Microsoft.ProcessSimple/environments/Default-e1dd4023-a656-480a-8a0e-c1b1eec51e1d/flows/24335774-daf6-4183-acb7-f5155c2cd2fe/runs/08585236861638480597867166179CU104",
266
+ "type": "Microsoft.ProcessSimple/environments/flows/runs",
267
+ "properties": {
268
+ "actions":{
269
+ "Compose": {
270
+ "input": "Test",
271
+ "inputsLink": {
272
+ "uri": "https://prod-255.westeurope.logic.azure.com:443/workflows/88b5146587d144ea85efb15683c4e58f/runs/08586652586741142222645090602CU35/actions/Compose/contents/ActionInputs?api-version=2016-06-01&se=2023-12-14T19%3A00%3A00.0000000Z&sp=%2Fruns%2F08586652586741142222645090602CU35%2Factions%2FCompose%2Fcontents%2FActionInputs%2Fread&sv=1.0&sig=wYD6bMHjdoOawYAMTHqpmyILowLKRCkFEfsNxi1NFzw",
273
+ "contentVersion": "test==",
274
+ "contentSize": 6,
275
+ "contentHash": {
276
+ "algorithm": "md5",
277
+ "value": "test=="
278
+ }
279
+ },
280
+ "output": "Test",
281
+ "outputsLink": {
282
+ "uri": "https://prod-255.westeurope.logic.azure.com:443/workflows/88b5146587d144ea85efb15683c4e58f/runs/08586652586741142222645090602CU35/actions/Compose/contents/ActionOutputs?api-version=2016-06-01&se=2023-12-14T19%3A00%3A00.0000000Z&sp=%2Fruns%2F08586652586741142222645090602CU35%2Factions%2FCompose%2Fcontents%2FActionOutputs%2Fread&sv=1.0&sig=KoI4_RAEVNFUgymktOFxvfb5mCoIKR2WCYGwexjD7kY",
283
+ "contentVersion": "test==",
284
+ "contentSize": 6,
285
+ "contentHash": {
286
+ "algorithm": "md5",
287
+ "value": "test=="
288
+ }
289
+ },
290
+ "startTime": "2023-11-17T21:06:14.466889Z",
291
+ "endTime": "2023-11-17T21:06:14.4676104Z",
292
+ "correlation": {
293
+ "actionTrackingId": "dabed750-0ec4-4c34-98f5-cc3695e0811e",
294
+ "clientTrackingId": "08585013686846794051719443325CU251",
295
+ "clientKeywords": [
296
+ "resubmitFlow"
297
+ ]
298
+ },
299
+ "status": "Succeeded",
300
+ "code": "OK"
301
+ }
302
+ },
303
+ "startTime": "2023-03-04T09:05:21.8066368Z",
304
+ "endTime": "2023-03-04T09:05:22.5880202Z",
305
+ "status": "Succeeded",
306
+ "correlation": {
307
+ "clientTrackingId": "08585236861638480598867166179CU131"
308
+ },
309
+ "trigger": {
310
+ "name": "When_an_email_is_flagged_(V4)",
311
+ "inputsLink": {
312
+ "uri": "https://prod-130.westeurope.logic.azure.com:443/workflows/3ebadb794f6641e0b7f4fda131cdfb0b/runs/08585236861638480597867166179CU104/contents/TriggerInputs?api-version=2016-06-01&se=2023-03-04T14%3A00%3A00.0000000Z&sp=%2Fruns%2F08585236861638480597867166179CU104%2Fcontents%2FTriggerInputs%2Fread&sv=1.0&sig=",
313
+ "contentVersion": "2v/VLXFrKV6JvwSdcN7aHg==",
314
+ "contentSize": 343,
315
+ "contentHash": {
316
+ "algorithm": "md5",
317
+ "value": "2v/VLXFrKV6JvwSdcN7aHg=="
318
+ }
319
+ },
320
+ "outputsLink": {
321
+ "uri": "https://prod-130.westeurope.logic.azure.com:443/workflows/3ebadb794f6641e0b7f4fda131cdfb0b/runs/08585236861638480597867166179CU104/contents/TriggerOutputs?api-version=2016-06-01&se=2023-03-04T14%3A00%3A00.0000000Z&sp=%2Fruns%2F08585236861638480597867166179CU104%2Fcontents%2FTriggerOutputs%2Fread&sv=1.0&sig=",
322
+ "contentVersion": "AHZEeWNlQ0bLe48yDmpzrQ==",
323
+ "contentSize": 3478,
324
+ "contentHash": {
325
+ "algorithm": "md5",
326
+ "value": "AHZEeWNlQ0bLe48yDmpzrQ=="
327
+ }
328
+ },
329
+ "startTime": "2023-03-04T09:05:21.6192576Z",
330
+ "endTime": "2023-03-04T09:05:21.7442626Z",
331
+ "scheduledTime": "2023-03-04T09:05:21.573561Z",
332
+ "originHistoryName": "08585236861638480598867166179CU131",
333
+ "correlation": {
334
+ "clientTrackingId": "08585236861638480598867166179CU131"
335
+ },
336
+ "code": "OK",
337
+ "status": "Succeeded"
338
+ }
339
+ },
340
+ "startTime": "2023-03-04T09:05:21.8066368Z",
341
+ "endTime": "2023-03-04T09:05:22.5880202Z",
342
+ "status": "Succeeded",
343
+ "triggerName": "When_an_email_is_flagged_(V4)",
344
+ "triggerInformation": {
345
+ "from": "john@contoso.com",
346
+ "toRecipients": "doe@contoso.com",
347
+ "subject": "Dummy email",
348
+ "body": "<html><head>\r\\\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></head><body><p>This is dummy content</p></body></html>",
349
+ "importance": "normal",
350
+ "bodyPreview": "This is dummy content",
351
+ "hasAttachments": false,
352
+ "id": "AAMkADgzN2Q1NThiLTI0NjYtNGIxYS05MDdjLTg1OWQxNzgwZGM2ZgBGAAAAAAC6jQfUzacTSIHqMw2yacnUBwBiOC8xvYmdT6G2E_hLMK5kAAAAAAEMAABiOC8xvYmdT6G2E_hLMK5kAALUqy81AAA=",
353
+ "internetMessageId": "<DB7PR03MB5018879914324FC65695809FE1AD9@DB7PR03MB5018.eurprd03.prod.outlook.com>",
354
+ "conversationId": "AAQkADgzN2Q1NThiLTI0NjYtNGIxYS05MDdjLTg1OWQxNzgwZGM2ZgAQAMqP9zsK8a1CnIYEgHclLTk=",
355
+ "receivedDateTime": "2023-03-01T15:06:57+00:00",
356
+ "isRead": false,
357
+ "attachments": [],
358
+ "isHtml": true
359
+ },
360
+ "actions": {
361
+ "Compose": {
362
+ "input": "Test",
363
+ "inputsLink": {
364
+ "uri": "https://prod-255.westeurope.logic.azure.com:443/workflows/88b5146587d144ea85efb15683c4e58f/runs/08586652586741142222645090602CU35/actions/Compose/contents/ActionInputs?api-version=2016-06-01&se=2023-12-14T19%3A00%3A00.0000000Z&sp=%2Fruns%2F08586652586741142222645090602CU35%2Factions%2FCompose%2Fcontents%2FActionInputs%2Fread&sv=1.0&sig=wYD6bMHjdoOawYAMTHqpmyILowLKRCkFEfsNxi1NFzw",
365
+ "contentVersion": "test==",
366
+ "contentSize": 6,
367
+ "contentHash": {
368
+ "algorithm": "md5",
369
+ "value": "test=="
370
+ }
371
+ },
372
+ "output": "Test",
373
+ "outputsLink": {
374
+ "uri": "https://prod-255.westeurope.logic.azure.com:443/workflows/88b5146587d144ea85efb15683c4e58f/runs/08586652586741142222645090602CU35/actions/Compose/contents/ActionOutputs?api-version=2016-06-01&se=2023-12-14T19%3A00%3A00.0000000Z&sp=%2Fruns%2F08586652586741142222645090602CU35%2Factions%2FCompose%2Fcontents%2FActionOutputs%2Fread&sv=1.0&sig=KoI4_RAEVNFUgymktOFxvfb5mCoIKR2WCYGwexjD7kY",
375
+ "contentVersion": "test==",
376
+ "contentSize": 6,
377
+ "contentHash": {
378
+ "algorithm": "md5",
379
+ "value": "test=="
380
+ }
381
+ },
382
+ "startTime": "2023-11-17T21:06:14.466889Z",
383
+ "endTime": "2023-11-17T21:06:14.4676104Z",
384
+ "correlation": {
385
+ "actionTrackingId": "dabed750-0ec4-4c34-98f5-cc3695e0811e",
386
+ "clientTrackingId": "08585013686846794051719443325CU251",
387
+ "clientKeywords": [
388
+ "resubmitFlow"
389
+ ]
390
+ },
391
+ "status": "Succeeded",
392
+ "code": "OK"
393
+ }
394
+ }
395
+ }
396
+ ```
397
+ </TabItem>
398
+ </Tabs>
@@ -33,18 +33,24 @@ m365 spo group member add [options]
33
33
  `--userIds [userIds]`
34
34
  : The user Id of the user to add as a member. (Id of the site user, for example: 14) If multiple users need to be added, the Ids have to be comma-separated. Specify either `userIds`, `userNames`, `emails`, `aadGroupIds` or `aadGroupNames`.
35
35
 
36
+ `--entraGroupIds [entraGroupIds]`
37
+ : The object Id of the Entra group to add as a member. If multiple groups need to be added, the Ids have to be comma-separated. Specify either `userIds`, `userNames`, `emails`, `aadGroupIds`, `entraGroupIds`, `aadGroupNames`, or `entraGroupNames`.
38
+
36
39
  `--aadGroupIds [aadGroupIds]`
37
- : The object Id of the Azure AD group to add as a member. If multiple groups need to be added, the Ids have to be comma-separated. Specify either `userIds`, `userNames`, `emails`, `aadGroupIds` or `aadGroupNames`.
40
+ : (deprecated. Use `entraGroupIds` instead) The object Id of the Azure AD group to add as a member. If multiple groups need to be added, the Ids have to be comma-separated. Specify either `userIds`, `userNames`, `emails`, `aadGroupIds`, `entraGroupIds`, `aadGroupNames`, or `entraGroupNames`.
41
+
42
+ `--entraGroupNames [entraGroupNames]`
43
+ : The name of the Entra group to add as a member. If multiple groups need to be added, they have to be comma-separated. Specify either `userIds`, `userNames`, `emails`, `aadGroupIds`, `entraGroupIds`, `aadGroupNames`, or `entraGroupNames`.
38
44
 
39
45
  `--aadGroupNames [aadGroupNames]`
40
- : The name of the Azure AD group to add as a member. If multiple groups need to be added, they have to be comma-separated. Specify either `userIds`, `userNames`, `emails`, `aadGroupIds` or `aadGroupNames`.
46
+ : (deprecated. Use `entraGroupNames` instead) The name of the Azure AD group to add as a member. If multiple groups need to be added, they have to be comma-separated. Specify either `userIds`, `userNames`, `emails`, `aadGroupIds`, `entraGroupIds`, `aadGroupNames`, or `entraGroupNames`.
41
47
  ```
42
48
 
43
49
  <Global />
44
50
 
45
51
  ## Remarks
46
52
 
47
- For the `userIds`, `userNames`, `emails`, `aadGroupIds` or `aadGroupNames` options you can specify multiple values by separating them with a comma. If one of the specified entries is not valid, the command will fail with an error message showing the list of invalid values.
53
+ For the `userIds`, `userNames`, `emails`, `aadGroupIds`, `entraGroupIds`, `aadGroupNames`, or `entraGroupNames` options you can specify multiple values by separating them with a comma. If one of the specified entries is not valid, the command will fail with an error message showing the list of invalid values.
48
54
 
49
55
  ## Examples
50
56
 
@@ -84,11 +90,17 @@ Add multiple users with the userIds parameter to a SharePoint group with the gro
84
90
  m365 spo group member add --webUrl https://contoso.sharepoint.com/sites/SiteA --groupId 5 --userIds "5,12"
85
91
  ```
86
92
 
87
- Add multiple users with the aadGroupNames parameter to a SharePoint group with the groupId parameter
93
+ Add multiple users with the entraGroupIds parameter to a SharePoint group with the groupId parameter.
94
+
95
+ ```sh
96
+ m365 spo group member add --webUrl https://contoso.sharepoint.com/sites/SiteA --groupId 5 --entraGroupIds "f2fb2f10-cfd2-4054-8ffd-64533657a5ab,3e86049e-89e6-4c27-bccb-d7549f0bbd06"
97
+ ```
98
+
99
+ Add multiple users with the entraGroupNames parameter to a SharePoint group with the groupId parameter.
88
100
 
89
- ```sh
90
- m365 spo group member add --webUrl https://contoso.sharepoint.com/sites/SiteA --groupId 5 --aadGroupNames "Azure group one, Azure group two"
91
- ```
101
+ ```sh
102
+ m365 spo group member add --webUrl https://contoso.sharepoint.com/sites/SiteA --groupId 5 --entraGroupNames "Azure group one, Azure group two"
103
+ ```
92
104
 
93
105
  ## Response
94
106
 
@@ -31,11 +31,17 @@ m365 spo group member remove [options]
31
31
  `--userId [userId]`
32
32
  : The user Id (Id of the site user, eg. 14) of the user to remove as a member. Specify either `userName`, `email`, `userId`, `aadGroupId` or `aadGroupName`.
33
33
 
34
+ `--entraGroupId [entraGroupId]`
35
+ : The object Id of the Entra group to remove as a member. Specify either `userName`, `email`, `userId`, `aadGroupId`, `entraGroupId`, `aadGroupName`, or `entraGroupName`.
36
+
34
37
  `--aadGroupId [aadGroupId]`
35
- : The object Id of the Azure AD group to remove as a member. Specify either `userName`, `email`, `userId`, `aadGroupId` or `aadGroupName`.
38
+ : (deprecated. Use `entraGroupId` instead) The object Id of the Azure AD group to remove as a member. Specify either `userName`, `email`, `userId`, `aadGroupId`, `entraGroupId`, `aadGroupName`, or `entraGroupName`.
39
+
40
+ `--entraGroupName [entraGroupName]`
41
+ : The name of the Entra group to remove as a member. Specify either `userName`, `email`, `userId`, `aadGroupId`, `entraGroupId`, `aadGroupName`, or `entraGroupName`.
36
42
 
37
43
  `--aadGroupName [aadGroupName]`
38
- : The name of the Azure AD group to remove as a member. Specify either `userName`, `email`, `userId`, `aadGroupId` or `aadGroupName`.
44
+ : (deprecated. Use `entraGroupName` instead) The name of the Azure AD group to remove as a member. Specify either `userName`, `email`, `userId`, `aadGroupId`, `entraGroupId`, `aadGroupName`, or `entraGroupName`.
39
45
  ```
40
46
 
41
47
  <Global />
@@ -60,16 +66,16 @@ Remove a user from a SharePoint group by email.
60
66
  m365 spo group member remove --webUrl https://contoso.sharepoint.com/sites/SiteA --groupName "Site A Visitors" --userId 14
61
67
  ```
62
68
 
63
- Remove an Azure AD group from a SharePoint group based on the Azure AD group name on a given web.
69
+ Remove an Entra group from a SharePoint group based on the Entra group name on a given web.
64
70
 
65
71
  ```sh
66
- m365 spo group member remove --webUrl https://contoso.sharepoint.com/sites/SiteA --groupId 5 --aadGroupName "Azure AD Security Group"
72
+ m365 spo group member remove --webUrl https://contoso.sharepoint.com/sites/SiteA --groupId 5 --entraGroupName "Azure AD Security Group"
67
73
  ```
68
74
 
69
- Remove an Azure AD group from a SharePoint group based on the Azure AD group ID on a given web.
75
+ Remove an Entra group from a SharePoint group based on the Entra group ID on a given web.
70
76
 
71
77
  ```sh
72
- m365 spo group member remove --webUrl https://contoso.sharepoint.com/sites/SiteA --groupName "Site A Visitors" --aadGroupId "5786b8e8-c495-4734-b345-756733960730"
78
+ m365 spo group member remove --webUrl https://contoso.sharepoint.com/sites/SiteA --groupName "Site A Visitors" --entraGroupId "5786b8e8-c495-4734-b345-756733960730"
73
79
  ```
74
80
 
75
81
  ## Response