#function #powershell #locale #sharepoint-online
#функция #powershell #язык #sharepoint-online
Вопрос:
При создании нового сайта SPO в нашем клиенте сайт создается с правильным часовым поясом Великобритании, но для региона задан американский, что означает, что форматы даты, первый день недели и т. Д. Указаны в формате США. Это вызывает проблемы с загруженными туда файлами, содержащими даты и т. Д.
У меня есть PowerShell для изменения языка для каждого сайта:
Connect-PnPOnline https://tenant.sharepoint.com/sites/yoursite
$LocaleId = 2057 # UK
$TimeZoneId = 2 # London
$web = Get-PnPWeb -Includes RegionalSettings,RegionalSettings.TimeZones
$timeZone = $web.RegionalSettings.TimeZones | Where-Object {$_.Id -eq $TimeZoneId}
$web.RegionalSettings.LocaleId = $LocaleId
$web.RegionalSettings.TimeZone = $timeZone
$web.Update()
Invoke-PnPQuery
Этот код должен обновить отдельный сайт (еще не протестирован).
Я бы хотел, чтобы код перебирал все существующие сайты SharePoint и менял язык всех США на язык Великобритании в соответствии с приведенным выше кодом, а не на один сайт.
Каков наилучший способ сделать это? Или, может быть, преобразовать его в функцию из кода?
Любая помощь приветствуется.
Ответ №1:
Вы можете попробовать приведенный ниже сценарий для перебора всех сайтов и изменения языка
$LocaleId = 2057 # UK
$TimeZoneId = 2 # London
$credentials = Get-Credential
Connect-PnPOnline https://tenant.sharepoint.com/sites/yoursite -Credentials $credentials
$sites=Get-PnPTenantSite
foreach($site in $sites){
Connect-PnPOnline $site.Url -Credentials $credentials
$web = Get-PnPWeb -Includes RegionalSettings,RegionalSettings.TimeZones
$timeZone = $web.RegionalSettings.TimeZones | Where-Object {$_.Id -eq $TimeZoneId}
$web.RegionalSettings.LocaleId = $LocaleId
$web.RegionalSettings.TimeZone = $timeZone
$web.Update()
Invoke-PnPQuery
}
Комментарии:
1. Спасибо @Michel Han_MSFT! Просто для уточнения — Строка 4 — подключаюсь ли я к сайту администратора SP — т.е. tenant-admin.sharepoint.com , а не конкретный сайт? Я рассматривал что-то вроде $SitesCollection = Get-SPOSite -Ограничить ВСЕ, но кажется, что $sites = Get-PnPTenantSite может быть лучше… Еще раз спасибо!
2. Вы можете подключиться к любому сайту, команда $sites=Get-PnPTenantSite вернет все семейства сайтов. И если мой ответ вам поможет, пожалуйста, примите его.
3. Привет, Майкл. Спасибо — сценарий сработал. Проблема в том, что на сайтах OneDrive появилось сообщение «Доступ запрещен». Итак, я подумал вставить строку, чтобы добавить свою учетную запись в качестве дополнительного администратора, запустить ваш скрипт для изменения языка и, когда все сайты (включая сайты OneDrive) будут обновлены, добавить строку, чтобы удалить мою учетную запись в качестве дополнительного администратора. Что-то: $adminAcctToAdd = «user.mane@domain.com » Set-супруг -Сайт $Web.PersonalUrl -Имя входа в систему $adminAcctToAdd -IsSiteCollectionAdmin $true … ваш сценарий.. Set-SPOUser -Site $url.PersonalUrl -LoginName $adminAcctToRemove -IsSiteCollectionAdmin $false Любая помощь, пожалуйста?