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
Thank you a million!
I sincerely appreciate your help.
Thank you.
You didn’t dispose web in import script 😉
#Dispose the web object
$TargetWeb.Dispose()
Exactly what I was looking for!!
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
How can I restrict the export only the selected column from the group? Not all the columns of the entire group?
I did try to put the if {$_.Name -eq “ColumnName” } within the if ($_.Group -eq “GroupName”). But it is not exporting the selected column.
Khushi,
There is no “Name” property in SPField class. Use properties such as: Title, StaticName, InternalName.
thanks, the only script that worked for me 🙂
Does not work for me… Empty XML…
Check your Site columns Group! I’ve used “Crescent Travel Request”, Update it accordingly!!