@pnp/cli-microsoft365 10.0.0-beta.787c5f1 → 10.0.0-beta.977d78b

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 (61) hide show
  1. package/allCommands.json +1 -1
  2. package/allCommandsFull.json +1 -1
  3. package/dist/Auth.js +3 -1
  4. package/dist/m365/file/commands/file-move.js +135 -0
  5. package/dist/m365/file/commands.js +2 -1
  6. package/dist/m365/spfx/commands/project/project-doctor/doctor-1.20.0-rc.1.js +25 -0
  7. package/dist/m365/spfx/commands/project/project-doctor.js +2 -1
  8. package/dist/m365/spfx/commands/project/project-upgrade/upgrade-1.20.0-rc.1.js +57 -0
  9. package/dist/m365/spfx/commands/project/project-upgrade.js +16 -13
  10. package/dist/m365/spfx/commands/spfx-doctor.js +15 -0
  11. package/dist/m365/spo/commands/site/site-admin-remove.js +193 -0
  12. package/dist/m365/spo/commands/sitescript/sitescript-get.js +3 -2
  13. package/dist/m365/spo/commands.js +1 -0
  14. package/dist/m365/teams/MeetingTranscript.js +2 -0
  15. package/dist/m365/teams/commands/meeting/meeting-transcript-get.js +152 -0
  16. package/dist/m365/teams/commands.js +1 -0
  17. package/dist/utils/driveUtil.js +51 -0
  18. package/docs/docs/cmd/entra/m365group/m365group-report-activitystorage.mdx +2 -2
  19. package/docs/docs/cmd/file/file-move.mdx +79 -0
  20. package/docs/docs/cmd/spo/cdn/cdn-get.mdx +1 -1
  21. package/docs/docs/cmd/spo/cdn/cdn-origin-add.mdx +1 -1
  22. package/docs/docs/cmd/spo/cdn/cdn-origin-list.mdx +1 -1
  23. package/docs/docs/cmd/spo/cdn/cdn-origin-remove.mdx +1 -1
  24. package/docs/docs/cmd/spo/cdn/cdn-policy-list.mdx +1 -1
  25. package/docs/docs/cmd/spo/cdn/cdn-policy-set.mdx +1 -1
  26. package/docs/docs/cmd/spo/externaluser/externaluser-list.mdx +1 -1
  27. package/docs/docs/cmd/spo/hidedefaultthemes/hidedefaultthemes-get.mdx +1 -1
  28. package/docs/docs/cmd/spo/hidedefaultthemes/hidedefaultthemes-set.mdx +1 -1
  29. package/docs/docs/cmd/spo/homesite/homesite-remove.mdx +1 -1
  30. package/docs/docs/cmd/spo/knowledgehub/knowledgehub-get.mdx +1 -1
  31. package/docs/docs/cmd/spo/knowledgehub/knowledgehub-remove.mdx +1 -1
  32. package/docs/docs/cmd/spo/knowledgehub/knowledgehub-set.mdx +1 -1
  33. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-add.mdx +1 -1
  34. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-list.mdx +1 -1
  35. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-remove.mdx +1 -1
  36. package/docs/docs/cmd/spo/orgnewssite/orgnewssite-list.mdx +1 -1
  37. package/docs/docs/cmd/spo/orgnewssite/orgnewssite-remove.mdx +1 -1
  38. package/docs/docs/cmd/spo/orgnewssite/orgnewssite-set.mdx +1 -1
  39. package/docs/docs/cmd/spo/site/site-admin-add.mdx +2 -2
  40. package/docs/docs/cmd/spo/site/site-admin-remove.mdx +67 -0
  41. package/docs/docs/cmd/spo/site/site-appcatalog-add.mdx +1 -1
  42. package/docs/docs/cmd/spo/site/site-appcatalog-remove.mdx +1 -1
  43. package/docs/docs/cmd/spo/site/site-commsite-enable.mdx +1 -1
  44. package/docs/docs/cmd/spo/site/site-list.mdx +6 -4
  45. package/docs/docs/cmd/spo/site/site-set.mdx +1 -1
  46. package/docs/docs/cmd/spo/sitescript/sitescript-get.mdx +14 -1
  47. package/docs/docs/cmd/spo/storageentity/storageentity-remove.mdx +1 -1
  48. package/docs/docs/cmd/spo/storageentity/storageentity-set.mdx +1 -1
  49. package/docs/docs/cmd/spo/tenant/tenant-appcatalog-add.mdx +1 -1
  50. package/docs/docs/cmd/spo/tenant/tenant-appcatalogurl-get.mdx +1 -1
  51. package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-list.mdx +1 -1
  52. package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-remove.mdx +1 -1
  53. package/docs/docs/cmd/spo/tenant/tenant-settings-list.mdx +1 -1
  54. package/docs/docs/cmd/spo/theme/theme-apply.mdx +1 -1
  55. package/docs/docs/cmd/spo/theme/theme-get.mdx +1 -1
  56. package/docs/docs/cmd/spo/theme/theme-list.mdx +1 -1
  57. package/docs/docs/cmd/spo/theme/theme-remove.mdx +1 -1
  58. package/docs/docs/cmd/spo/theme/theme-set.mdx +1 -1
  59. package/docs/docs/cmd/spp/contentcenter/contentcenter-list.mdx +3 -5
  60. package/docs/docs/cmd/teams/meeting/meeting-transcript-get.mdx +132 -0
  61. package/package.json +1 -1
@@ -0,0 +1,152 @@
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 _TeamsMeetingTranscriptGetCommand_instances, _TeamsMeetingTranscriptGetCommand_initTelemetry, _TeamsMeetingTranscriptGetCommand_initOptions, _TeamsMeetingTranscriptGetCommand_initValidators, _TeamsMeetingTranscriptGetCommand_initOptionSets;
7
+ import auth from '../../../../Auth.js';
8
+ import request from '../../../../request.js';
9
+ import { entraUser } from '../../../../utils/entraUser.js';
10
+ import { accessToken } from '../../../../utils/accessToken.js';
11
+ import { validation } from '../../../../utils/validation.js';
12
+ import GraphCommand from '../../../base/GraphCommand.js';
13
+ import commands from '../../commands.js';
14
+ import fs from 'fs';
15
+ import path from 'path';
16
+ class TeamsMeetingTranscriptGetCommand extends GraphCommand {
17
+ get name() {
18
+ return commands.MEETING_TRANSCRIPT_GET;
19
+ }
20
+ get description() {
21
+ return 'Downloads a transcript for a given meeting';
22
+ }
23
+ constructor() {
24
+ super();
25
+ _TeamsMeetingTranscriptGetCommand_instances.add(this);
26
+ __classPrivateFieldGet(this, _TeamsMeetingTranscriptGetCommand_instances, "m", _TeamsMeetingTranscriptGetCommand_initTelemetry).call(this);
27
+ __classPrivateFieldGet(this, _TeamsMeetingTranscriptGetCommand_instances, "m", _TeamsMeetingTranscriptGetCommand_initOptions).call(this);
28
+ __classPrivateFieldGet(this, _TeamsMeetingTranscriptGetCommand_instances, "m", _TeamsMeetingTranscriptGetCommand_initValidators).call(this);
29
+ __classPrivateFieldGet(this, _TeamsMeetingTranscriptGetCommand_instances, "m", _TeamsMeetingTranscriptGetCommand_initOptionSets).call(this);
30
+ }
31
+ async commandAction(logger, args) {
32
+ try {
33
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[this.resource].accessToken);
34
+ if (this.verbose) {
35
+ await logger.logToStderr(`Retrieving transcript for the given meeting...`);
36
+ }
37
+ let requestUrl = `${this.resource}/beta/`;
38
+ if (isAppOnlyAccessToken) {
39
+ if (!args.options.userId && !args.options.userName && !args.options.email) {
40
+ throw `The option 'userId', 'userName' or 'email' is required when retrieving meeting transcript using app only permissions`;
41
+ }
42
+ requestUrl += 'users/';
43
+ if (args.options.userId) {
44
+ requestUrl += args.options.userId;
45
+ }
46
+ else if (args.options.userName) {
47
+ requestUrl += args.options.userName;
48
+ }
49
+ else if (args.options.email) {
50
+ if (this.verbose) {
51
+ await logger.logToStderr(`Getting user ID for user with email '${args.options.email}'.`);
52
+ }
53
+ const userId = await entraUser.getUserIdByEmail(args.options.email);
54
+ requestUrl += userId;
55
+ }
56
+ }
57
+ else {
58
+ if (args.options.userId || args.options.userName || args.options.email) {
59
+ throw `The options 'userId', 'userName', and 'email' cannot be used while retrieving meeting transcript using delegated permissions`;
60
+ }
61
+ requestUrl += `me`;
62
+ }
63
+ requestUrl += `/onlineMeetings/${args.options.meetingId}/transcripts/${args.options.id}`;
64
+ if (args.options.outputFile) {
65
+ requestUrl += '/content?$format=text/vtt';
66
+ }
67
+ const requestOptions = {
68
+ url: requestUrl,
69
+ headers: {
70
+ accept: 'application/json;odata.metadata=none'
71
+ },
72
+ responseType: args.options.outputFile ? 'stream' : 'json'
73
+ };
74
+ const meetingTranscript = await request.get(requestOptions);
75
+ if (meetingTranscript) {
76
+ if (args.options.outputFile) {
77
+ // Not possible to use async/await for this promise
78
+ await new Promise((resolve, reject) => {
79
+ const writer = fs.createWriteStream(args.options.outputFile);
80
+ meetingTranscript.data.pipe(writer);
81
+ writer.on('error', err => {
82
+ reject(err);
83
+ });
84
+ writer.on('close', async () => {
85
+ const filePath = args.options.outputFile;
86
+ if (this.verbose) {
87
+ await logger.logToStderr(`File saved to path ${filePath}`);
88
+ }
89
+ return resolve();
90
+ });
91
+ });
92
+ }
93
+ else {
94
+ await logger.log(meetingTranscript);
95
+ }
96
+ }
97
+ else {
98
+ throw `The specified meeting transcript was not found`;
99
+ }
100
+ }
101
+ catch (err) {
102
+ this.handleRejectedODataJsonPromise(err);
103
+ }
104
+ }
105
+ }
106
+ _TeamsMeetingTranscriptGetCommand_instances = new WeakSet(), _TeamsMeetingTranscriptGetCommand_initTelemetry = function _TeamsMeetingTranscriptGetCommand_initTelemetry() {
107
+ this.telemetry.push((args) => {
108
+ Object.assign(this.telemetryProperties, {
109
+ userId: typeof args.options.userId !== 'undefined',
110
+ userName: typeof args.options.userName !== 'undefined',
111
+ email: typeof args.options.email !== 'undefined',
112
+ outputFile: typeof args.options.outputFile !== 'undefined'
113
+ });
114
+ });
115
+ }, _TeamsMeetingTranscriptGetCommand_initOptions = function _TeamsMeetingTranscriptGetCommand_initOptions() {
116
+ this.options.unshift({
117
+ option: '-u, --userId [userId]'
118
+ }, {
119
+ option: '-n, --userName [userName]'
120
+ }, {
121
+ option: '--email [email]'
122
+ }, {
123
+ option: '-m, --meetingId <meetingId>'
124
+ }, {
125
+ option: '-i, --id <id>'
126
+ }, {
127
+ option: '-f, --outputFile [outputFile]'
128
+ });
129
+ }, _TeamsMeetingTranscriptGetCommand_initValidators = function _TeamsMeetingTranscriptGetCommand_initValidators() {
130
+ this.validators.push(async (args) => {
131
+ if (args.options.userId && !validation.isValidGuid(args.options.userId)) {
132
+ return `${args.options.userId} is not a valid Guid`;
133
+ }
134
+ if (args.options.userName && !validation.isValidUserPrincipalName(args.options.userName)) {
135
+ return `${args.options.userName} is not a valid user principal name (UPN)`;
136
+ }
137
+ if (args.options.email && !validation.isValidUserPrincipalName(args.options.email)) {
138
+ return `${args.options.email} is not a valid email`;
139
+ }
140
+ if (args.options.outputFile && !fs.existsSync(path.dirname(args.options.outputFile))) {
141
+ return 'Specified path where to save the file does not exits';
142
+ }
143
+ return true;
144
+ });
145
+ }, _TeamsMeetingTranscriptGetCommand_initOptionSets = function _TeamsMeetingTranscriptGetCommand_initOptionSets() {
146
+ this.optionSets.push({
147
+ options: ['userId', 'userName', 'email'],
148
+ runsWhen: (args) => args.options.userId || args.options.userName || args.options.email
149
+ });
150
+ };
151
+ export default new TeamsMeetingTranscriptGetCommand();
152
+ //# sourceMappingURL=meeting-transcript-get.js.map
@@ -32,6 +32,7 @@ export default {
32
32
  MEETING_LIST: `${prefix} meeting list`,
33
33
  MEETING_ATTENDANCEREPORT_GET: `${prefix} meeting attendancereport get`,
34
34
  MEETING_ATTENDANCEREPORT_LIST: `${prefix} meeting attendancereport list`,
35
+ MEETING_TRANSCRIPT_GET: `${prefix} meeting transcript get`,
35
36
  MEETING_TRANSCRIPT_LIST: `${prefix} meeting transcript list`,
36
37
  MEMBERSETTINGS_LIST: `${prefix} membersettings list`,
37
38
  MEMBERSETTINGS_SET: `${prefix} membersettings set`,
@@ -0,0 +1,51 @@
1
+ import request from "../request.js";
2
+ export const driveUtil = {
3
+ /**
4
+ * Retrieves the Drive associated with the specified site and URL.
5
+ * @param siteId Site ID
6
+ * @param url Drive URL
7
+ * @returns The Drive associated with the drive URL.
8
+ */
9
+ async getDriveByUrl(siteId, url) {
10
+ const requestOptions = {
11
+ url: `https://graph.microsoft.com/v1.0/sites/${siteId}/drives?$select=webUrl,id`,
12
+ headers: {
13
+ accept: 'application/json;odata.metadata=none'
14
+ },
15
+ responseType: 'json'
16
+ };
17
+ const drives = await request.get(requestOptions);
18
+ const lowerCaseFolderUrl = url.href.toLowerCase();
19
+ const drive = drives.value
20
+ .sort((a, b) => b.webUrl.localeCompare(a.webUrl))
21
+ .find((d) => {
22
+ const driveUrl = d.webUrl.toLowerCase();
23
+ return lowerCaseFolderUrl.startsWith(driveUrl) &&
24
+ (driveUrl.length === lowerCaseFolderUrl.length ||
25
+ lowerCaseFolderUrl[driveUrl.length] === '/');
26
+ });
27
+ if (!drive) {
28
+ throw `Drive '${url.href}' not found`;
29
+ }
30
+ return drive;
31
+ },
32
+ /**
33
+ * Retrieves the ID of a drive item (file, folder, etc.) associated with the given drive and item URL.
34
+ * @param drive The Drive object containing the item
35
+ * @param itemUrl Item URL
36
+ * @returns Drive item ID
37
+ */
38
+ async getDriveItemId(drive, itemUrl) {
39
+ const relativeItemUrl = itemUrl.href.replace(new RegExp(`${drive.webUrl}`, 'i'), '').replace(/\/+$/, '');
40
+ const requestOptions = {
41
+ url: `https://graph.microsoft.com/v1.0/drives/${drive.id}/root${relativeItemUrl ? `:${relativeItemUrl}` : ''}?$select=id`,
42
+ headers: {
43
+ accept: 'application/json;odata.metadata=none'
44
+ },
45
+ responseType: 'json'
46
+ };
47
+ const driveItem = await request.get(requestOptions);
48
+ return driveItem?.id;
49
+ }
50
+ };
51
+ //# sourceMappingURL=driveUtil.js.map
@@ -9,13 +9,13 @@ Get the total storage used across all group mailboxes and group sites
9
9
  ## Usage
10
10
 
11
11
  ```sh
12
- m365 entra m365group report activitystorage [options]
12
+ m365 entra m365group report activitystorage [options]
13
13
  ```
14
14
 
15
15
  ## Alias
16
16
 
17
17
  ```sh
18
- m365 aad m365group report activitystorage [options]
18
+ m365 aad m365group report activitystorage [options]
19
19
  ```
20
20
 
21
21
  ## Options
@@ -0,0 +1,79 @@
1
+ import Global from '/docs/cmd/_global.mdx';
2
+
3
+ # file move
4
+
5
+ Moves a file to another location using the Microsoft Graph
6
+
7
+ ## Usage
8
+
9
+ ```sh
10
+ m365 file move [options]
11
+ ```
12
+
13
+ ## Options
14
+
15
+ ```md definition-list
16
+ `-u, --webUrl <webUrl>`
17
+ : The URL of the site where the file is located.
18
+
19
+ `-s, --sourceUrl <sourceUrl>`
20
+ : Server-relative or absolute URL of the file.
21
+
22
+ `-t, --targetUrl <targetUrl>`
23
+ : Server-relative or absolute URL of the location.
24
+
25
+ `--newName [newName]`
26
+ : New name of the destination file.
27
+
28
+ `--nameConflictBehavior [nameConflictBehavior]`
29
+ : Behavior when a document with the same name is already present at the destination. Possible values: `fail`, `replace`, `rename`. Default is `fail`.
30
+ ```
31
+
32
+ <Global />
33
+
34
+ ## Remarks
35
+
36
+ - If the source and target locations are within the same document library or drive, the command will utilize the Move DriveItem API, preserving the version history of the file.
37
+ - If the source and target locations are in different document libraries or drives, the command will use a copy-and-delete combination to move the file. Please note that in this case, version history will not be retained.
38
+
39
+ ## Examples
40
+
41
+ Move a file by server-relative URL to a folder in the same document library
42
+
43
+ ```sh
44
+ m365 file move --webUrl "https://contoso.sharepoint.com/sites/project" --sourceUrl "/sites/project/Shared Documents/Document.pdf" --targetUrl "/sites/project/Shared Documents/NewFolder"
45
+ ```
46
+
47
+ Move a file by server-relative URL to a document library in another site collection with server relative URL
48
+
49
+ ```sh
50
+ m365 file move --webUrl "https://contoso.sharepoint.com/sites/project" --sourceUrl "/sites/project/Shared Documents/Document.pdf" --targetUrl "/sites/IT/Shared Documents"
51
+ ```
52
+
53
+ Move a file by absolute URL to a document library in another site collection with absolute URL
54
+
55
+ ```sh
56
+ m365 file move --webUrl "https://contoso.sharepoint.com" --sourceUrl "https://contoso.sharepoint.com/Shared Documents/Document.pdf" --targetUrl "https://contoso.sharepoint.com/sites/IT/Shared Documents"
57
+ ```
58
+
59
+ Move a file to a document library in another site collection and rename the file
60
+
61
+ ```sh
62
+ m365 file move --webUrl "https://contoso.sharepoint.com" --sourceUrl "/Shared Documents/Document.pdf" --targetUrl "/sites/IT/Shared Documents" --newName "newName"
63
+ ```
64
+
65
+ Move a file to a document library in another site collection and rename the file if a file with the same name already exists.
66
+
67
+ ```sh
68
+ m365 file move --webUrl "https://contoso.sharepoint.com" --sourceUrl "/Shared Documents/Document.pdf" --targetUrl "/sites/IT/Shared Documents" --nameConflictBehavior rename
69
+ ```
70
+
71
+ Move a file to Onedrive for business
72
+
73
+ ```sh
74
+ m365 file move --webUrl "https://contoso.sharepoint.com" --sourceUrl "/Shared Documents/Document.pdf" --targetUrl "https://contoso-my.sharepoint.com/personal/john_contoso_onmicrosoft_com/documents"
75
+ ```
76
+
77
+ ## Response
78
+
79
+ The command won't return a response on success.
@@ -27,7 +27,7 @@ Using the `-t, --type` option you can choose whether you want to manage the sett
27
27
 
28
28
  :::info
29
29
 
30
- To use this command you have to have permissions to access the tenant admin site.
30
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
31
31
 
32
32
  :::
33
33
 
@@ -28,7 +28,7 @@ Using the `-t, --type` option you can choose whether you want to manage the sett
28
28
 
29
29
  :::info
30
30
 
31
- To use this command you have to have permissions to access the tenant admin site.
31
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
32
32
 
33
33
  :::
34
34
 
@@ -27,7 +27,7 @@ Using the `-t, --type` option you can choose whether you want to manage the sett
27
27
 
28
28
  :::info
29
29
 
30
- To use this command you have to have permissions to access the tenant admin site.
30
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
31
31
 
32
32
  :::
33
33
 
@@ -31,7 +31,7 @@ Using the `-t, --type` option you can choose whether you want to manage the sett
31
31
 
32
32
  :::info
33
33
 
34
- To use this command you have to have permissions to access the tenant admin site.
34
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
35
35
 
36
36
  :::
37
37
 
@@ -27,7 +27,7 @@ Using the `-t, --cdnType` option you can choose whether you want to manage the s
27
27
 
28
28
  :::info
29
29
 
30
- To use this command you have to have permissions to access the tenant admin site.
30
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
31
31
 
32
32
  :::
33
33
 
@@ -31,7 +31,7 @@ Using the `-t, --cdnType` option you can choose whether you want to manage the s
31
31
 
32
32
  :::info
33
33
 
34
- To use this command you have to have permissions to access the tenant admin site.
34
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
35
35
 
36
36
  :::
37
37
 
@@ -37,7 +37,7 @@ m365 spo externaluser list [options]
37
37
 
38
38
  :::info
39
39
 
40
- To use this command you have to have permissions to access the tenant admin site.
40
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
41
41
 
42
42
  :::
43
43
 
@@ -20,7 +20,7 @@ m365 spo hidedefaultthemes get [options]
20
20
 
21
21
  :::info
22
22
 
23
- To use this command you have to have permissions to access the tenant admin site.
23
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
24
24
 
25
25
  :::
26
26
 
@@ -23,7 +23,7 @@ m365 spo hidedefaultthemes set [options]
23
23
 
24
24
  :::info
25
25
 
26
- To use this command you have to have permissions to access the tenant admin site.
26
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
27
27
 
28
28
  :::
29
29
 
@@ -25,7 +25,7 @@ m365 spo homesite remove [options]
25
25
 
26
26
  :::info
27
27
 
28
- To use this command you have to have permissions to access the tenant admin site.
28
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
29
29
 
30
30
  :::
31
31
 
@@ -20,7 +20,7 @@ m365 spo knowledgehub get [options]
20
20
 
21
21
  :::info
22
22
 
23
- To use this command you have to have permissions to access the tenant admin site.
23
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
24
24
 
25
25
  :::
26
26
 
@@ -25,7 +25,7 @@ m365 spo knowledgehub remove [options]
25
25
 
26
26
  :::info
27
27
 
28
- To use this command you have to have permissions to access the tenant admin site.
28
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
29
29
 
30
30
  :::
31
31
 
@@ -27,7 +27,7 @@ If the specified url doesn't refer to an existing site collection, you will get
27
27
 
28
28
  :::info
29
29
 
30
- To use this command you have to have permissions to access the tenant admin site.
30
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
31
31
 
32
32
  :::
33
33
 
@@ -32,7 +32,7 @@ m365 spo orgassetslibrary add [options]
32
32
 
33
33
  :::info
34
34
 
35
- To use this command you have to have permissions to access the tenant admin site.
35
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
36
36
 
37
37
  :::
38
38
 
@@ -20,7 +20,7 @@ m365 spo orgassetslibrary list [options]
20
20
 
21
21
  :::info
22
22
 
23
- To use this command you have to have permissions to access the tenant admin site.
23
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
24
24
 
25
25
  :::
26
26
 
@@ -28,7 +28,7 @@ m365 spo orgassetslibrary remove [options]
28
28
 
29
29
  :::info
30
30
 
31
- To use this command you have to have permissions to access the tenant admin site.
31
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
32
32
 
33
33
  :::
34
34
 
@@ -20,7 +20,7 @@ m365 spo orgnewssite list [options]
20
20
 
21
21
  :::info
22
22
 
23
- To use this command you have to have permissions to access the tenant admin site.
23
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
24
24
 
25
25
  :::
26
26
 
@@ -26,7 +26,7 @@ m365 spo orgnewssite remove [options]
26
26
 
27
27
  :::info
28
28
 
29
- To use this command you have to have permissions to access the tenant admin site.
29
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
30
30
 
31
31
  :::
32
32
 
@@ -25,7 +25,7 @@ Using the `-u, --url` option you can specify which site to add to the list of or
25
25
 
26
26
  :::info
27
27
 
28
- To use this command you have to have permissions to access the tenant admin site.
28
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
29
29
 
30
30
  :::
31
31
 
@@ -9,7 +9,7 @@ Adds a user or group as a site collection administrator
9
9
  ## Usage
10
10
 
11
11
  ```sh
12
- m365 spo site admin add [options]
12
+ m365 spo site admin add [options]
13
13
  ```
14
14
 
15
15
  ## Options
@@ -64,4 +64,4 @@ m365 spo site admin add --siteUrl https://contoso.sharepoint.com --groupName SP_
64
64
  ```
65
65
  ## Response
66
66
 
67
- The command won't return a response on success.
67
+ The command won't return a response on success.
@@ -0,0 +1,67 @@
1
+ import Global from '/docs/cmd/_global.mdx';
2
+ import Tabs from '@theme/Tabs';
3
+ import TabItem from '@theme/TabItem';
4
+
5
+ # spo site admin remove
6
+
7
+ Removes a user or group as site collection administrator
8
+
9
+ ## Usage
10
+
11
+ ```sh
12
+ m365 spo site admin remove [options]
13
+ ```
14
+
15
+ ## Options
16
+
17
+ ```md definition-list
18
+ `-u, --siteUrl <siteUrl>`
19
+ : The URL of the SharePoint site
20
+
21
+ `--userId [userId]`
22
+ : The ID of the user to remove as a site collection admin
23
+
24
+ `--userName [userName]`
25
+ : The user principal name of the user to remove as a site collection admin
26
+
27
+ `--groupId [groupId]`
28
+ : The ID of the Microsoft Entra ID group to remove as a site collection admin
29
+
30
+ `--groupName [groupName]`
31
+ : The name of the Microsoft Entra ID group to remove as a site collection admin
32
+
33
+ `--asAdmin`
34
+ : If specified, we will use the SharePoint admin center to execute the command
35
+
36
+ `-f, --force`
37
+ : Don't prompt for confirmation
38
+ ```
39
+
40
+ <Global />
41
+
42
+ ## Remarks
43
+
44
+ :::info
45
+
46
+ To use this command with the `--asAdmin` mode, you have to have permissions to access the tenant admin site.
47
+
48
+ Without this parameter, you have to have site collection admin permissions for the requested site.
49
+
50
+ :::
51
+
52
+ ## Examples
53
+
54
+ Removes user as site collection admin
55
+
56
+ ```sh
57
+ m365 spo site admin remove --siteUrl https://contoso.sharepoint.com --userId 600713c5-53c6-4f24-b454-3c35e22b2639
58
+ ```
59
+
60
+ Removes group as site collection admin without prompting for confirmation as SharePoint Admin
61
+
62
+ ```sh
63
+ m365 spo site admin remove --siteUrl https://contoso.sharepoint.com --groupName SP_Administrators --force --asAdmin
64
+ ```
65
+ ## Response
66
+
67
+ The command won't return a response on success.
@@ -23,7 +23,7 @@ m365 spo site appcatalog add [options]
23
23
 
24
24
  :::info
25
25
 
26
- To use this command you have to have permissions to access the tenant admin site.
26
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
27
27
 
28
28
  :::
29
29
 
@@ -28,7 +28,7 @@ While the command uses the term *'remove'*, like its equivalent PowerShell cmdle
28
28
 
29
29
  :::info
30
30
 
31
- To use this command you have to have permissions to access the tenant admin site.
31
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
32
32
 
33
33
  :::
34
34
 
@@ -29,7 +29,7 @@ m365 spo site commsite enable [options]
29
29
 
30
30
  :::info
31
31
 
32
- To use this command you have to have permissions to access the tenant admin site.
32
+ To use this command you must be either **SharePoint Administrator** or **Global Administrator**.
33
33
 
34
34
  :::
35
35