Timezone
[SharePoint Online] – Modifier la Timezone sur une collection de sites
Bonjour à tous,
Aujourd’hui un script utile pour modifier la Timezone (fuseau horaire) sur l’ensemble des sites d’une collection sur SharePoint Online (Office 365). J’ai eu ce besoin suite à une migration d’un tenant O365 vers un autre tenant O365 hébergé sur une autre plaque (Europe vers Etats-Unis).
J’ai décidé ici d’utiliser le CSOM de SharePoint Online mais c’est tout à fait réalisable avec du Powershell ou en utilisant le Pattern & Practice (https://dev.office.com/patterns-and-practices).
Voici le script que j’ai utilisé (qui est sans doute perfectible et optimisable !).
Tout d’abord, il vous faudra installer les binaires Microsoft.SharePoint.Client.dll et Microsoft.SharePoint.Client.Runtime.dll via le setup : https://www.microsoft.com/en-US/download/details.aspx?id=35588 (à télécharger & installer donc). Ces dlls seront installées par défaut dans C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\.
Une fois ceci fait, vous pourrez les référencer dans votre script de cette manière :
add-type -Path 'C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.dll' add-type -Path 'C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.Runtime.dll'
Ensuite, j’initialise la connexion vers la collection de site que je souhaite mettre à jour (remplacer par vos valeurs ce qui est entre [ ]) :
$SiteCollectionUrl = "https://[MONTENANT].sharepoint.com/sites/[MACOLLECTIONDESITES]" $username = "[LOGIN]@[DOMAIN].com" $password = "[PASSWORD]"
Puis ensuite, on initialise le contexte :
function GetClientContext($SiteCollectionUrl, $username, $password) { $securePassword = ConvertTo-SecureString $password -AsPlainText -Force $context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteCollectionUrl) $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePassword) $context.Credentials = $credentials return $context }
Et enfin la fonction qui permet de mettre la Timezone à jour. Pour ma part, je la positionne sur la Timezone “(UTC) Dublin, Edinburgh, Lisbon, London”. Une petite recherche sur le net pour trouver votre zone… (http://blog.jussipalo.com/2013/10/list-of-sharepoint-timezoneid-values.html).
Cette fonction est récursive et permet d’itérer sur l’ensemble des sites de la collection :
function ProcessSites($subsiteurl){ $clientContext = GetClientContext $subsiteurl $username $password $rootWeb = $clientContext.Web $childWebs = $rootWeb.Webs $clientContext.Load($rootWeb) $clientContext.Load($childWebs) $clientContext.ExecuteQuery() write-host $rootWeb.url -ForegroundColor Yellow $TimeZones = $rootWeb.RegionalSettings.TimeZones $clientContext.Load($TimeZones) $clientContext.ExecuteQuery() $RegionalSettings = $rootWeb.RegionalSettings $clientContext.Load($RegionalSettings) $clientContext.ExecuteQuery() $TimeZone = $TimeZones| Where {$_.Description -eq "(UTC) Dublin, Edinburgh, Lisbon, London"} $TimeZone | Select ID,Description Write-Host "TimeZone " $TimeZone.Description -ForegroundColor Yellow $RegionalSettings.TimeZone = $TimeZone $RegionalSettings.Update() $rootWeb.Update() $clientContext.ExecuteQuery() foreach ($childWeb in $childWebs) { write-host $childWeb.url -ForegroundColor Yellow $clientContext.Load($childWeb) $clientContext.ExecuteQuery() $TimeZones = $childWeb.RegionalSettings.TimeZones $clientContext.Load($TimeZones) $clientContext.ExecuteQuery() $RegionalSettings = $childWeb.RegionalSettings $clientContext.Load($RegionalSettings) $clientContext.ExecuteQuery() $TimeZone = $TimeZones | Where {$_.Description -eq "(UTC) Dublin, Edinburgh, Lisbon, London"} $TimeZone | Select ID,Description Write-Host "TimeZone " $TimeZone.Description -ForegroundColor Yellow $RegionalSettings.TimeZone = $TimeZone $RegionalSettings.Update() $childWeb.Update() $clientContext.ExecuteQuery() Write-Host "Done :" $childWeb.Title "-" $TimeZone.ID ProcessSites $childWeb.url } } ProcessSites $SiteCollectionUrl
Il ne reste qu’à lancer dans Powershell ou Powershell ISE.