SharePoint 2013 でのカスタム テンプレートによるサイト コレクションの作成を行う PowerShell スクリプトを作成しました。
- カスタム テンプレートによるサイト コレクション作成について
- Web UI での手順について
- PowerShell での作成について
SharePoint 2007 までは、予めカスタム テンプレートをファームに登録して、サイト コレクション作成時にそのテンプレートを選択出来ていました。
SharePoint 2010 でも古い形式のテンプレートであれば、Install-SPWebTemplate コマンドレットを使って、ファームに登録することが出来ましたが、SharePoint 2013 では、そもそも Install-SPWebTemplate コマンドレットが利用出来なくなっています。
Web UI からのサイト コレクション作成の場合は、テンプレートを指定しないでサイト コレクションを作成してから、ソリューション ギャラリーにテンプレートをアップロードして適用するというアプローチになります。
このアプローチは少々面倒ですよね。
そこで、PowerShell なら少しは手間が省けるかなと思った訳です。
今更ではありますが、サーバーの全体管理などの Web UI からの手順は以下のようになります。
ちなみに、SharePoint 2010 までは、実際に「空のサイト」というテンプレートがあったので紛らわしかったです。
英語では、「空のサイト」テンプレートを Blank Site、そして、テンプレートを指定しないサイトを Empty Site と呼んでいました。
サイト コレクション作成時には、「テンプレートの選択」にて、「ユーザー設定」タブの「< テンプレートを後で選択... >」を選択しておきます。
作成された結果のサイト コレクションにアクセスすると、引き続き、以下のようなサイト テンプレート選択のページが表示されますが、その下の「ソリューション ギャラリー」を選択します。
o
「ソリューション ギャラリー」のページにて、「ソリューションのアップロード」を選択します。
「ソリューションの追加」Web ダイアログにて、予め作成してダウンロードしてあるカスタム テンプレート (.wsp) ファイルを選択してアップロードを行います。
アップロードが終わると、続いて、「ソリューションのアクティブ化」Web ダイアログが表示されるので、「アクティブ化」を選択します。
これで、「ソリューション ギャラリー」に「アクティブ化」された状態のカスタム テンプレートが登録された状態となります。
もう一度、作成されたサイト コレクションの URL にアクセスして、「テンプレートの選択」で「ユーザー設定」タブを選択すると、登録したカスタム テンプレートが選択出来る状態となっています。
適用が終わると、無事にカスタム テンプレートに基づくサイト コレクションが出来上がります。
PowerShell でも、基本的には Web UI での操作と同等のことをコマンドレット、および、API を利用して行います。
最初に、テンプレートを指定せずに、サイトコレクションを作成します。
$site = New-SPSite -Url $Url -OwnerAlias $OwnerAlias -Name $Name
次に、ソリューション ギャラリーにカスタム テンプレートを追加して、アクティブ化を行います。
Add-SPUserSolution -LiteralPath $LiteralPath -Site $site.Url
$solution = Get-SPUserSolution -Site $site.Url
$solution = Install-SPUserSolution -Identity $solution.Name -Site $site.Url
最後に、サイト コレクションのトップレベル サイトに、追加されたカスタム テンプレートの適用を行います。
$template = $site.GetWebTemplates(1041) |
Where-Object { $_.GetType().Name -eq "SPFeatureWebTemplate" }
$web = $site.RootWeb
$web.ApplyWebTemplate($template.Name)
PowerShell だと 7行で終わってしまう所が素晴らしい。
ちなみに、SharePoint 2013 用として作成していましたが、SharePoint 2010 でも動きそうなので、両方の対応としています。
ところが、SharePoint 2013 と SharePoint 2010 ではテンプレートのプロパティの値が異なるようで、SharePoint 2013 で利用出来た IsCustomTemplate で区別が出来なかったので、暫定的に、オブジェクトの型 (クラス名) で区別するようにしています。
作成した PowerShell スクリプトはこちらになります。
SharePoint 2013 と SharePoint 2010 で動作することを確認済みです。
New-SPSiteFromCustomTemplate.ps1
-Url: サイト コレクションの URL (必須)
-OwnerAlias: サイト コレクション の管理者 (必須)
-LiteralPath: カスタム テンプレートのファイル パス (必須)
-Name: サイト コレクションのタイトル (オプション)
・Using a site template with a new site collection in SharePoint Online
http://blog.ciaops.com/2013/07/using-site-template-with-new-site.html
・Add-SPUserSolution
https://technet.microsoft.com/ja-jp/library/ff607715.aspx
・Install-SPUserSolution
https://technet.microsoft.com/ja-jp/library/ff607653.aspx
今回のスクリプトには全く反映出来ていませんが、PowerShell スクリプトで引数を必須にするとか、いろいろと定義が出来るんですね・・・
Kokuho Hi (Sonorite / SharePoint Technology Center)