Преобразование в современные страницы сайтов с помощью PowerShell
Важно!
Модернизация SharePoint PnP является частью платформы PnP и постоянно развивается. См. заметки о выпуске, чтобы быть в курсе последних изменений. Если у вас возникнут проблемы, внесите данные о них в список проблем в GitHub на платформе PnP.
Подсистему преобразования страниц также можно использовать из PowerShell. Благодаря этому ее можно интегрировать в сценарий модернизации сайта, который не только преобразует страницу, но также выполняет другие задачи, например установку решения, подключение сайта к группе Microsoft 365 и применение фирменной символики клиента. Хороший пример сценария комплексной модернизации можно найти в статье Подключение к группе Microsoft 365.
Примечание.
В приведенном ниже сценарии показано, как преобразовывать страницы. Для него требуется PnP PowerShell версии 1.3.* (февраль 2021 г.) или более поздней версии. Существуют дополнительные примеры скриптов (например, для преобразования страницы публикации, для преобразования из локальной среды SharePoint), доступные в нашем расположении скриптов GitHub.
<#
.Synopsis
Converts all classic wiki and web part pages in a site.
You need to install PnP PowerShell: https://pnp.github.io/powershell/
Sample includes:
- Conversion of wiki and web part pages
- Connecting to MFA or supplying credentials
- Includes Logging to File, log flushing into single log file
.Example
Convert-WikiAndWebPartPages.ps1 -SourceUrl "https://contoso.sharepoint.com/sites/classicteamsite" -TakeSourcePageName:$true
.Notes
Useful references:
- https://aka.ms/sppnp-pagetransformation
- https://aka.ms/sppnp-powershell
#>
[CmdletBinding()]
param (
[Parameter(Mandatory = $true, HelpMessage = "Url of the site containing the pages to modernize")]
[string]$SourceUrl,
[Parameter(Mandatory = $false, HelpMessage = "Modern page takes source page name")]
[bool]$TakeSourcePageName = $false,
[Parameter(Mandatory = $false, HelpMessage = "Supply credentials for multiple runs/sites")]
[PSCredential]$Credentials,
[Parameter(Mandatory = $false, HelpMessage = "Specify log file location, defaults to the same folder as the script is in")]
[string]$LogOutputFolder = $(Get-Location)
)
begin
{
Write-Host "Connecting to " $SourceUrl
if($Credentials)
{
Connect-PnPOnline -Url $SourceUrl -Credentials $Credentials
Start-Sleep -s 3
}
else
{
Connect-PnPOnline -Url $sourceUrl -Interactive
Start-Sleep -s 3
}
}
process
{
Write-Host "Ensure the modern page feature is enabled..." -ForegroundColor Green
Enable-PnPFeature -Identity "B6917CB1-93A0-4B97-A84D-7CF49975D4EC" -Scope Web -Force
Write-Host "Modernizing wiki and web part pages..." -ForegroundColor Green
# Get all the pages in the site pages library.
# Use paging (-PageSize parameter) to ensure the query works when there are more than 5000 items in the list
$pages = Get-PnPListItem -List sitepages -PageSize 500
Write-Host "Pages are fetched, let's start the modernization..." -ForegroundColor Green
Foreach($page in $pages)
{
$pageName = $page.FieldValues["FileLeafRef"]
if ($page.FieldValues["ClientSideApplicationId"] -eq "b6917cb1-93a0-4b97-a84d-7cf49975d4ec" )
{
Write-Host "Page " $page.FieldValues["FileLeafRef"] " is modern, no need to modernize it again" -ForegroundColor Yellow
}
else
{
Write-Host "Processing page $($pageName)" -ForegroundColor Cyan
# -TakeSourcePageName:
# The old pages will be renamed to Previous_<pagename>.aspx. If you want to
# keep the old page names as is then set the TakeSourcePageName to $false.
# You then will see the new modern page be named Migrated_<pagename>.aspx
# -Overwrite:
# Overwrites the target page (needed if you run the modernization multiple times)
# -LogVerbose:
# Add this switch to enable verbose logging if you want more details logged
# KeepPageCreationModificationInformation:
# Give the newly created page the same page author/editor/created/modified information
# as the original page. Remove this switch if you don't like that
# -CopyPageMetadata:
# Copies metadata of the original page to the created modern page. Remove this
# switch if you don't want to copy the page metadata
ConvertTo-PnPPage -Identity $page.FieldValues["ID"] `
-Overwrite `
-TakeSourcePageName:$TakeSourcePageName `
-LogType File `
-LogFolder $LogOutputFolder `
-LogSkipFlush `
-KeepPageCreationModificationInformation `
-CopyPageMetadata
}
}
# Write the logs to the folder
Write-Host "Writing the conversion log file..." -ForegroundColor Green
Save-PnPPageConversionLog
Write-Host "Wiki and web part page modernization complete! :)" -ForegroundColor Green
}
end
{
Disconnect-PnPOnline
}
Параметры командлета ConvertTo-PnPPage
Командлет ConvertTo-PnPPage — это ключевой командлет для модернизации данной страницы. В приведенной ниже таблице перечислены параметры командной строки, которые можно использовать для управления преобразованием страницы с помощью этого командлета.
Параметр | По умолчанию | Поддержка | Описание |
---|---|---|---|
Identity (* ) |
Все типы страниц | Имя страницы (например, pageA.aspx) для страниц вики-сайтов, веб-частей и страниц публикации или название блога для страниц классических блогов. В классических блогах используйте первую страницу, на которой название начинается с указанного параметра Identity , или укажите идентификатор (целое значение) страницы. |
|
Library | Страницы вики-сайтов или веб-частей | Библиотека, содержащая страницу. Используйте параметр -Library , если страница вики-сайта или веб-части находится за пределами стандартной библиотеки SitePages. |
|
Folder | Страницы вики-сайтов, веб-частей или страницы публикации | Если страница, которую требуется преобразовать, находится в папке, вы можете указать эту папку (например, -Folder "Folder1/SubFolder" ). |
|
WebPartMappingFile | Все типы страниц | Преобразование страницы управляется файлом сопоставления. Командлет содержит встроенный файл сопоставления по умолчанию, но можно также указать пользовательский файл сопоставления веб-части (webpartmapping.xml ), соответствующий требованиям преобразования страницы (например, преобразование для сторонних пользовательских веб-частей). Для этого нужно указать путь к файлу с помощью параметра -WebPartMappingFile . |
|
Overwrite | $false | Все типы страниц | Если вы добавляете параметр -Overwrite , платформа преобразования страниц будет при необходимости перезаписывать целевую страницу. По умолчанию в имени новой страницы используется префикс Migrated_, и затем подразумевается, что если файл Migrated_YourPage.aspx уже существует (обычно из предыдущей попытки преобразования страницы), он будет перезаписан. |
ReplaceHomePageWithDefault | $false | Страницы вики-сайтов или веб-частей | Действие по умолчанию состоит в преобразовании домашней страницы сайта в современную страницу аналогично любой другой обычной странице. При использовании параметра -ReplaceHomeWithDefault домашняя страница сайта будет преобразована в готовую современную домашнюю страницу "по умолчанию", аналогичную создаваемой для современного сайта группы. |
TakeSourcePageName | $false | Страницы вики-сайтов или веб-частей | Действие по умолчанию состоит в присвоении созданной современной странице имени, которое начинается с префикса Migrated_, с сохранением для исходной страницы существующего имени. Если задан параметр -TakeSourcePageName , созданной странице присваивается имя исходной страницы, а исходная страница переименовывается с помощью префикса Previous_. Задайте этот параметр, если вы уверены, что хотите продолжать работу с современной страницей, так как это приведет к тому, что все ссылки, указывающие на исходную страницу, станут указывать на загружаемую современную страницу. |
ClearCache | $false | Все типы страниц | Для оптимизации производительности определенные данные (например, список доступных современных веб-частей, вычисляемый список полей для копирования метаданных) кэшируются после первого выполнения. Этот кэш остается допустимым в течение всего сеанса PowerShell, если не используется параметр -ClearCache . Перезапуск сеанса PowerShell также удаляет кэш. |
SkipItemLevelPermissionCopyToClientSidePage | $false | Все типы страниц | По умолчанию разрешения на уровне элемента копируются на современную страницу. Чтобы избежать этого, используйте -SkipItemLevelPermissionCopyToClientSidePage . |
CopyPageMetadata | $false | Страницы вики-сайтов, веб-частей или блога | По умолчанию метаданные страницы не копируются (поэтому добавляются дополнительные столбцы в библиотеку страниц сайта). Если указан параметр -CopyPageMetadata , значения настраиваемых полей метаданных страницы, предназначенной для преобразования, копируются на созданную страницу. В выпуске за октябрь 2019 г. копия метаданных страницы также поддерживается при преобразованиях между сайтами. |
TargetWebUrl (** ) |
Преобразование между сайтами | Если нужно создать преобразованные современные страницы в другом семействе веб-сайтов, укажите URL-адрес другого семейства веб-сайтов. Общие сведения о том, какие веб-части преобразуются при выполнении преобразования между семействами веб-сайтов, см. в статье со списком преобразования веб-частей. | |
TargetConnection (** ) |
Преобразование между сайтами | Обеспечивает более гибкое определение целевого элемента с помощью объекта подключения. Это позволяет, к примеру, перейти из локального клиента в сетевой. | |
UseCommunityScriptEditor | $false | Все типы страниц | Используйте параметр -UseCommunityScriptEditor , если вы установили редактор скриптов сообщества и хотите использовать его во время преобразования. Дополнительные сведения см. в статье со списком преобразования веб-частей. |
SummaryLinksToHtml | $false | Все типы страниц | Используйте параметр -SummaryLinksToHtml , если нужно преобразовать веб-часть SummaryLinks в HTML-код, размещенный в веб-части "Текст", вместо преобразования по умолчанию с помощью веб-части QuickLinks. Дополнительные сведения см. в статье со списком преобразования веб-частей. |
LogType | Нет | Все типы страниц | Используйте параметр -LogType при включенном ведении журнала: File выполняет запись журнала на диск, SharePoint создает страницу журнала в библиотеке SitePages SharePoint, Console выводит данные на консоль. |
LogFolder | Все типы страниц | Если параметру LogType присвоено значение File , можно использовать -LogFolder , чтобы указать папку, где будет создан журнал. |
|
LogVerbose | $false | Все типы страниц | Используйте параметр -LogVerbose для создания подробного журнала. |
LogSkipFlush | $false | Все типы страниц | По умолчанию каждый вызов командлета создает уникальный файл журнала, и с помощью параметра -LogSkipFlush можно собирать записи журнала. Обратите внимание, что потребуется завершить вызов без параметра LogSkipFlush, чтобы сохранить собранные записи файла журнала. |
DontPublish | $false | Все типы страниц | Используйте параметр -DontPublish , чтобы не публиковать созданную современную страницу. |
KeepPageCreationModificationInformation | $false | Все типы страниц | Если нужно принять свойства "Автор", "Редактор", "Создано", "Изменено", используйте параметр -KeepPageCreationModificationInformation . Этот параметр поддерживается, только если исходная страница находится в том же клиенте SPO, что и конечное расположение современной страницы. |
PostAsNews | $false | Все типы страниц | Если нужно опубликовать созданную современную страницу в качестве новости на сайте, используйте параметр -PostAsNews . Это также означает, что страница будет опубликована, даже если вы настроили пропуск публикации. |
SetAuthorInPageHeader | $false | Страницы вики-сайтов, веб-частей или блога | Используйте параметр -SetAuthorInPageHeader , если вы хотите заполнить данные автора в заголовке созданной страницы. Автор будет задан как автор исходной страницы (сопоставленный пользователем). |
DisablePageComments | $false | Все типы страниц | Используйте параметр -DisablePageComments , если нужно отключить возможность комментирования на созданной странице |
PublishingPage | $false | Страницы публикации | Задайте параметр -PublishingPage , если выполняется преобразование страницы публикации. Для страниц вики-сайтов, веб-частей и страниц классических блогов этот параметр должен быть опущен или ему должно быть присвоено значение false. |
PageLayoutMapping | Страницы публикации | С помощью параметра -PageLayoutMapping можно указать путь к файлу сопоставления макетов страниц, который используется для преобразования страницы публикации, если для страницы публикации применяется нестандартный макет |
|
TargetPageName | Страницы вики-сайтов, веб-частей или блога | Используйте параметр -TargetPageName , чтобы переопределить имя по умолчанию для современной страницы. Это необходимо, например, чтобы предотвратить перезапись существующей страницы home.aspx, если выполняется межсайтовое преобразование классической домашней страницы сайта группы в современный информационный сайт. |
|
PublishingTargetPageName | Страницы публикации | Используйте параметр -PublishingTargetPageName , чтобы переопределить имя для современной страницы |
|
TargetPageFolder | Все типы страниц | Используйте параметр -TargetPageFolder , чтобы указать целевую папку для современной страницы. Обратите внимание, что при автоматическом создании папки (например, при преобразовании из дополнительной библиотеки вики-страниц) папка, определенная этим параметром, будет объединена с автоматически созданной папкой (если не указать -TargetPageFolderOverridesDefaultFolder ). Эту папку можно задать следующим образом: MyFolder или MyFolder/SubFolder , если необходимо создать вложенную структуру папки. Указание <root> в качестве значения позволяет выбрать корневую папку конечной библиотеки SitePages |
|
TargetPageFolderOverridesDefaultFolder | $false | Все типы страниц | Параметр -TargetPageFolderOverridesDefaultFolder позволяет использовать для преобразование страниц папку, указанную в -TargetPageFolder , независимо от того, существует ли автоматически созданная папка |
UrlMappingFile | Преобразование между сайтами | Файл с определениями пользовательских сопоставлений URL-адресов позволяет не только сопоставлять URL-адреса по умолчанию. Дополнительные сведения см. в статье Сопоставление URL-адресов. | |
SkipUrlRewriting | $false | Преобразование между сайтами | Во время преобразования страниц публикации URL-адреса перезаписываются в допустимый формат для целевого семейства веб-сайтов, но с помощью параметра -SkipUrlRewriting можно отключить перезапись URL-адресов. Дополнительные сведения см. в статье Сопоставление URL-адресов. |
SkipDefaultUrlRewriting | Преобразование между сайтами | Если используется пользовательское сопоставление URL-адресов и необходимо отключить стандартную логику переопределения URL-адресов, установите параметр -SkipDefaultUrlRewriting . |
|
AddTableListImageAsImageWebPart | $true | Все типы страниц | Изображения, находящиеся внутри таблицы или списка, также создавались как отдельные веб-части изображений под этой таблицей или списком. Чтобы прекратить создание этих отдельных веб-частей изображений, используйте параметр -AddTableListImageAsImageWebPart . |
BlogPage | $false | Страницы блога | Задайте параметр -BlogPage , если выполняется преобразование классической страницы блога. Для страниц вики-сайтов, веб-частей и страниц публикации этот параметр должен быть опущен или ему должно быть присвоено значение false. |
UserMappingFile | Все типы страниц | Файл со сведениями о сопоставлении пользователей. Дополнительные сведения см. в статье Сопоставление пользователей. | |
LDAPConnectionString | Все типы страниц | Строка подключения LDAP для запроса к Active Directory. Дополнительные сведения см. в статье Сопоставление пользователей. | |
SkipUserMapping | $false | Все типы страниц | Пропустить сопоставление пользователей. Для преобразований SPO сопоставление пользователей отключено, если вами не указан файл сопоставления. Для локальной версии SharePoint сопоставление всегда включено, если вами не установлен этот флажок. Дополнительные сведения см. в статье Сопоставление пользователей. |
TermMappingFile | Преобразование между сайтами | Файл с определениями пользовательских сопоставлений терминов позволяет не только сопоставлять термины по умолчанию. Дополнительные сведения см. в статье Сопоставление терминов. | |
SkipTermStoreMapping | $false | Преобразование между сайтами | Во время преобразования страниц термины сопоставляются в допустимом формате для целевого семейства веб-сайтов, но с помощью параметра -SkipTermStoreMapping можно отключить сопоставление терминов. Дополнительные сведения см. в статье Сопоставление терминов. |
(*
) Обязательный параметр командной строки / (**
) Обязательный, если задан параметр -PublishingPage
или -BlogPage
(-TargetWebUrl
или -TargetConnection
)
Вопросы и ответы
Как преобразовать страницы публикации
В примере выше показано преобразование страницы на месте. Для преобразования страниц публикации потребуется немного другой синтаксис. В примере ниже показано, как модернизировать страницу mypage.aspx и создать ее современную версию на информационном сайте. Во время этого преобразования страницы используется либо встроенное сопоставление макетов страниц, если для страницы применяется стандартный макет, либо сопоставление для пользовательских макетов страниц создается во время выполнения:
Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/portaltomodernize -Interactive
ConvertTo-PnPPage -PublishingPage -Identity mypage.aspx -Overwrite -TargetWebUrl https://contoso.sharepoint.com/sites/moderncommunicationsite
Если используются пользовательские макеты страниц, настоятельно рекомендуется отрегулировать используемый файл сопоставления макетов страниц перед его применением. Для этого выполните указанные ниже действия.
Создайте пользовательский файл сопоставления макетов страниц
С помощью PnP PowerShell проанализируйте существующие макеты страниц и создайте файл сопоставления:
Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/portaltomodernize -Interactive
Export-PnPPageMapping -CustomPageLayoutMapping -Folder c:\temp
Примечание.
PnP PowerShell — это решение с открытым исходным кодом, поддержка которого предоставляется активным сообществом. Для инструментов с открытым исходным кодом не существует соглашения об уровне обслуживания в отношении поддержки корпорацией Майкрософт.
Если вам нужно создать файлы сопоставления для стандартных макетов страниц, укажите параметр AnalyzeOOBPageLayouts
.
Настройка созданного файла сопоставления
Откройте созданный файл сопоставления и просмотрите каждое сопоставление:
- Правильно задайте значения строк и столбцов для веб-частей, зон веб-частей и фиксированных веб-частей, чтобы содержимое отображалось в правильном месте на современной странице. Можно использовать любое количество строк, каждая из которых представляет раздел на современной странице. Для столбцов могут использоваться только значения 1, 2 или 3, преобразуемые в возможные варианты столбцов на современной странице
- Определите поля, которые нужно преобразовать как метаданные
- Просмотрите созданные сопоставления полей с веб-частями
- Просмотрите созданные сопоставления полей с заголовками
Использование пользовательского файла сопоставления
Очищенный пользовательский файл сопоставления удобно использовать с помощью параметра PageLayoutMapping
:
Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/portaltomodernize -Interactive
ConvertTo-PnPPage -PublishingPage -Identity mypage.aspx -Overwrite -TargetWebUrl https://contoso.sharepoint.com/sites/moderncommunicationsite -PageLayoutMapping c:\temp\mypagelayouts.xml
Примеры скриптов для преобразования (локальных) страниц публикации в современные страницы в SharePoint Online
Чтобы приступить к работе, ознакомьтесь со скриптами на сайте https://github.com/SharePoint/sp-dev-modernization/tree/dev/Scripts/PageTransformation.
Чтение страницы публикации в локальной среде SharePoint и создание современной страницы в SharePoint Online
Если вы хотите сохранить классические локальные порталы публикаций, сначала переместите весь портал из локальной среды в классический портал в SharePoint Online, а затем модернизируйте его. Тем не менее, часто бывает удобнее просмотреть классические страницы публикации на локальном портале SharePoint и создавать современную версию в SharePoint Online. Для этого необходимо использовать PnP PowerShell для SharePoint Online, чтобы подключиться к локальному порталу, как показано в приведенном ниже скрипте.
# Setup connection the target site - must be SPO and must be a modern site
$target = Connect-PnPOnline https://contoso.sharepoint.com/sites/moderncommunicationsite -ReturnConnection
# Connect to your on-premises portal
$source = Connect-PnPOnline https://portal2013.pnp.com/sites/classicportal -TransformationOnPrem -CurrentCredentials -ReturnConnection
# Convert a classic page living in the on-premises portal to a modern page in SharePoint Online. Dependent images and videos are copied as well from on-premises to online during this process.
ConvertTo-PnPPage -Identity "page1.aspx" -PublishingPage -TargetConnection $target -LogVerbose -LogType File -LogFolder c:\temp -Connection $source
Примечание.
- Эта функция поддерживает SharePoint 2013, 2016 и 2019 в качестве исходной среды. Целевой средой всегда является SharePoint Online. Преобразование из SharePoint 2010 возможно, но для этого необходима устаревшая версия PnP PowerShell
- Компьютер, на котором выполняется сценарий PowerShell, должен быть в состоянии подключиться как к локальному серверу SharePoint, так и к среде SharePoint Online
- Этот подход также можно использовать для преобразования страниц в клиентах (если это имеет смысл)
Использование функций ведения журнала
Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/portaltomodernize -Interactive
# Convert a series of pages, logs are not yet written
ConvertTo-PnPPage -PublishingPage -Identity mypage.aspx -Overwrite -TargetWebUrl https://contoso.sharepoint.com/sites/moderncommunicationsite -LogSkipFlush -LogType SharePoint -LogVerbose
ConvertTo-PnPPage -PublishingPage -Identity mypage.aspx -Overwrite -TargetWebUrl https://contoso.sharepoint.com/sites/moderncommunicationsite -LogSkipFlush -LogType SharePoint -LogVerbose
# persist the log data from all previous page transformations to the defined log
Save-PnPPageConversionLog
Преобразование страниц, находящихся в корне сайта (за пределами библиотеки)
В некоторых старых сайтах страницы веб-частей могут храниться за пределами библиотеки. Если вам нужно модернизировать страницу, следует указать, что она хранится в корне сайта, с помощью параметра -Folder "<root>"
, как показано ниже.
Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/sitetomodernize -Interactive
ConvertTo-PnPPage -Identity pageinroot.aspx -Overwrite -Folder "<root>"
Современные страницы сайта не поддерживаются на сайте, на котором я хочу преобразовать страницы
По умолчанию современные страницы включены на большинстве сайтов, но эта функция может быть отключена. Вы можете узнать, на каких сайтах отключены современные страницы, используя сканер модернизации SharePoint. Чтобы исправить это, используйте приведенный ниже скрипт PnP PowerShell.
Connect-PnPOnline -Url "<your web url>" -Interactive
# Enable modern page feature
Enable-PnPFeature -Identity "B6917CB1-93A0-4B97-A84D-7CF49975D4EC" -Scope Web