Crear y añadir columnas a un Content Type via Power Shell

Nota: Al final de la explicación está el código entero para copy-paste.

Nota: Si no lo ejecutamos directamente desde la SharePoint Management Shell debemos añadir su SnapIn:

Add-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue

1. Declaramos el sitio web y el content type al que queremos añadir la columna

$web = Get-SPWeb "YOUR_URL"
$ctype = $web.contenttypes["YOUR_CONTENTTYPE"]

2. Declaramos la nueva columna a través de su XML

$fieldXML = '<Field Type="Text"
Name="FIELD_NAME"
Description="FIELD_DESCRIPTION"
DisplayName="FIELD DISPLAY NAME"
StaticName="FIELD_NAME"
Group="FIELD_GROUP"
Hidden="FALSE"
Required="FALSE"
Sealed="FALSE"
ShowInDisplayForm="TRUE"
ShowInEditForm="TRUE"
ShowInListSettings="TRUE"
ShowInNewForm="TRUE">
</Field>'

3. Añadimos la columna a las columnas de sitio

$web.Fields.AddFieldAsXml($fieldXML)

4. Obtenemos la columna creada para asegurarnos de que se ha añadido correctamente

$field = $web.fields.getfield("FIELD_NAME")

5. Creamos un enlace a la columna que añadimos al content type

$fieldLink = new-object Microsoft.SharePoint.SPFieldLink($field)
$ctype.fieldlinks.add($fieldLink)
$ctype.update($true)

6. Dispose de la web

$web.Dispose()

Código entero

$web = Get-SPWeb "YOUR_URL"
$ctype = $web.contenttypes["YOUR_CONTENTTYPE"]
$fieldXML = '<Field Type="Text"
Name="FIELD_NAME"
Description="FIELD_DESCRIPTION"
DisplayName="FIELD DISPLAY NAME"
StaticName="FIELD_NAME"
Group="FIELD_GROUP"
Hidden="FALSE"
Required="FALSE"
Sealed="FALSE"
ShowInDisplayForm="TRUE"
ShowInEditForm="TRUE"
ShowInListSettings="TRUE"
ShowInNewForm="TRUE">
</Field>'
$web.Fields.AddFieldAsXml($fieldXML)
$field = $web.fields.getfield("FIELD_NAME")
$fieldLink = new-object Microsoft.SharePoint.SPFieldLink($field)
$ctype.fieldlinks.add($fieldLink)
$ctype.update($true)
$web.Dispose()

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.