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 と呼んでいました。
サイト コレクション作成時には、「テンプレートの選択」にて、「ユーザー設定」タブの「< テンプレートを後で選択... >」を選択しておきます。

作成された結果のサイト コレクションにアクセスすると、引き続き、以下のようなサイト テンプレート選択のページが表示されますが、その下の「ソリューション ギャラリー」を選択します。

「ソリューション ギャラリー」のページにて、「ソリューションのアップロード」を選択します。

「ソリューションの追加」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)