This PowerShell script will provision a new list remotely using ListCreationInformation.CustomSchemaXml.

Further below is an example of the XML to be fed in, which is the tricky part.

param(

[Parameter(Mandatory = $true)][string]$webUrl,

[Parameter(Mandatory = $true)][string]$schemaXmlFilePath,

[Parameter(Mandatory = $true)][int]$listTemplateId

)

 

$csom = [Reflection.Assembly]::LoadWithPartialName(‘Microsoft.SharePoint.Client’)

$ctx = New-Object Microsoft.SharePoint.Client.ClientContext $webUrl

$ctx.Load($ctx.Web.Lists)

$ctx.Load($ctx.Web.ListTemplates)

$ctx.ExecuteQuery()

 

$schemaXml = [xml] (Get-Content $schemaXmlFilePath)

$template = $ctx.Web.ListTemplates | WHERE { $_.ListTemplateTypeKind -eq $listTemplateId }

$info = New-Object Microsoft.SharePoint.Client.ListCreationInformation

$info.Title = $schemaXml.List.Title

$info.Url = $schemaXml.List.Url

$info.CustomSchemaXml = $schemaXml.OuterXml

$info.TemplateType = $listTemplateId

$info.TemplateFeatureId = $template.FeatureId

 

$list = $ctx.Web.Lists.Add($info)

$ctx.ExecuteQuery()

This script works against SharePoint 2010 and SharePoint 2013, but requires PowerShell v3 or higher.

How to structure the XML

Simply grabbing the SchemaXml from an existing list does not work.

An easy way to start is to use Visual Studio. Add a list to a SharePoint project and then grab the Schema.xml file. It can be used as-is. Here is an example generated when choosing the Custom List template.

http://schemas.microsoft.com/sharepoint/”>

 

 

 

 

 

 

 

 

http://schemas.microsoft.com/sharepoint/v3″ StaticName=”Title” MaxLength=”255″ />

 

 

 

 

main.xsl

30

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

main.xsl

clienttemplates.js

30

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Written By:

Softlanding

More By This Author