Forum Discussion

HaroldvandeKamp's avatar
HaroldvandeKamp
Bronze Contributor
Oct 05, 2016

Changing the "Allow members to share" SharePoint site Access Requests setting using Office Dev PnP

How can I set the "Allow members to share the site and individual files and folders" setting using the Office Dev PnP Provisioning Engine or PowerShell commands? I haven't found this specific setting in the commands.

 

I mean changing the following setting(s) by PowerShell / remote provisioning:

13 Replies

  • Justin-GOV's avatar
    Justin-GOV
    Copper Contributor

    Also an option:

    Connect-PnPOnline -ClientId "<your Azure App Registration Client ID>" -Thumbprint "<your certificate thumbprint>" -Url "<your site URL>" -Tenant "<your Tenant name>.onmicrosoft.com"
    $membersGroupID = (Get-PnPGroup -AssociatedMemberGroup).id
    Set-PnPGroup -Identity $membersGroupID -AllowMembersEditMembership $false

  • Andrew Hawkins's avatar
    Andrew Hawkins
    Copper Contributor

    I ran into this same problem. Try this:

     

    $web = Get-PnPWeb -Includes MembersCanShare, AssociatedMemberGroup.AllowMembersEditMembership

    $web.MembersCanShare=$false

    $web.AssociatedMemberGroup.AllowMembersEditMembership=$false

    $web.AssociatedMemberGroup.Update()

    $web.RequestAccessEmail = $null

    $web.Update()

    $web.Context.ExecuteQuery()

  • Mani Mehrabi's avatar
    Mani Mehrabi
    Copper Contributor

    For SharePoint online you can try this:

     

    Connect-PnPOnline -url https://contoso.sharepoint.com/sites/test

    Set-PnPRequestAccessEmails -Emails " "

    • Damien Flood's avatar
      Damien Flood
      Iron Contributor

      Mani Mehrabi Thanks! I have tried the suggested but it does not work. In the Access Request Settings it seems MS has also added a new radio button for choosing either email or the Site owners.

  • SanthoshB1's avatar
    SanthoshB1
    Bronze Contributor

    You can use this script. You need to install CSOM module Version 16.1.4727.1200 and above to use this. 

     

    $SiteUrl = "https://<TenantName>.sharepoint.com/sites/<Sitename>"  
    $UserName = "admin@<TenantName>..onmicrosoft.com"  
    $Password ="password"
    $loadInfo1 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") 
    $loadInfo2 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")
    $loadInfo3 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.UserProfiles")
    #$sstr = ConvertTo-SecureString -string $AdminPass -AsPlainText -Force
    $Securepass = ConvertTo-SecureString $Password -AsPlainText -Force
    $context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl)
    $context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName,$Securepass)
    $Web = $context.Web
    $AllProperties=$Web.AllProperties
    $context.Load($Web)
    $context.Load($AllProperties)
    $context.ExecuteQuery()
    $Web.MembersCanShare=$false
    $web.Update();
    $web.Context.ExecuteQuery()
    $AssociatedMember=$web.AssociatedMemberGroup
    $context.Load($AssociatedMember)
    $context.ExecuteQuery()
    $web.AssociatedMemberGroup.AllowMembersEditMembership = $false
    $web.AssociatedMemberGroup.Update();
    $web.Context.ExecuteQuery() 
    • Anonymous's avatar
      Anonymous

      I created a extention for that:

        try
                      {
                          Web rootweb = ctx.Site.RootWeb;
                          ctx.Load(rootweb, w => w.MembersCanShare);
                          ctx.ExecuteQueryRetry();
                          SharingConfiguration sharingSettings = configurationData.ToConfigObject<SharingConfiguration>();
                          // Set MembersCanShare, default to false
      
                          rootweb.MembersCanShare = sharingSettings.Sharing.MembersCanShare ? sharingSettings.Sharing.MembersCanShare : false;
                          rootweb.Update();
                          ctx.Load(rootweb, w => w.AssociatedMemberGroup.AllowMembersEditMembership);
                          ctx.ExecuteQueryRetry();
      
                          // Set AllowMembersEditMembership, default to false
                          rootweb.AssociatedMemberGroup.AllowMembersEditMembership = sharingSettings.Sharing.AllowMembersEditMembership ? sharingSettings.Sharing.AllowMembersEditMembership : false;
                          rootweb.AssociatedMemberGroup.Update();
                          ctx.ExecuteQueryRetry();
      
                          ctx.Load(rootweb, w => w.RequestAccessEmail);
                          ctx.ExecuteQueryRetry();
      
                          rootweb.RequestAccessEmail = sharingSettings.Sharing.RequestAccessEmail;
                          rootweb.Update();
                          ctx.ExecuteQueryRetry();
                      }
                      catch (Exception ex)
                      {
                          TraceHelper.WriteErrorToListener("LogFile", ex.Message);
                      }
      • Nigel Price's avatar
        Nigel Price
        Iron Contributor

        Is this for SharePoint On-Line or SharePoint On-Premises ? Or Both ?

  • Torill S's avatar
    Torill S
    Copper Contributor

    Hello Harold, 

     

    Are you using SPO? This url might point you in the right direction regarding changing the setting programatically for SharePoint online: 

    https://blogs.msdn.microsoft.com/chandru/2015/12/31/sharepoint-onlinecsom-change-access-requests-settings/ (there is a comment with a suggestion to how this can be removed with powershell)

     

    I have just started looking into this, so haven't tested this myself yet. 


    Let me know when you find a way to have this setting un-checked during site provisioning with PnP Provisioning Engine, as I am currently searching for that myself.

     

Resources