This PowerShell script will provi
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