Forum Discussion
Script to mass disable sync for Office 365 Groups
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 ?
I took a stab at this using the scripts already created by jcgonzalezmartin 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.