Export-Import Site Columns in SharePoint using PowerShell

It’s a frequent requirement to copy site columns between SharePoint environments, isn’t it? Today had a requirement to copy a bunch of site columns from the development environment to the staging environment.

We used to package site columns as a WSP Solution package in such requirements: Create Site Column Feature for SharePoint 2010, This time, let’s use PowerShell to Export and Import Site Columns!

PowerShell Script to Export Site columns:

#Get the Source Web
$sourceWeb = Get-SPWeb "https://dev.crescent.com"

#Create a XML File to Export Fields
$xmlFile = "C:\SiteColumns.xml"
New-Item $xmlFile -type file -force

#Wrap Field Schema XML inside <Fields> Element 
Add-Content $xmlFile "`n<Fields>"

#Export All Site Columns of specific Group to XML file
$sourceWeb.Fields | ForEach-Object {
	if ($_.Group -eq "Crescent Travel Request") {
		Add-Content $xmlFile $_.SchemaXml
	}
}
#Closing Wrapper
Add-Content $xmlFile "</Fields>"

#Dispose the web object
$sourceWeb.Dispose()

PowerShell Script to Import Site Columns from XML:

#Get the Target Web
$TargetWeb = Get-SPWeb "https://test.crescent.com"

#Get XML file exported
[xml]$fieldsXML = Get-Content("C:\SiteColumns.xml")

#Loop Through Each Field
$fieldsXML.Fields.Field | ForEach-Object {
	#Check if the target web has the field already!
	if ($TargetWeb.Fields.ContainsField( $_.Name) -Eq $false){ 
		#Add Site column to Target Web
		$TargetWeb.fields.AddFieldAsXml($_.OuterXml)
	}
}

Thanks Phil for the idea: https://get-spscripts.com/2011/01/export-and-importcreate-site-columns-in.html

Salaudeen Rajack

Salaudeen Rajack - SharePoint Expert with Two decades of SharePoint Experience. Love to Share my knowledge and experience with the SharePoint community, through real-time articles!

10 thoughts on “Export-Import Site Columns in SharePoint using PowerShell

  • Thank you a million!
    I sincerely appreciate your help.

    Reply
  • Thank you.
    You didn’t dispose web in import script 😉

    #Dispose the web object
    $TargetWeb.Dispose()

    Reply
  • Exactly what I was looking for!!

    Reply
  • Thank you so much Salaudeen!! I tried $_.Name didn’t work I tried $_.DisplayName didn’t work!
    You are the Best StaticName did work!!!

    Appreciate your help.
    Regards,
    Khushi

    Reply
  • How can I restrict the export only the selected column from the group? Not all the columns of the entire group?

    Reply
  • I did try to put the if {$_.Name -eq “ColumnName” } within the if ($_.Group -eq “GroupName”). But it is not exporting the selected column.

    Reply
    • Khushi,

      There is no “Name” property in SPField class. Use properties such as: Title, StaticName, InternalName.

      Reply
  • thanks, the only script that worked for me 🙂

    Reply
  • Does not work for me… Empty XML…

    Reply
    • Check your Site columns Group! I’ve used “Crescent Travel Request”, Update it accordingly!!

      Reply

Leave a Reply

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