[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.
1 March 2018 at 12:31
Bonjour,
J’ai un souci car mon tenant O365 a été configuré sur la région “Canada”. Tous mes sites SharePoint son par défaut avec le fuseau horaire du canada, du coup c’est pénible notamment pour l’historique des versions.
Ce script dont vous parlez pourrait me redéfinir le fuseau horaire pour tous mes sites SharePoint ?
Merci
2 March 2018 at 08:37
Bonjour.
Oui tout à fait. Il faut d’abord tester sur un site avant de généraliser.
Bonne journée,
Florent.
2 March 2018 at 12:06
pur tester que sur un site au départ, je mets ici l’adresse du site directement
$SiteCollectionUrl = “https://[MONTENANT].sharepoint.com/sites/[MACOLLECTIONDESITES]”
2 March 2018 at 14:46
C’est bien ca.