Create Site Column and Content Type using PowerShell in SharePoint 2013/2016

In this SharePoint 2013 article, we will discuss how to create site column and content type using PowerShell in SharePoint 2013/2016.

Automating deployment process will always improve productivity and can eradicate manual errors. In this article, I am enhancing our PowerShell knowledge by adding one more feather creating “Site Columns and Content Types”. This will definitely help while setting up a larger site collection with multiple site columns and content types.

Create Site Column and Content Types Using PowerShell in SharePoint 2013/2016

The below PowerShell script will create a new content type group, content type, Site column group with one site column in SharePoint.

try {
$url = "http://sharepoint13:12345/"
$web = get-spweb $url
$MSTechnologyCTName = "MSTechnology Content Type"
$columnName = "Technology"
$contentTypes = $web.AvailableContentTypes | Select-Object Name
$cntTypeflag = $false
# We are taking Item as parent content type to inherit from "0x01" is the ID for Item content type
$parentcntType = $web.contenttypes | where {$_.ID -eq "0x01"} | Select-Object Name
foreach ($contType in $contentTypes) {
if ($contType.Name -eq $MSTechnologyCTName) {
$cntTypeflag = $true
Write-Host "Content Type=" $contType.Name -foregroundcolor White -BackgroundColor Green

if (!$cntTypeflag) {
$MSTechnologyCTParent = $web.availablecontenttypes[$parentcntType]
$MSTechnologyCT = new-object Microsoft.SharePoint.SPContentType($MSTechnologyCTParent, $web.contenttypes, $MSTechnologyCTName)
$MSTechnologyCT.Group = "MSTechnology Content Types Group"
$web.fields.add($columnName, "Text", $false)
$MSTechnologyfield = $web.Fields.GetField($columnName)
$MSTechnologyfield.Group = "MSTechnology Site Columns Group"
$MSTechnologyfield.Title = $columnName
$MSTechnology_fieldLink = New-OBject Microsoft.SharePoint.SPFieldLink($MSTechnologyfield)
else {
Write-Host "Content Type existed in site collection"
catch {
Write-Host "`nError:: $($_.Exception.Message)" -foregroundcolor red -BackgroundColor Yellow

Let us walk through the code Line by Line:

Line 1: As per the MS best practices, I have rapped my code inside a try-catch block

Line 2: Created a variable $url for site collection http://sharepoint13:12345

Line 3: We are creating object to site collection http://sharepoint13:12345

Line 4 to 7: I am creating variables for various values like name of the content type to be created, column name to be created, content type existence flag and then I am fetching all the existing content types in the site collection with the below line of code.

$web.AvailableContentTypes | Select-Object Name

Note: In this statement, I am selecting the name of a content type from the entire collection of properties

Line 9: While creating content type we must define the parent content type from which we are inheriting the new content type. In the below line I am getting the name of “Item” content type.

$parentcntType = $web.contenttypes | where {$_.ID -eq “0x01”} | Select-Object Name

You can see more about the parent content types and the hexadecimal formats in the MSDN article:

Line 10 to 15: I am looping through the content types and ensuring that “MSTechnology Content Type” does not exist in case if it exists I am showing an error message that it already exists.

Line 18 to 29: I am creating below artifacts:

  • Site column “Technology”
  • Site column group “MSTechnology Site Columns Group”
  • Site Content Type Group “MSTechnology Content Types Group”
  • Creating “MSTechnology Content Type”

Once you run the script you can verify the new artifacts in the site collection by navigating to Site Settings -> Site Columns.

Newly created site column & Group with PowerShell script:

create site column using powershell sharepoint

Newly Created site content type & group with PowerShell script:

create content type using powershell sharepoint

You may like following PowerShell SharePoint tutorials:

This SharePoint 2013 tutorial helps us to create a site column, content type using PowerShell in SharePoint 2013/2016.