Introducing the SharePoint Success Site – Drive adoption and get the most out of SharePoint

Introducing the SharePoint Success Site – Drive adoption and get the most out of SharePoint

Am a keen follower of Microsoft's SharePoint Blog and proud to provide this direct from the Microsoft Tech Community:

To help our customers drive adoption and get the most out of SharePoint, we are launching the new SharePoint Success Site. The SharePoint Success Site is a ready to deploy and customizable SharePoint communication site that helps your colleagues create high-impact sites to meet the goals of your organization. The SharePoint Success Site builds on the power of Microsoft 365 learning pathways which allows you to train end users via Microsoft-maintained playlists and custom playlists you create.

 

To help your colleagues get the most out of SharePoint, the SharePoint Success Site comes pre-populated with site creation inspiration and training on how to create high quality and purposeful SharePoint sites. The SharePoint Success Site is not just about creating high impact sites – organizations need users to meet their responsibilities as site owners and to adhere to your organization’s policies on how SharePoint is to be used. The SharePoint Success Site includes a page dedicated to site creation and usage policies that should be customized to fit the needs of your organization.

 

SSS-responsive_1920x1080 (2).jpg

The SharePoint Success Site brings together all the critical elements that site owners need to know to create amazing SharePoint sites. Provision the SharePoint Success Site in your tenant to:

 

  • Get more out of SharePoint – Help people understand the ways to work with SharePoint to achieve business goals. Then, show users how to utilize the power behind SharePoint’s collaboration capabilities with step-by-step guidance.
  • Enable Site owners to create high-impact sites – Ensure Site owners have the right information and support to create purposeful sites that are widely adopted by the intended audience.
  • Ensure Site owners follow site ownership policies – Customize the site creation and usage policies page in your SharePoint Success Site to ensure sites created in your organization are compliant with your policies.
  • Provide the most up-to-date content – Equip Site owners with SharePoint training content that is maintained by Microsoft and published as SharePoint evolves.

What’s included?

To help accelerate your implementation of a SharePoint Success Site in your tenant the following highlights just some of the features included:

 

  • A fully configured and customizable site owner SharePoint Communication Site: The SharePoint Success Site is a SharePoint communication site that includes pre-populated pages, pre-configured training, web parts, and site navigation. The site can be customized to incorporate your organization’s existing branding, support, and training content.
  • Microsoft maintained SharePoint training content feed: The SharePoint Success Site’s up-to-date content feed includes a range of content that helps new users and existing Site owners plan, build, and manage SharePoint sites.
  • Site inspiration: Content that helps users understand the different ways to leverage SharePoint to meet common business objectives.
  • Success stories: A success stories gallery to showcase internal SharePoint site success stories that inspire others in the organization.
  • Site creation guidelines: A starting point template to educate new Site owners about SharePoint site creation and usage policies for your organization. The customizable guidelines include suggested usage policy topics and questions to prompt consideration of usage policies within your organization.

SSS-desktop.jpg

 

Next steps

Learn more about the SharePoint Success Site. Provision the SharePoint Success Site to your tenant today and customize it to help your colleagues adopt SharePoint. Create custom learning paths to meet the unique needs of your environment. You can also create custom playlists by blending learning content from Microsoft’s online content catalog with your organization’s SharePoint specific process content. 

 

We hope the SharePoint Success Site helps you and your colleagues get the most out of SharePoint. Share your feedback and experience with us in the Driving Adoption forum in the Microsoft Technical Community.

 

Frequently asked questions (FAQs)

 

Question: What are the requirements for installing the SharePoint Success Site into my tenant environment?

 

Answer:

  • Ensure SharePoint Online is enabled in your environment.
  • The individual that will provision the SharePoint Success Site must be the global admin (formerly called the Tenant admin) of the target tenant for install.
  • The tenant where the site will be provisioned must have:

The above is kindly provided by the Microsoft Tech Community!

How to create Microsoft 365/O365 Group sites with Teams using Graph API.

How to create Microsoft 365/O365 Group sites with Teams using Graph API.

Am a keen follower of Microsoft's SharePoint Blog and proud to provide this direct from the Microsoft Tech Community:

Seems creating Microsoft 365/O365 Group sites via CSOM not working. If you try to use SharePoint Client Side Object Model(CSOM) you might run into following exception:

 

Microsoft.SharePoint.Client.ServerException
HResult=0x80131500
Message=The web template GROUP#0 is not available for sites on this tenant.
Source=Microsoft.SharePoint.Client.Runtime
StackTrace:
at Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream(Stream responseStream)
at Microsoft.SharePoint.Client.ClientRequest.ProcessResponse()
at Microsoft.SharePoint.Client.ClientRequest.ExecuteQueryToServer(ChunkStringBuilder sb)
at Microsoft.SharePoint.Client.ClientContext.ExecuteQuery()

 

 

We have to use Graph API and this sample should help get started. ROPC authentication is used. Delegated authentication should also work but not tested.

 

Setup Steps:
1] Setup Native App in AAD.
2] Copy the App Id as you will need to provide it later in the code.
3] Provide following Delegated Graph API permissions.

Groups.ReadWite.All, Directory.ReadWrite.All, openid, Team.Create, User.Read 
4] Grant Admin consent.
5] See screenshot below:

SPDev_Support_0-1606358317055.png

 

6] Sample C# code to Create Microsoft 365/O365 Group site with Teams:

 

 

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Collections.Generic;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Text;

namespace CreateGroupMultiGeo
{
class Program
{
static async Task Main(string[] args)
{
string clientId = “50168119-04dd-0000-0000-000000000000”;
string email = “someuser@spotenant.onmicrosoft.com”;
string passwordStr = “password”;

var req = new HttpRequestMessage(HttpMethod.Post, “https://login.microsoftonline.com/bc8dcd4c-0d60-0000-0000-000000000000/oauth2/token”)
{
Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
[“resource”] = “https://graph.microsoft.com”,
[“grant_type”] = “password”,
[“client_id”] = clientId,
[“username”] = email,
[“password”] = passwordStr,
[“scope”] = “openid”
})
};

HttpClient httpClient = new HttpClient();

var res = await httpClient.SendAsync(req);

string json = await res.Content.ReadAsStringAsync();

if (!res.IsSuccessStatusCode)
{
throw new Exception(“Failed to acquire token: ” + json);
}
var result = (JObject)JsonConvert.DeserializeObject(json);
//create a group

HttpClient httpClientGroup = new HttpClient();

httpClientGroup.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(“Bearer”, result.Value<string>(“access_token”));

// Create a string variable and get user input from the keyboard and store it in the variable
string grpName = “MultiGeoGraphAPIGrp1″;

string contentGroup = @”{
‘displayName’: ‘” + grpName + @”‘,”
+ @”‘groupTypes’: [‘Unified’],
‘mailEnabled’: true,
‘mailNickname’: ‘” + grpName + @”‘,”
+ @”‘securityEnabled’: false,
‘visibility’:’Public’,
‘preferredDataLocation’:’GBR’,
‘owners@odata.bind’: [‘https://graph.microsoft.com/v1.0/users/ecc0fc81-244b-0000-0000-000000000000’]
}”;

var httpContentGroup = new StringContent(contentGroup, Encoding.GetEncoding(“utf-8”), “application/json”);

var responseGroup = httpClientGroup.PostAsync(“https://graph.microsoft.com/v1.0/groups”, httpContentGroup).Result;

var content = await responseGroup.Content.ReadAsStringAsync();

dynamic grp = JsonConvert.DeserializeObject<object>(content);

Console.WriteLine(responseGroup.Content.ReadAsStringAsync().Result);

System.Threading.Thread.Sleep(3000);

//create a Team

HttpClient httpClientTeam = new HttpClient();

httpClientTeam.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(“Bearer”, result.Value<string>(“access_token”));

//create a team

string contentTeam = @”{
‘memberSettings’: {
‘allowCreateUpdateChannels’: true
},
‘messagingSettings’: {
‘allowUserEditMessages’: true,
‘allowUserDeleteMessages’: true
},
‘funSettings’: {
‘allowGiphy’: true,
‘giphyContentRating’: ‘strict’
}
}”;

var httpContentTeam = new StringContent(contentTeam, Encoding.GetEncoding(“utf-8”), “application/json”);

////Refere: https://docs.microsoft.com/en-us/graph/api/team-put-teams?view=graph-rest-1.0&tabs=http
var responseTeam = httpClientTeam.PutAsync(@”https://graph.microsoft.com/v1.0/groups/” + grp.id + @”/team”, httpContentTeam).Result;

Console.WriteLine(responseTeam.Content.ReadAsStringAsync().Result);

Console.ReadKey();
}
}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

The above is kindly provided by the Microsoft Tech Community!

How to create Microsoft 365/O365 Group sites with Teams using Graph API.

How to create Microsoft/O365 Group sites with Teams using Graph API.

Am a keen follower of Microsoft's SharePoint Blog and proud to provide this direct from the Microsoft Tech Community:

Seems creating Microsoft/O365 Group sites via CSOM not working. If you try to use SharePoint Client Side Object Model(CSOM) you might run into following exception:

Microsoft.SharePoint.Client.ServerException
HResult=0x80131500
Message=The web template GROUP#0 is not available for sites on this tenant.
Source=Microsoft.SharePoint.Client.Runtime
StackTrace:
at Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream(Stream responseStream)
at Microsoft.SharePoint.Client.ClientRequest.ProcessResponse()
at Microsoft.SharePoint.Client.ClientRequest.ExecuteQueryToServer(ChunkStringBuilder sb)
at Microsoft.SharePoint.Client.ClientContext.ExecuteQuery()

 

We have to use Graph API and this sample should help get started. ROPC authentication is used. Delegated authentication should also work but not tested.

 

Setup Steps:
1] Setup Native App in AAD.
2] Copy the App Id as you will need to provide it later in the code.
3] Provide following Delegated Graph API permissions.

Groups.ReadWite.All, Directory.ReadWrite.All, openid, Team.Create, User.Read 
4] Grant Admin consent.
5] See screenshot below:

SPDev_Support_0-1606358317055.png

 

6] Sample C# code to Create Microsoft/O365 Group site with Teams:

 

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Collections.Generic;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Text;

namespace CreateGroupMultiGeo
{
class Program
{
static async Task Main(string[] args)
{
string clientId = “50168119-04dd-0000-0000-000000000000”;
string email = “someuser@spotenant.onmicrosoft.com”;
string passwordStr = “password”;

var req = new HttpRequestMessage(HttpMethod.Post, “https://login.microsoftonline.com/bc8dcd4c-0d60-0000-0000-000000000000/oauth2/token”)
{
Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
[“resource”] = “https://graph.microsoft.com”,
[“grant_type”] = “password”,
[“client_id”] = clientId,
[“username”] = email,
[“password”] = passwordStr,
[“scope”] = “openid”
})
};

HttpClient httpClient = new HttpClient();

var res = await httpClient.SendAsync(req);

string json = await res.Content.ReadAsStringAsync();

if (!res.IsSuccessStatusCode)
{
throw new Exception(“Failed to acquire token: ” + json);
}
var result = (JObject)JsonConvert.DeserializeObject(json);
//create a group

HttpClient httpClientGroup = new HttpClient();

httpClientGroup.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(“Bearer”, result.Value<string>(“access_token”));

// Create a string variable and get user input from the keyboard and store it in the variable
string grpName = “MultiGeoGraphAPIGrp1″;

string contentGroup = @”{
‘displayName’: ‘” + grpName + @”‘,”
+ @”‘groupTypes’: [‘Unified’],
‘mailEnabled’: true,
‘mailNickname’: ‘” + grpName + @”‘,”
+ @”‘securityEnabled’: false,
‘visibility’:’Public’,
‘preferredDataLocation’:’GBR’,
‘owners@odata.bind’: [‘https://graph.microsoft.com/v1.0/users/ecc0fc81-244b-0000-0000-000000000000’]
}”;

var httpContentGroup = new StringContent(contentGroup, Encoding.GetEncoding(“utf-8”), “application/json”);

var responseGroup = httpClientGroup.PostAsync(“https://graph.microsoft.com/v1.0/groups”, httpContentGroup).Result;

var content = await responseGroup.Content.ReadAsStringAsync();

dynamic grp = JsonConvert.DeserializeObject<object>(content);

Console.WriteLine(responseGroup.Content.ReadAsStringAsync().Result);

System.Threading.Thread.Sleep(3000);

//create a Team

HttpClient httpClientTeam = new HttpClient();

httpClientTeam.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(“Bearer”, result.Value<string>(“access_token”));

//create a team

string contentTeam = @”{
‘memberSettings’: {
‘allowCreateUpdateChannels’: true
},
‘messagingSettings’: {
‘allowUserEditMessages’: true,
‘allowUserDeleteMessages’: true
},
‘funSettings’: {
‘allowGiphy’: true,
‘giphyContentRating’: ‘strict’
}
}”;

var httpContentTeam = new StringContent(contentTeam, Encoding.GetEncoding(“utf-8”), “application/json”);

////Refere: https://docs.microsoft.com/en-us/graph/api/team-put-teams?view=graph-rest-1.0&tabs=http
var responseTeam = httpClientTeam.PutAsync(@”https://graph.microsoft.com/v1.0/groups/” + grp.id + @”/team”, httpContentTeam).Result;

Console.WriteLine(responseTeam.Content.ReadAsStringAsync().Result);

Console.ReadKey();
}
}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

The above is kindly provided by the Microsoft Tech Community!

Microsoft 365 & SharePoint PnP Weekly – Episode 106

Microsoft 365 & SharePoint PnP Weekly – Episode 106

Am a keen follower of Microsoft's SharePoint Blog and proud to provide this direct from the Microsoft Tech Community:

pnp-weekly-episode-107-promo.png

 

In this installment of the weekly discussion revolving around the latest news and topics on Microsoft 365, hosts – Vesa Juvonen (Microsoft) | @vesajuvonen, Waldek Mastykarz (Microsoft) | , are joined by Business Apps MVP Serge Luca (a.k.a., Dr. Flow) (Power Platform Associates) | @sergeluca. 

 

Discussed in this session – Serge’s interest in Power Platform, growth in the number of available connectors – application integration, and data storage options.  As well, the need for more developer focused patterns and practices was called out.

 

Regarding data storage, the group more-or-less defined a decision tree.   There is product – CDS (free or paid), SQL/Azure, SharePoint, or Hybrid and there are other considerations – licensing, app types, security/permission requirements, data storage costs, and database management.   Finally, Serge gives viewers a quick tour of the workflow companion tool he has been developing called BPM.

 

This episode was recorded on Monday, November 23, 2020.

 

 

Did we miss your article? Please use #PnPWeekly hashtag in the Twitter for letting us know the content which you have created. 

 

As always, if you need help on an issue, want to share a discovery, or just want to say: “Job well done”, please reach out to Vesa, to Waldek or to your PnP Community.

 

Sharing is caring!

The above is kindly provided by the Microsoft Tech Community!

Microsoft 365 & SharePoint PnP Weekly – Episode 105

Microsoft 365 & SharePoint PnP Weekly – Episode 105

Am a keen follower of Microsoft's SharePoint Blog and proud to provide this direct from the Microsoft Tech Community:

pnp-weekly-105-promo.png

 

n this installment of the weekly discussion revolving around the latest news and topics on Microsoft 365, hosts – Vesa Juvonen (Microsoft) | @vesajuvonen, Waldek Mastykarz (Microsoft) | @waldekm, are joined by Alistair Pugin (Tangent Solutions) | @AlistairPugin – Head of Cloud Services based in South Africa.   

 

Since hearing about SharePoint Syntex recently during the monthly SharePoint Community call – November 2020, gain additional insights and perspective on Syntex during this call.   Enterprise Content Management (ECM) is dead, long live content services.   Syntex is ECM2.0.   What Power BI does for Structured Data, Cortex does for unstructured data.    Intelligence is built into unstructured data, now access it.    Also discussed:  Hybrid is an end state.  The intelligent intranet now supersized with Cortex, how AI supports Syntex and Teams is the centralized access point to everything.

 

This episode was recorded on Monday, November 16, 2020.

 

 

Did we miss your article? Please use #PnPWeekly hashtag in the Twitter for letting us know the content which you have created. 

 

As always, if you need help on an issue, want to share a discovery, or just want to say: “Job well done”, please reach out to Vesa, to Waldek or to your PnP Community.

 

Sharing is caring!

The above is kindly provided by the Microsoft Tech Community!

Microsoft 365 & SharePoint Community (PnP) – November 2020 update

Microsoft 365 & SharePoint Community (PnP) – November 2020 update

Am a keen follower of Microsoft's SharePoint Blog and proud to provide this direct from the Microsoft Tech Community:

nov-2020-update-summary-promo.png

 

Microsoft 365 & SharePoint Ecosystem (PnP) November 2020 update is out with a summary of the latest guidance, samples, and solutions from Microsoft or from the community for the community. This article is a summary of all the different areas and topics around the community work we do around Microsoft 365 and SharePoint ecosystem during the past month.

 

Thank you for being part of this initiative. Sharing is caring!

 

 

Got feedback, suggestions or ideas? – don’t hesitate to contact.

The above is kindly provided by the Microsoft Tech Community!

Microsoft 365 & SharePoint PnP Weekly – Episode 101

Microsoft 365 & SharePoint PnP Weekly – Episode 101

Am a keen follower of Microsoft's SharePoint Blog and proud to provide this direct from the Microsoft Tech Community:

pnp-weekly-episode-101-promo.png

 

In this 1st installment after the 100th installment of the weekly discussion revolving around the latest news and topics on Microsoft 365, hosts – Vesa Juvonen (Microsoft) | @vesajuvonen, Waldek Mastykarz (Microsoft) | @waldekm, are joined by Vincent Biret (Microsoft) |@baywet, MVP alum, blogger, and presently a software engineer on the Microsoft Graph SDK team.   

 

A number of topics were covered during today’s discussion – Program Management and Development at Microsoft, the advantage of being an SDK developer is working with Community and the elusive “inbox zero” including the novel approach identified by the cohort during this session to address. 

 

This episode was recorded on Monday, October 19, 2020.

 


Did we miss your article? Please use #PnPWeekly hashtag in the Twitter for letting us know the content which you have created. 

 

As always, if you need help on an issue, want to share a discovery, or just want to say: “Job well done”, please reach out to Vesa, to Waldek or to your PnP Community.

 

Sharing is caring!

The above is kindly provided by the Microsoft Tech Community!

Microsoft 365 & SharePoint PnP Weekly – Episode 100

Microsoft 365 & SharePoint PnP Weekly – Episode 100

Am a keen follower of Microsoft's SharePoint Blog and proud to provide this direct from the Microsoft Tech Community:

pnp-weekly-100-promo.jpg

 

In this weekly discussion of the latest news and topics around Microsoft 365, hosts – Vesa Juvonen (Microsoft) | @vesajuvonen, Waldek Mastykarz (Microsoft) | @waldekm, are joined by Sébastien Levert | @sebastienlevert – Office Apps and Services MVP and head of product at Valo Intranet.   

 

In this milestone Episode 100, Sébastien (Séb) interviews Vesa and Waldek asking questions submitted by community members covering the full gambit of why, what, how.  

 

This episode was recorded on Monday, October 12, 2020.

 

 

Did we miss your article? Please use #PnPWeekly hashtag in the Twitter for letting us know the content which you have created. 

 

As always, if you need help on an issue, want to share a discovery, or just want to say: “Job well done”, please reach out to Vesa, to Waldek or to your PnP Community.

 

Sharing is caring!

The above is kindly provided by the Microsoft Tech Community!

Microsoft 365 & SharePoint PnP Weekly – Episode 99

Microsoft 365 & SharePoint PnP Weekly – Episode 99

Am a keen follower of Microsoft's SharePoint Blog and proud to provide this direct from the Microsoft Tech Community:

pnp-weekly-99-promo.jpg

 

In this weekly discussion of latest news and topics around Microsoft 365, hosts – Vesa Juvonen (Microsoft) | @vesajuvonen, Waldek Mastykarz (Microsoft) | @waldekm, are joined by Christina Wheeler | @cwheeler76, a long time Office Apps and Services MVP and principal solutions architect for US-based Canviz.   

 

The discussion ranged from avoiding work burn-out and server management (go cloud!) to architecting solutions that draw upon capabilities across Microsoft 365 to Drone FAA 107 certification and of course many laughs between topics.  

 

This episode was recorded on Friday, October 2, 2020.

 


Did we miss your article? Please use #PnPWeekly hashtag in the Twitter for letting us know the content which you have created. 

 

As always, if you need help on an issue, want to share a discovery, or just want to say: “Job well done”, please reach out to Vesa, to Waldek or to your PnP Community.

 

Sharing is caring!

The above is kindly provided by the Microsoft Tech Community!

How to retrieve complete set of permission changes while utilizing DeltaLinks (tokens) in SPO?

How to retrieve complete set of permission changes while utilizing DeltaLinks (tokens) in SPO?

Am a keen follower of Microsoft's SharePoint Blog and proud to provide this direct from the Microsoft Tech Community:

Delta is, by default, a user-scoped API to drive sync-like behavior. It scopes its results down to the set of changes which are definitely impactful to the caller. It filters out changes which it knows are irrelevant to the caller. When the API cannot definitely determine relevance cheaply, e.g. when it needs to make a full permission enumeration to verify, it will include the result, even though it might not be relevant to the caller.

 

Delta attempts to scope permission-based changes to those relevant to the caller. If the caller’s access wasn’t altered by the permission change, the item may not be included in the delta results.

 

Clients which are trying to enumerate all permission changes should make sure the follow the recommendations in aka.ms/scanguidance. Namely, there are specific authentication requirements and specific Prefer headers that need to be provided, and failure to do so will result in permission changes being scoped down.

 

The only way to receive the complete set of changes is to use app-only authentication with the Sites.FullControl.All scope and pass header “Prefer”=”deltashowsharingchanges,hierarchicalsharing”.

 

Steps:

1] Create an App in AAD with Sites.FullControl.All Application permission, see screen shot below:

 

SPDev_Support_0-1601681126806.png

2] Sample powershell script to generate the Access token and the delta token link:

 

 

<#
Code Example Disclaimer:
Sample Code is provided for the purpose of illustration only and is not intended to be used in a production environment.
THIS SAMPLE CODE AND ANY RELATED INFORMATION ARE PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
We grant You a nonexclusive, royalty-free right to use and modify the Sample Code and to reproduce and distribute the object
code form of the Sample Code, provided that. You agree: (i) to not use Our name, logo, or trademarks to market Your software
product in which the Sample Code is embedded; (ii) to include a valid copyright notice on Your software product in which the
Sample Code is embedded; and (iii) to indemnify, hold harmless, and defend Us and Our suppliers from and against any claims or
lawsuits, including attorneys fees, that arise or result from the use or distribution of the Sample Code.
#>

cls

$host.Runspace.ThreadOptions = “ReuseThread”

Write-Host “STARTED at” (Get-Date).ToString() -f Green

$ClientID = “fa9737d5-5a3e-4fab-0000-000000000000”
$ClientSecret = “1JOe:M8HBBUz-0000000000000000000”
$scope= “https://graph.microsoft.com/.default”
$POSTURI = “https://login.microsoftonline.com/d6f932a7-5f74-0000-0000-000000000000/oauth2/v2.0/token”

$body = @{grant_type=”client_credentials”;client_id=$ClientID;client_secret=$ClientSecret;scope=$scope}

$oauth = Invoke-RestMethod -Method Post -Uri $POSTURI -Body $body

$graphAccessToken = $oauth.access_token

Write-Host “Access token: $($graphAccessToken)”

$requestHeader = @{

“Authorization” = “Bearer $graphAccessToken”
“Content-Type” = “application/json”
“Prefer” = “deltashowsharingchanges,hierarchicalsharing,deltatraversepermissiongaps,deltashowremovedasdeleted”
}

$Uri = “https://graph.microsoft.com/v1.0/sites/spotenant.sharepoint.com,df6ba610-b132-0000-0000-000000000000,e0dbcdc6-0637-4246-0000-000000000000/drive/root/delta?latest”

$Result = (Invoke-RestMethod -Method Get -Headers $requestheader -Uri $Uri)

$deltaUri = $Result.’@odata.deltaLink’

Write-Host $deltaUri
Write-Host “DONE at” (Get-Date).ToString() -f Green

 

 

 

3] Copy the Access token and the deltaUri value output from the above script and use them in the following sample powershell script to retrieve the complete set of permission changes:

 

 

<#
Code Example Disclaimer:
Sample Code is provided for the purpose of illustration only and is not intended to be used in a production environment.
THIS SAMPLE CODE AND ANY RELATED INFORMATION ARE PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
We grant You a nonexclusive, royalty-free right to use and modify the Sample Code and to reproduce and distribute the object
code form of the Sample Code, provided that. You agree: (i) to not use Our name, logo, or trademarks to market Your software
product in which the Sample Code is embedded; (ii) to include a valid copyright notice on Your software product in which the
Sample Code is embedded; and (iii) to indemnify, hold harmless, and defend Us and Our suppliers from and against any claims or
lawsuits, including attorneys fees, that arise or result from the use or distribution of the Sample Code.
#>

cls

$host.Runspace.ThreadOptions = “ReuseThread”

Write-Host “STARTED at” (Get-Date).ToString() -f Green

$graphAccessToken = “copied from output of above sample powershell script”

$requestHeader = @{
“Authorization” = “Bearer $graphAccessToken”
“Content-Type” = “application/json”
“Prefer” = “deltashowsharingchanges,hierarchicalsharing”
}

Write-Host

$deltaUri = “copied from output of above sample powershell script” #should look like sample below:
https://graph.microsoft.com/v1.0/sites/spotenant.sharepoint.com,df6ba610-b132-4fc7-0000-000000000000,e0dbcdc6-0637-4246-0000-000000000000/drive/root/delta?token=MzslMjM0OyUyMzE7Mzs3NDlhZjc4NC0zOWU0LTRlOTEtYmJkNy0wNzI5MjAxNTNlMGY7NjM3MzM2NDU1MzMyNDcwMDAwOzMxOTY4OTE4MjslMjM7JTIzOyUyMzA”

$deltaResult = (Invoke-RestMethod -Method Get -Headers $requestheader -Uri $deltaUri)

Write-Host $deltaResult.value
Write-Host

Write-Host “DONE at” (Get-Date).ToString() -f Green

 

 

 

 

The above is kindly provided by the Microsoft Tech Community!