Export-Import SharePoint Content Type using PowerShell

Requirement: Copy a Content Type from development environment to staging environment.

Solution Overview:
  1. Export site columns associated with the content type from the source site collection
  2. Export custom content data types from source site collection
  3. Import site columns from the exported site columns xml
  4. Re-Create custom content types programmatically with PowerShell in the target site collection.
Steps in detail:
To Export and Import Site columns associated with the particular content type, follow my post:  Export Import Site Columns with PowerShell

Export Import SharePoint Content Type to XML using PowerShell
Once all fields of the particular content type is exported and imported, we can Export-Import Content types:

PowerShell Script to Export Content Type to XML:

    #Get the Source Web
    $SourceWeb = Get-SPWeb "http://dev.crescent.com"
    #Create Export XML File
    $XMLFile = "C:\SiteContentTypes.xml"
    New-Item $XMLFile -type file -force
    #Wrap Content Type Schema XML inside <ContentTypes> Element 
    Add-Content $XMLFile "`n<ContentTypes>"

    #Export All Content types of specific Group to XML file
    $sourceWeb.ContentTypes | ForEach-Object {
        if ($_.Group -eq "Crescent Content Types") 
     #Export Content Types to XML file
            Add-Content $XMLFile $_.SchemaXml
    #Closing Wrapper 
    Add-Content $XMLFile "</ContentTypes>"

    #Dispose the web object

PowerShell Script to Import Content Type:
 [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
      #Get the Target Web
      $TargetWeb = Get-SPWeb "http://test.crescent.com"
    #Get the Content Type Schema from XML
    $XMLFile = "C:\SiteContentTypes.xml"  
    [xml] $CTypeXML = Get-Content($XMLFile)
    #Create Site Content Types
    $CTypeXML.ContentTypes.ContentType | ForEach-Object {

        #Create New Content Type object inheriting from parent
        $SPContentType = New-Object Microsoft.SharePoint.SPContentType ($_.ID,$TargetWeb.ContentTypes,$_.Name)
        #Set Content Type description and group
        $SPContentType.Description = $_.Description
        $SPContentType.Group = $_.Group
     #Get all field References from the XML
        $_.Fields.Field  | ForEach-Object {
   write-host $_.DisplayName
   #Add Fields Reference to the New content type
            if( !$SPContentType.FieldLinks[$_.DisplayName])
                #Create a field link for the Content Type by getting an existing column
                $SPFieldLink = New-Object Microsoft.SharePoint.SPFieldLink ($TargetWeb.Fields[$_.DisplayName])
                #Check to see if column is Optional, Required or Hidden
                if ($_.Required -eq "TRUE") {$SPFieldLink.Required = $true}
                if ($_.Hidden -eq "TRUE") {$SPFieldLink.Hidden = $true}
                #Add column to Content Type
        #Create Content Type on the site and update Content Type object
        $ct = $TargetWeb.ContentTypes.Add($SPContentType)
        write-host "Content type'" $ct.Name "'has been created"


Thanks to: http://get-spscripts.com/2011/01/export-and-importcreate-site-columns-in.html
Export-Import SharePoint Content Type using PowerShell Export-Import SharePoint Content Type using PowerShell Reviewed by Salaudeen Rajack on March 07, 2013 Rating: 5


  1. Hey guy, just want to let you know that this code was just what I needed to migrate some content types to another site collection when we didn't want to use the content hub. What a quick and elegant solution. Thanks again.

  2. I got this error while executing multiple times while testing for import content type. Error - Exception calling ".ctor" with "3" argument(s): "Unable to cast COM object of type 'Microsoft.SharePoint.Library.SPRequestInternalClass' to interface type 'Microsoft.SharePoint.Library.ISPRequest'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{BDEADF28-C265-11D0-BCED-00A0C90AB50F}' failed due to the following error: Bad variable type. (Exception from HRESULT: 0x80020008 (DISP_E_BADVARTYPE))."

    1. Hi, I'm getting the same error. Did you figure it out?

  3. Hi wanna create content type & Site columns from existing list in share site 2013


Please Login and comment to get your questions answered!

Powered by Blogger.