Jan 28 2017 12:13 PM
A customer of mine wants to disable sync for all Groups doclibs.
AFAIK there is not a global setting for this.
I know that it is possible to do it manually for every single doclib in the advanced library settings, but such approach is impractical for hundreds of Groups.
Can someone point me to an existing script for doing it for all Groups in a tenant?
TIA.
cc @Juan Carlos González Martín @Santhosh Balakrishnan @Tony Redmond
Jan 30 2017 04:38 AM
Nevertheless, my question still remains unanswered...
I will try to be more clear.
We know the following facts:
All this said, if we want to hide the sync button in all "user" libraries by means of a script, and we select the libraries on the basis of template ID 101, we will (try to) hide the sync button also in the "system" document libraries (point 2) and not only in the "user" document libraries (point 1 and point 3).
My question is: is this safe?
(Of course in the script I can select the "user" document libraries "by name", but while this is easily feasible for the "main" one (point 1 above), it is instead difficult for the others (point 3 above))...
Jan 30 2017 04:49 AM
I guess I need more context. I do not think that the "system" document libraries are used by Office 365 Groups - unless someone can shed more light on this topic. If that is the case, then it might not be important if synchronization was disabled for these libraries. Do users ever synchronize them anyway?
Jan 30 2017 05:00 AM
My feeling is that it is not important if synchronization is disabled for these "system" libraries (and anyway users never synchronize them, I think), but I would like to have an "authoritative" answer...
Jan 30 2017 05:03 AM
I can't think of why a user would want or attempt to synchronize these libraries...
Jan 30 2017 05:22 AM
Jan 30 2017 05:41 AM
Should that comment be "users sometimes do silly things"?
Never mind...
Feb 05 2017 03:31 AM
Hi Juan,
I have read the posts here a few times, but are still not sure that this will solve what i am trying to do.
I am basicly looking for a scriptet solution that does the same as opening site settings for a single SPO site or O365 group, going into "Search and offline availability" and select no to "Specify whether this site should be available for offline clients".
Can i use your Csom script for this ?
Feb 05 2017 05:23 AM
Feb 06 2017 08:59 AM - edited Feb 06 2017 11:00 AM
I took a stab at this using the scripts already created by @Juan Carlos González Martín and @Brent Ellis along with the site iteration scripts here. This will set the Offline Client Availability at the web level initially for the site you enter and give you the option to do all subsites (I edited the original to include all levels of subsites based on this super handy script here and not just level 1). I tested this on Group and Classic sites. It certainly could be cleaned up a bit and be enhanced to support things like .csv input and probably overall more optimized.
Add-Type -Path "C:\temp\microsoft.sharepointonline.csom.16.1.6008.1200\lib\net45\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\temp\microsoft.sharepointonline.csom.16.1.6008.1200\lib\net45\Microsoft.SharePoint.Client.runtime.dll" $siteUrl = Read-Host -Prompt "Enter Site Collection URL" $username = Read-Host -Prompt “Enter username” $password = Read-Host -Prompt “Enter password” -AsSecureString $subwebcheck = Read-Host -Prompt "Do you want to process subsites? (Y/N)" # Generate ClientContext function so we can reuse function GetClientContext($siteurl, $username, $password) { $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($siteurl) $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password) $ctx.Credentials = $credentials return $ctx } $ctx = GetClientContext $siteurl $username $password if ($ctx.ServerObjectIsNull.Value) { Write-Host "Unable to connect to: '$siteUrl'" -ForegroundColor Red } else { Write-Host "Connected to: '$($siteUrl)'" -ForegroundColor Green $rootWeb = $ctx.Web $ctx.Load($rootWeb) $ctx.ExecuteQuery() # update root site Write-Host $rootWeb.Url "is being updated to exclude from offline clients" $rootWeb.ExcludeFromOfflineClient=$true $rootWeb.Update() $ctx.Load($rootWeb) $ctx.ExecuteQuery() Write-Host "ExcludeFromOfflineClient is now" $rootWeb.ExcludeFromOfflineClient "for the site:" $rootWeb.Url -ForegroundColor Green if ($subwebcheck -eq "Y") { # work with subsites Write-Host "Processing subsites..." -ForegroundColor Yellow $childWebs = $rootWeb.Webs $ctx.Load($childWebs) $ctx.ExecuteQuery() foreach ($childWeb in $childWebs) { processsubsites $childWeb.url } } # function to loop through subsites and setting values function processsubsites ($siteurl){ $ctx = GetClientContext $siteurl $username $password $rootWeb = $ctx.Web $childWebs = $rootWeb.Webs $ctx.Load($rootWeb) $ctx.Load($childWebs) $ctx.ExecuteQuery() # perform update if($rootWeb.WebTemplate -ne "APP"){ Write-Host $rootWeb.Url "is being updated to exclude from offline clients" $rootWeb.ExcludeFromOfflineClient=$true $rootWeb.Update() $ctx.Load($rootWeb) $ctx.ExecuteQuery() Write-Host "ExcludeFromOfflineClient is now" $rootWeb.ExcludeFromOfflineClient "for the site:" $rootWeb.Url -ForegroundColor Green } # loop subsites of subsites foreach ($childWeb in $childWebs) { processsubsites $childWeb.url } } }
To note, Setting this property to true does not disable synchronization. Instead, it represents a recommendation to the client not to attempt synchronization. This info is pulled from here.
Feb 06 2017 11:48 PM
Thankyou so much Drew. This was spot on what i was looking for. Saved my day. Again, thanks a lot.
Nov 17 2017 05:01 AM
this script works very well for existing groups. But is it also possible to disable syncronization when creating a group? Otherwise you always have to switch something off afterwards