SharePoint Online: Create Single Line of Text Column in List using PowerShell
Requirement: PowerShell to add a single line of text column to the SharePoint Online list.
How to Add Single Line of Text Column to SharePoint Online List?
The “Single line of text” column in SharePoint Online stores text value in a single row up to 255 characters. We can use this field type when you want to add free-flowing text value as the metadata of a list or document library. To add a single line of text field to a list, do the following:
- Browse to your SharePoint Online site and navigate to the target list in which you want to create a new Single Line of Text column.
- Under the List tab, click on the “Create Column” button in the ribbon.
- Provide the Name to your new column, specify the type as “Single Line of Text”.
- Fill in other optional values and click on “OK” to create a Single line of text column to the SharePoint Online list.
PowerShell to Add Single Line of Text Column to List in SharePoint Online
Here is the PowerShell script to create a single line of text column to any existing list or library in SharePoint Online:
#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#Custom function to add column to list
Function Add-SingleLineTextColumnToList()
{
param
(
[Parameter(Mandatory=$true)] [string] $SiteURL,
[Parameter(Mandatory=$true)] [string] $ListName,
[Parameter(Mandatory=$true)] [string] $Name,
[Parameter(Mandatory=$true)] [string] $DisplayName,
[Parameter(Mandatory=$true)] [string] $Description,
[Parameter(Mandatory=$true)] [string] $IsRequired,
[Parameter(Mandatory=$true)] [string] $EnforceUniqueValues,
[Parameter(Mandatory=$true)] [string] $MaxLength
)
#Generate new GUID for Field ID
$FieldID = New-Guid
Try {
$Cred= Get-Credential
$Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Credentials
#Get the List
$List = $Ctx.Web.Lists.GetByTitle($ListName)
$Ctx.Load($List)
$Ctx.ExecuteQuery()
#Check if the column exists in list already
$Fields = $List.Fields
$Ctx.Load($Fields)
$Ctx.executeQuery()
$NewField = $Fields | where { ($_.Internalname -eq $Name) -or ($_.Title -eq $DisplayName) }
if($NewField -ne $NULL)
{
Write-host "Column $Name already exists in the List!" -f Yellow
}
else
{
#Define XML for Field Schema
$FieldSchema = "<Field Type='Text' ID='{$FieldID}' Name='$Name' StaticName='$Name' DisplayName='$DisplayName' Description='$Description' Required='$IsRequired' EnforceUniqueValues='$EnforceUniqueValues' MaxLength='$MaxLength' />"
$NewField = $List.Fields.AddFieldAsXml($FieldSchema,$True,[Microsoft.SharePoint.Client.AddFieldOptions]::AddFieldInternalNameHint)
$Ctx.ExecuteQuery()
Write-host "New Column Added to the List Successfully!" -ForegroundColor Green
}
}
Catch {
write-host -f Red "Error Adding Column to List!" $_.Exception.Message
}
}
#Set parameter values
$SiteURL="https://crescent.sharepoint.com"
$ListName="Projects"
$Name="ProjectCode"
$DisplayName="Project Code"
$Description="Enter the Project Code"
$IsRequired = "TRUE"
$EnforceUniqueValues="FALSE" #Must set Indexed="FALSE", if Unique="TRUE"
$MaxLength="100"
#Call the function to add column to list
Add-SingleLineTextColumnToList -SiteURL $SiteURL -ListName $ListName -Name $Name -DisplayName $DisplayName -Description $Description -IsRequired $IsRequired -MaxLength $MaxLength -EnforceUniqueValues $EnforceUniqueValues
How to set the default value for the field?
You can set the default value by adding
$FieldSchema = "<Field Type='Text' Name='$Name' StaticName='$Name' DisplayName='$DisplayName'><Default>Project Code - XXXXX</Default></Field>"
PnP PowerShell to Add Field to List in SharePoint Online
Here is the PowerShell to add list column of type Single Line of Text to SharePoint Online List:
#Config Variables
$SiteURL = "https://Crescent.sharepoint.com"
$ListName= "Team Projects"
$FieldTitle= "Project Status"
$FieldInternalName ="ProjectStatus"
$FieldType = "Text"
#Get Credentials to connect
$Cred = Get-Credential
Try {
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials $Cred
#Add new field to list
Add-PnPField -List $ListName -DisplayName $FieldTitle -InternalName $FieldInternalName -Type $FieldType -Required -AddToDefaultView -ErrorAction Stop
Write-host -f Green "New Field '$FieldTitle' Added to the List!"
}
catch {
write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}
Similarly, we can add a text column to the SharePoint Online list from the XML schema as well.
#Config Variables
$SiteURL = "https://Crescent.sharepoint.com/sites/marketing"
$ListName= "Projects"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)
#Define XML Schema for Text Field
$FieldXML= "<Field Type='Text' Name='ProjectCode' ID='$([GUID]::NewGuid())' DisplayName='Project Code' Required ='FALSE' EnforceUniqueValues = 'TRUE' Indexed='TRUE'></Field>"
#Add Text Field to list from XML
Add-PnPFieldFromXml -FieldXml $FieldXML -List $ListName