Sunday, 14 February 2016

Office 365 / SharePoint Online : Creating the Site Columns / Fields using CSOM in PowerShell

Hi All,

Recently we got a chance to create the site columns for our one of the SharePoint online site collection. Rather than creating them manually, we have used the approach of CSOM in PowerShell scripts and reading all the fields/site columns from the .CSV file.
So in this article I’ll explain the steps how to create the Site Columns / Fields, reading from the .CSV file using CSOM in PowerShell.
Step 1 : Preparing the .CSV file having all the site columns and values for their respective properties which we want to set.

For example below .CSV file which we are using in this script
Fig 1 : Sample fields CSV file and fields properties
In above .CSV file, column headings are basically the properties of the site columns. We can add any property as column which we want to set. Each row represent the site column and their properties values.
Step 2 : Set the required variables like SiteCollection URL where we need to create the site columns, UserName and Password of your site to connect as
#Site collection URL where we need to create the site columns
$siteurl = ""  # Your site collection URL
#User name and Passwords
$userName =""  # Your user name
$password =""  # Password
Step 3 : Get the Microsoft.SharePoint.Client.ClientContext instance and set the credentials as
#client context object and setting the credentials 
[Microsoft.SharePoint.Client.ClientContext]$clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($siteurl
 # convert password into secured string
$securedpw = ConvertTo-SecureString $password -AsPlainText -Force

$clientContext.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($userName, $securedpw)
Step 4: Get / Load the required web object, we will require it to get the fields collection as

#get the respective web
$site = $clientContext.Site
$web = $site.RootWeb

#Get all fields collection
$fields = $web.Fields



Step 5 : Import the site columns .CSV file

# Import the site columns CSV file
$fieldslist = Import-Csv -path 'C:\CreateSiteColumns.csv'  #give here your .csv file path

Step 6 : Loop through above fields list and create the site column

#Create the respective fields
ForEach($field in $fieldslist) {

# Prepare the fieldxml for Site Column - Please be careful with single and double quotes, if those got disturbed then it take some time to fix :)

$fieldXML = "<Field Name='" + $field.Name +"' Type='" + $field.Type +"' Description='"+$field.Description+"' DisplayName='"+$field.DisplayName+"' StaticName='"+$field.StaticName+"' Group='"+$field.Group+"' Hidden='"+$field.Hidden+"' Required='"+$row.Required+"' Sealed='"+$field.Sealed+"' ShowInDisplayForm='"+$field.ShowInDisplayForm+"' ShowInEditForm='"+$field.ShowInEditForm +"' ShowInNewForm='"+$field.ShowInNewForm+"'></Field>"

# Create Site Column from fieldXML
} #foreach

Enjoy Reading :)

Feel free to comment / feedback / suggestions / thoughts if any or if you have any query :) 


Sumit said...

Really nice articles sir. Many thanks for sharing. Keep writing

Prasham Sabadra said...

Thanks Sumit!!!