PowerShell を使用してモダン サイト ページに変換する
重要
SharePoint PnP モダン化は、PnP フレームワークの一部であり、継続的に進化しています。リリース ノートで常に最新の変更内容を確認してください。 問題が発生した場合は、「PnP フレームワークに関する GitHub の問題リスト」で問題を提出してください。
ページ変換エンジンは PowerShell からも使用できます。 このようにすると、ページ変換エンジンをサイト モダン化スクリプトに統合できます。このスクリプトは、ページ変換の他に、ソリューションのインストール、サイトの Microsoft 365 グループへの接続、テナントのブランド化の適用なども実行できます。 モダン化スクリプト全体の優れた例は、Microsoft 365 Group 接続に関する記事でご確認ください。
注:
以下のスクリプトは、ページを変換する方法を示します。 これには、PnP PowerShell バージョン 1.3.* (2021 年 2 月リリース) 以上が必要です。 追加のサンプル スクリプト (例: 発行ページの変換およびオンプレミスの 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 コマンドレットは、特定のページを最新化するためのキー コマンドレットです。 以下の表は、このコマンドレットでページ変換を制御するために使用できるコマンド ライン パラメーターを示しています。
パラメーター | 既定値 | サポート対象 | 説明 |
---|---|---|---|
ID (* ) |
すべてのページの種類 | Wiki ページ、Web パーツ ページおよび発行ページ、またはクラシック ブログ ページのブログ タイトルのページ名 (例: pageA.aspx)。 最初のブログ ページのタイトルが Identity で始まるクラシック ブログ ページの場合、別の方法としてページの ID (整数値) を指定することもできます。 |
|
ライブラリ | Wiki/Web パーツのページ | ページを保持するライブラリ。 Wiki またWeb パーツ ページが既定の SitePages ライブラリの外にある場合は、この -Library パラメーターを使用します。 |
|
Folder | Wiki ページ/Web パーツ ページ/発行ページ | 変換するページがフォルダー内にある場合、そのフォルダーを指定できます (例: -Folder "Folder1/SubFolder" )。 |
|
WebPartMappingFile | すべてのページの種類 | ページ変換はマッピング ファイルによって行われます。 このコマンドレットには、既定のマッピング ファイルが埋め込まれていますが、ページ変換のニーズに合わせて、カスタム Web パーツのマッピング ファイル (webpartmapping.xml ) を指定することもできます (たとえば、サード パーティのカスタム Web パーツに変換します)。 この処理を実行するには、-WebPartMappingFile パラメーターを使用してファイルのパスを指定します。 |
|
Overwrite | $false | すべてのページの種類 | -Overwrite を追加すると、ページ変換フレームワークは必要に応じてターゲット ページを上書きします。 既定では新しいページ名のプレフィックスが Migrated_ となります。つまり、Migrated_YourPage.aspx が既に存在する場合 (通常は以前のページ変換処理によって生じたもの) には上書きされます。 |
ReplaceHomePageWithDefault | $false | Wiki/Web パーツのページ | 既定の動作は、サイトのホームページを、他の通常ページと同様にモダン ページに変換することです。 -ReplaceHomeWithDefault を使用すると、サイトのホームページは '既定の' すぐに使用できるモダン ホームページ、つまりモダン チーム サイトを新たに作成した場合に得られるような状態になります。 |
TakeSourcePageName | $false | Wiki/Web パーツのページ | 既定の動作の場合、作成されたモダン ページの名前は Migrated_ というプレフィックスで始まり、元のページは既存名を保持します。 -TakeSourcePageName を指定すると、新しく作成されたページが元のページの名前に置き換わり、元のページの名前にはプレフィックス Previous_ が付きます。 元のページを指すすべてのリンクが新しいモダン ページを読み込むようになるため、このオプションは、モダン ページに移行することが確実な場合に設定します。 |
ClearCache | $false | すべてのページの種類 | パフォーマンスを最適化するため、特定のデータ (使用可能な最新の Web パーツのリスト、メタデータをコピーするためのフィールドの計算リストなど) が最初の実行後にキャッシュされます。 -ClearCache スイッチを使用しない限り、このキャッシュは完全な PowerShell セッション中に有効なままです。 PowerShell セッションを再起動すると、キャッシュもクリアされます。 |
SkipItemLevelPermissionCopyToClientSidePage | $false | すべてのページの種類 | 既定の項目レベルのアクセス権では、モダン ページにコピーされますので、これを防ぐには、-SkipItemLevelPermissionCopyToClientSidePage を使用します。 |
CopyPageMetadata | $false | Wiki ページ/Web パーツ ページ/ブログ ページ | 既定の動作では、ページのメタデータはコピーされません (したがって、サイト ページ ライブラリに列が追加されます)。 -CopyPageMetadata を指定すると、変換するページのカスタム メタデータ フィールドの値が、新しく作成したページにコピーされます。 また、2019 年 10 月リリース時点では、クロス サイト変換でページのメタデータのコピーが機能します。 |
TargetWebUrl (** ) |
クロス サイト変換 | 変換された最新のページを別のサイト コレクションに作成する場合は、その別のサイト コレクションの URL を指定します。 クロス サイト コレクション変換で変換される Web パーツについて理解するには、Web パーツの変換リストの記事を参照してください。 | |
TargetConnection (** ) |
クロス サイト変換 | Connection オブジェクトを使用して、より柔軟にターゲットを定義できます。 これにより、たとえば、オンプレミスからオンラインへ変換する、テナント間変換を実行できます。 | |
UseCommunityScriptEditor | $false | すべてのページの種類 | コミュニティ スクリプト エディターのインストールが完了していて変換中に使用する場合、-UseCommunityScriptEditor を使用してください。 詳細については、Web パーツの変換リストの記事を参照してください。 |
SummaryLinksToHtml | $false | すべてのページの種類 | QuickLinks Web パーツを使用した既定の変換の代わりに、SummaryLinks Web パーツをテキスト Web パーツでホストされる HTML に変換する場合は、-SummaryLinksToHtml を使用してください。 詳細については、Web パーツの変換リストの記事を参照してください。 |
LogType | なし | すべてのページの種類 | ログ記録を有効にするには -LogType を使用します。File はディスクにログを記録し、SharePoint は SharePoint SitePages ライブラリにログ ページを作成します。Console はコンソールにデータを出力します。 |
LogFolder | すべてのページの種類 | LogType が File に設定されている場合は、-LogFolder を使用してログを作成するフォルダーを指定できます。 |
|
LogVerbose | $false | すべてのページの種類 | 詳細ログを生成するには、-LogVerbose を使用します。 |
LogSkipFlush | $false | すべてのページの種類 | 既定では、各コマンドレットの呼び出しで一意のログ ファイルが生成されます。ログ エントリを蓄積するには、-LogSkipFlush パラメーターを使用します。 構築されたログ ファイルのエントリを保持するには、LogSkipFlush を使用せずに呼び出しで終了する必要があることに注意してください。 |
DontPublish | $false | すべてのページの種類 | 作成されたモダン ページを発行しないようにするには、-DontPublish オプションを使用します。 |
KeepPageCreationModificationInformation | $false | すべてのページの種類 | 作成者/編集者/作成済み/更新済みのページのプロパティを継承する場合は、-KeepPageCreationModificationInformation パラメーターを使用します。 このオプションは、ソース ページがモダン ページの対象となる宛先と同じ SPO テナントにある場合に機能します。 |
PostAsNews | $false | すべてのページの種類 | サイトのニュースとして作成済みのモダン ページを投稿する場合は、-PostAsNews パラメーターを使用します。 また、これは発行をスキップするよう構成されていても、ページが発行されることを意味します。 |
SetAuthorInPageHeader | $false | Wiki/webpart/blog ページ | 作成されたページのヘッダーに作成者を追加する場合は、-SetAuthorInPageHeader パラメーターを使用します。 作成者は (ユーザーにマップされた) ソース ページの作成者に設定されます。 |
DisablePageComments | $false | すべてのページの種類 | 作成されたページでコメント オプションを無効にする場合は、-DisablePageComments を使用します。 |
PublishingPage | $false | 発行ページ | 発行ページを変換している場合は、-PublishingPage パラメーターを設定します。 Wiki ページ、Web パーツ ページおよびクラシック ブログ ページの場合、このパラメーターは省略するか false に設定する必要があります。 |
PageLayoutMapping | 発行ページ | 発行ページで既定以外のページ レイアウトを使用している場合は、-PageLayoutMapping を介して、発行ページ変換に使用するページ レイアウト マッピング ファイルのパスを指定できます |
|
TargetPageName | Wiki ページ/Web パーツ ページ/ブログ ページ | -TargetPageName パラメーターを使用して、最新のページの既定の名前を上書きします。 これは、たとえば、従来のチーム サイトのホーム ページを最新のコミュニケーション サイトにクロス サイト変換する場合に、既存の home.aspx ページの上書きを防ぐために必要です。 |
|
PublishingTargetPageName | 発行ページ | -PublishingTargetPageName パラメーターを使用して、最新のページの名前を上書きする |
|
TargetPageFolder | すべてのページの種類 | -TargetPageFolder パラメーターを使用して、モダン ページのターゲット フォルダーを指定します。 フォルダーが自動的に作成された場合は (たとえば、追加の wiki ページライブラリからの変換中)、このパラメーターで指定したフォルダーが自動生成されたフォルダーと結合されます(-TargetPageFolderOverridesDefaultFolder を指定した場合を除く)。 フォルダーの入れ子構造を作成する場合は、MyFolder または MyFolder/SubFolder のようなフォルダーを指定できます。 値として <root> を指定すると、ターゲット サイトページ ライブラリのルートを対象にすることができます |
|
TargetPageFolderOverridesDefaultFolder | $false | すべてのページの種類 | -TargetPageFolderOverridesDefaultFolder パラメーターを使用して、自動的に作成されたフォルダーがあるかどうかに関係なく、ページの変換を強制的に-TargetPageFolder 経由で指定したフォルダーを使用することができます。 |
UrlMappingFile | クロス サイト変換 | カスタム URL マッピング定義を含むファイルを使用すると、既定の URL マッピング以外の操作を行うことができます。 詳細については、「URL マッピング」の記事を参照してください。 | |
SkipUrlRewriting | $false | クロス サイト変換 | ページ変換の発行中に、URL はターゲット サイト コレクションで有効になるように書き換えられますが、-SkipUrlRewriting を使用すると URL の書き換えを無効にできます。 詳細については、「URL マッピング」の記事を参照してください。 |
SkipDefaultUrlRewriting | クロス サイト変換 | カスタム URL マッピングを使用し、既定の URL 書き換えロジックを無効にしてから -SkipDefaultUrlRewriting パラメーターを設定する場合。 |
|
AddTableListImageAsImageWebPart | $true | すべてのページの種類 | テーブル/リスト内にある画像も、そのテーブル/リストの下に個別の画像 Web パーツとして作成されます。 -AddTableListImageAsImageWebPart パラメーターを使用して、それらの個別の画像 Web パーツの作成を停止します。 |
BlogPage | $false | ブログ ページ | 従来のブログ ページを変換している場合は、-BlogPage パラメーターを設定します。 Wiki ページ、Web パーツ ページおよび発行ページの場合、このパラメーターは省略するか false に設定する必要があります。 |
UserMappingFile | すべてのページの種類 | ユーザー マッピング情報が含まれているファイル。 詳細については、「ユーザー マッピング」の記事を参照してください。 | |
LDAPConnectionString | すべてのページの種類 | Active Directory にクエリを実行する LDAP 接続文字列。 詳細については、「ユーザー マッピング」の記事を参照してください。 | |
SkipUserMapping | $false | すべてのページの種類 | ユーザー マッピングをスキップします。 SPO 変換では、マッピング ファイルを指定しない限り、ユーザー マッピングはオフになります。このフラグが設定されている場合を除いで、オンプレミスの SharePoint ユーザー マッピングは常にオンになります。 詳細については、「ユーザー マッピング」の記事を参照してください。 |
TermMappingFile | クロス サイト変換 | カスタム 用語マッピング定義を含むファイルを使用すると、既定の用語マッピング以外の操作を行うことができます。 詳細については、「用語マッピング」の記事を参照してください。 | |
SkipTermStoreMapping | $false | クロス サイト変換 | ページ変換中に、ターゲット サイト コレクションで用語が有効になるようにマッピングされますが、-SkipTermStoreMapping パラメーターを使用すると 用語マッピングを無効にできます。 詳細については、「用語マッピング」の記事を参照してください。 |
(*
) 必須のコマンド ライン パラメーター/ (**
) -PublishingPage
または -BlogPage
パラメーターが設定されている場合は必須 (-TargetWebUrl
または -TargetConnection
のいずれか)
FAQ
発行ページの変換方法
上に表示されているサンプルは、若干異なる構文を必要とする発行ページを変換するインプレースのページ変換を示しています。 下に表示されているサンプルは、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 はオープン ソース ソリューションであり、アクティブなコミュニティでサポートが提供されています。 Microsoft からのオープン ソース ツールのサポート SLA はありません。
OOB ページ レイアウトのマッピング ファイルを生成する場合は、AnalyzeOOBPageLayouts
スイッチを指定します。
生成されたマッピング ファイルをチューニングする
作成されたマッピング ファイルを開き、各マッピングを確認します。
- Web パーツ、Web パーツ領域および固定 Web パーツの行と列の値を正しく設定して、コンテンツがモダン ページの正しい位置に表示されるようにします。 必要な数の行を含めることができ、各行はモダン ページ上のセクションになります。 列の値は 1、2、3 に制限され、モダン ページで使用可能な列のオプションに変換されます
- 変換する必要があるフィールドをメタデータとして定義する
- Web パーツに生成されたフィールドのマッピングを確認する
- ヘッダーに生成されたフィールドのマッピングを確認する
カスタム マッピング ファイルを使用する
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 のモダン バージョンを作成する方がしばしば簡単です。 これを実行するには、以下のスクリプトで示されているように、オンプレミス ポータルに接続するために SharePoint Online の PnP PowerShell を使用する必要があります:
# 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 バージョンが必要です
- オンプレミスの SharePoint server と SharePoint Online 環境の両方に接続する必要があるので、SharePoint Online の PnP PowerShell バージョンを使用することが重要です。
- このアプローチをテナント間でのページ変換に使用することもできます (必要な場合)。
ログ記録機能を使用する
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
サイトのルート (つまり、ライブラリの外) にあるページを変換する
一部の古いサイトでは、Web パーツがライブラリの外にある場合があります。 モダン化する場合は、下に示すように、ページがサイトのルートにあることを -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